若定义变量unsigned char 范围c=0x80,则执行指令c=_crol_(c,4)后,变量c?

不知道你是不是用的51单片机给伱一个程序参考一下吧。

在#MCU2的数码管上显示收到的学号后3位

若与自己的相符合则发送Right!否则发送Wrong!

//共阳极数码管码表,定位在ROM中

带参数傳递的显示程序循环方式


  位码的发送较灵活顺序结構编程时,可以根据动态扫描的方向依次将8个位码送至P2口。  循环结构编程时适用范围较广的一种方法是定义位码表,位码表中位碼的排列次序一般与扫描次序一致如果从DS7~DS0扫描,位码就按7F~FE的次序存放定义位码表时也需要加入关键字“code”,使位码表存于程序存儲器ROM中;如果各位码之间存在特殊规律时可以不定义位码表,依据存在的规律修改位码由表3-2可知,将前一个位码右移一位就得到下一個新的位码利用头文件intrins.h中的循环移位函数,就可以实现位码的更新扫描时先发送位码控制字的初,点亮DS7;利用_cror_( )对位码控制字循环右移1位控制字修改,点亮DS6;……;也实现了对8个数码管字位口的控制相比来说定义位码表的方式更直观。   2. 段码的发送  在数码管上顯示数码“1”时可以直接用语句“P0=seg[1]”发送“1”的段码至P0口;显示“2”时,语句为“P0=seg[2]”……。这种方法虽然直观但不利于功能扩展,┅般只适用于顺序结构  循环结构中通过语句“P0=seg[i]”发送i 的段码,显示i通过自增、自减运算修改i后,可以使数码管上显示出按递增或遞减规律变化的数值但是要显示这种没有任何规律的数据时,就无能为力了   循环结构中通用的一种方法是定义显示数组,该数组鼡于存放将要显示在数码管上的数码且显示数组的长度与数码管的位数相同。例如显示1~8时显示数组的各元素应为{1,23,45,67,8};反之如显示数组中的元素为{96,45,03,52}时,8个数码管上一定显示由此可见,显示数组中的元素与数码管上的显示值是一一对应的與段码表、位码表不同的是,显示数组一般存于数据存储器中以便写入新的数据,更新数码管显示的信息   定义显示数组disp[]={9,6,4,5,0,3,5,2}后,可通過语句“P0=seg[disp[i]];”循环发送序号为i 的元素的段码至P0口从而在数码管上显示元素disp[i]。改变显示数组的元素就可以更新数码管上的显示值。  3. 顺序结构  采用顺序结构编写动态扫描程序时可以直接将位码送至I/O口,因此只需定义段码表  1) 显示  主函数中顺序执行8次“发送位码、发送段码、显示1 ms”,从DS7~DS0对8个数码管扫描一遍;然后再重新开始扫描第二遍;……;直至无数遍。主函数流程图如图3-11所示   源程序    #include <reg51.h>    #define uchar unsigned char    #define uint unsigned

我要回帖

更多关于 unsigned char 的文章

 

随机推荐