功能:四個獨立按鍵控制數碼管上的數字每秒自增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)
2018-6-27 11:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|