总结:错题笔记、板子问题、数码管、移位

1.串口是不可寻址位 只能整体赋值 如果要单独赋值 则需在之前先定义在使用。比如你直接写:P1^3=0;是不对的 编译不会通过的。
2.keil对含有特殊符号的.c文件编译不了 比如:% () ,中文目前没发现有报错过。

//4个数码管显示1,2,3,4
//板子是P0控制段选端,P2控制位选端:P24-27
#include<reg51.h>
#include<intrins.h>
// --------------------------------------------------------
void main()
{
	unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //板子共阴0-9数码管
	unsigned int i,k;
	while(1)
	{
		P2=0XEF;     //1110 P24位选码选中
		for(i=1;i<5;i++){
			P0=led[i]; //段码位赋值
			for(k=0;k<20;k++);
			P0=0X00;
			//P2<<=1;	  	 //用移动运算符过程:   1101 1110、	  1011 1100、	 0111 1000; 
			P2=_crol_(P2,1); //用循环移动函数过程: 1101 1111、   1011 1111、	 0111 1111;
		}																   
	}
}

   程序代码编译无错误,经检查逻辑上也没有问题。但是不知道为什么用移位运算符//P2<<=1;这句就可以达到效果。用循环移位函数,下载到板子之后,显示的是8894,又好像是1794,反正不是1234,然后我按一下按键开关的P20,P21,P23口任一一个,就变成1234了

  搞不懂,为什么会这样。板子按键开关默认就是高电平1,我用移位运算符或循环移位函数,根据移动过程分析。循环移动函数的过程,P20,P21,P23这三位始终是1,未改变,但是不明白呀,为什么不行。然后用移位运算符,发现移动的过程P20,P21,P23这几个变成了0,他下载到板子居然直接达得到效果。好,那我把P2初始值改成P2=0XE0;结果发现始终显示8894了,按也没反应,就更离谱。

最后我总结:在应用板子,串口尽量都单独定义,需要用到那个就写那个(况且板子也本来就那几个口),而不是这样为了方便直接整体定义,这样真的很容易出错,出的错你都检查不出来的那种错。

posted @ 2022-05-15 23:59  iZJ"Qq4577105  阅读(44)  评论(0编辑  收藏  举报