功能:四个独立按键控制数码管上的数字每秒自增1并在暂停后增减1
包含keil的项目文件和C语言代码等文件
单片机源程序如下:
- #include <reg51.h>
- sbit LSA = P2^2;
- sbit LSB = P2^3;
- sbit LSC = P2^4;
- sbit k1=P3^1;
- sbit k2=P3^0;
- sbit k3=P3^2;
- sbit k4=P3^3;
- unsigned int num=2017;
- #define GPIO_Digitaltube P0
- unsigned char DIG_CODE[17]=
- {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- void delay1ms(void)
- {
- unsigned char a,b;
- for(b=199;b>0;b--)
- for(a=1;a>0;a--);
- }
- void Digital_Tube_Display(num)
- {
- LSA = 1;
- LSB = 1;
- LSC = 1;
- GPIO_Digitaltube = DIG_CODE[num/1000];
- delay1ms();
- GPIO_Digitaltube = 0X00;
- LSA = 0;
- LSB = 1;
- LSC = 1;
- GPIO_Digitaltube = DIG_CODE[num/100%10];
- delay1ms();
- GPIO_Digitaltube = 0X00;
- LSA = 1;
- LSB = 0;
- LSC = 1;
- GPIO_Digitaltube = DIG_CODE[num/10%10];
- delay1ms();
- GPIO_Digitaltube = 0X00;
- LSA = 0;
- LSB = 0;
- LSC = 1;
- GPIO_Digitaltube = DIG_CODE[num%10];
- delay1ms();
- GPIO_Digitaltube = 0X00;
- }
- void keypros()
- {
- if(k1==0)
- {
- delay1ms();
- if(k1==0)
- {
- EA=0;
- }
- while(!k1);
- }
- if(k2==0)
- {
- delay1ms();
- if(k2==0)
- {
- EA=1;
- }
- while(!k2);
- }
- if(k3==0)
- {
- if(EA==0)
- {
- delay1ms();
- if(k3==0)
- {
- num=++num;
- }
- while(!k3);
- }
- }
- if(k4==0)
- {
- if(EA==0)
- {
- delay1ms();
- if(k4==0)
- {
- num=--num;
- }
- while(!k4);
- }
- }
- }
- int main()
- {
- TMOD=0X10;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ET1=1;
- EA=1;
- TR1=1;
- while(1)
- {
- keypros();
- Digital_Tube_Display(num);
- }
- }
- void timer1(void) interrupt 3
- {
- static unsigned char i = 0;
- i++;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- if(i==20)
- {
- i=0;
- num=++num;
- }
- }
复制代码
所有资料51hei提供下载:
四个独立按键控制数码管上的数字每秒自增1并在暂停后增减一.zip
(25.26 KB, 下载次数: 29)
|