单片机显示三位整数
扫描二维码
随时随地手机看文章
利用数码管显示三位数是利用了单片机数码管的动态扫描,但此方法又有不同点,我们不再需要位选table,实现的具体思路是,先将要显示的3位数进行百位,十位,个位进行分离,然后再利用动态扫描将其显示即可.
源代码如下,产生的效果是:可以显示任一个小于255的整数
#include#defineuintunsignedint#defineucharunsignedcharsbitsda=P1^0;sbitclk=P1^1;sbitdig1=P1^2;sbitdig2=P1^3;sbitdig3=P1^4;sbitdig4=P1^5;ucharcodetable_num[]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde};voiddisplay(uchar);voiddelay(uint);voidwrite164(uchar);voidmain(){while(1){display(255);}}/**显示函数(仅能显示3位整数)**/voiddisplay(uchartemp){/**分离百位,十位,个位**/ucharbai,shi,ge;bai=temp/100;shi=temp%100/10;ge=temp%10;dig1=1;/*显示百位*/dig2=0;write164(table_num[bai]);delay(10);dig2=1;/*显示十位*/dig3=0;write164(table_num[shi]);delay(10);dig3=1;/*显示个位*/dig4=0;write164(table_num[ge]);delay(10);dig4=1;}/**向锁存器写入一个字节**/voidwrite164(ucharb){uchartemp=b;uinti;for(i=0;i<8;i++){clk=1;sda=temp&0x80;clk=0;temp=temp<<1;}}/**延迟函数**/voiddelay(uinttime){ucharx,y;for(x=time;x>0;x--)for(y=101;y>0;y--);}