1.显示小数点
我们可能忽略了数码管上还有一段发光二极管,这个在它的右下角,平时我们点亮这个小点是用来表示数字的小数点。要想让这个小数点即使显示的数字一直变但它还是保持常亮状态有什么办法吗。
我们不可能为每一个数字再弄一个带小数点的真值表数组,这样太麻烦了,熟悉C语言知识的话,我们用另一种方法。
大家要明白这个知识点:(0x7F)&(0xC0)=0x40
用二进制表示
0111 1111
&
1100 0000
=
0100 0000
01000000(0x40)就是使数码管显示0的同时还显示小数点了
所以不管是0xC0还是要显示其他数字,我们只要“0x7F & LedBuff[x]”就能保持住小数点常亮了。
2.代码
#include sbit ADDR2 = P1^2; sbit ADDR1 = P1^1; sbit ADDR0 = P1^0; sbit ENLED = P1^4; sbit ADDR3 = P1^3; unsigned char code LedChar[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管状态值初始化 unsigned char LedBuff[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//数码管显示缓存区 void delay_ms(unsigned int x) { unsigned int i,j; if(x==1000) { for(i=0;i<19601;i++)//延时1s { for(j=5;j>0;j--); } } else while(x--)for(j=115;j>0;j--); } void main() { unsigned char Second=0; ADDR3 = 1;//使能三八译码器 ENLED = 0;// ADDR2 = 0;//************************* ADDR1 = 0;//三八译码器的IO0输出低电平 ADDR0 = 0;//************************* while(1) { LedBuff[0]=LedChar[Second]; P0=0x7F & LedBuff[0]; Second++; if(Second>=10)Second=0; delay_ms(1000); } } 因为代码功能只是显示一个数码管,所以不需要快速切换三八译码器的其他IOx输出低电平,也就可以用“delay_ms(1000);”。
上一篇:51单片机-高位不显示0
下一篇:51单片机-分钟秒表