最新公告
  • 欢迎光临可关玩日记,免费分享生活知识及创业资讯
  • 51单片机 数码管段选写法

    51单片机 数码管段选写法

    实际中的写法,差不多都是先送数据再送使能的,
    这个区别,没有原理可以说的,按照实际效果决定的
    非要说原理,就是使能之後,由於上一次数据没有清空,数码管显示上一个数据,然後再送数据才显示当前数据,在视觉上就会有“残影”

    51单片机的数码管怎么编出两位数啊??

    如果是静态数码管,那么可以通过锁存器来分别控制数码管显示,如果是动态的,那么只能扫描控制两位及两位以上的数码管。

    何用单片机和数码管制作倒计时表

    这是我自己写的代码,修改了我前段时间写的电子钟,在跟老师借的板子上调试成功,你看看参考一下。(还是我第一次写的编程规范化程序,有注释哦)
    //******************************************************************
    //作者:cheungman
    //日期:2006-9-23
    // 本程序为倒计时程序,用AT89S51,晶振为11.0592MHz
    // P2作为数码管的数据输入,P1作为数码管的控制位
    //******************************************************************

    #include unsigned int time; unsigned char second10, second1,minute10,minute1; unsigned char count1=59,count2=59; //定义分倒计59分 钟,秒倒计59秒 //周老师的开发板上的数码管字型码(加点的) unsigned char code tab[]={0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef}; //周老师的开发板上的数码管字型码(不加点的) unsigned char code tab1[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //共阴字型码 void delay(unsigned char i) //数码管动态显示的延时子程序 { unsigned char j; while((i–)!=0) { for(j=123;j>0;j–); } } void display(second10, second1,minute10,minute1) //显示子程序 { P1=0x04; P2=tab1[minute10]; delay(1); P1=0x08; P2=tab[minute1]; delay(1); P1=0x10; P2=tab1[second10]; delay(1); P1=0x20; P2=tab1[second1]; delay(1); } main() { TMOD=(TMOD & 0xf0) | 0x02; //T0工作模式是方式2 TH0=0x06; //定义初始值为0.06ms,计时0.256ms-0.06ms=0.25ms TL0=0x06; TR0=1; //开启T0计时 EA=1; ET0=1; while(1) { display(count1/10,count1%10,count2/10,count2%10); } } void timer0() interrupt 1 using 0 //T0中断 { TH0=0x06; TL0=0x06; time++; if(time==4000) //4000*0.25ms=1000ms=1s { time=0; count1–; if(count1==0) { count1=59; count2–; if(count2==0) { count2=59; } } } }