这是一个单片机用按键控制数码管显示数字并且可以通过按键来调节数码管上显示数字的大小
含源码 (keil)和仿真电路(Proteus)
单片机源程序如下:
- #include<reg51.h>
- #include"intrins.h"
- #include"delay.h"
- /*uchar code DSY[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- 0x82,0xf8,0x80,0x90,0xff}; //共阴,不显示小数点*/
- uchar code DSY[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
- 0x7D,0x07,0x7F,0x6F};
- uchar buffer[3]={0,0,0};
- uchar key_counts=0;
- uchar key_CODE;
- /* 中断初值 */
- void init()
- {
- TMOD=0x00;
- TH0=(8192-1000)/32;
- TL0=(8192-1000)%32;
- EA=1;
- ET0=1;
- TR0=1;
- }
- /*显示函数*/
- void display()
- {
- uchar i,j=0xfe;
- buffer[2]=key_counts/100;
- buffer[1]=key_counts/10%10;
- buffer[0]=key_counts%10;
- for(i=0;i<3;i++)
- {
- P3=0xff;//位选
- P2=DSY[buffer[i]];//段选
- P3=j;
- j=_crol_(j,1);
- delay(1);
- }
- }
- /*主函数*/
- void main()
- {
- init();
- //uchar i;
- P3=0xff;
- P1=0xff;
- P2=0xff;
- key_CODE=0xff;
- while(1)
- {
- display();
- key_CODE=P1;
- switch(key_CODE)
- {
- case 0xfe:if(key_counts<255)key_counts++;break;
- case 0xfd:if(key_counts>0)key_counts--;break;
- case 0xfb:key_counts=0;break;
- }
- while(P1!=0xff)
- display();
- }
-
- }
- void timer0( ) interrupt 1 using 0
- {
- uchar flag;
- TH0=(8192-1000)/32;
- TL0=(8192-1000)%32;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
按键加减清零.zip
(65.79 KB, 下载次数: 41)
|