标题: 基于51单片机的独立按键控制数码管练习 [打印本页]

作者: Allan_Lee    时间: 2018-6-27 11:02
标题: 基于51单片机的独立按键控制数码管练习
功能:四个独立按键控制数码管上的数字每秒自增1并在暂停后增减1
包含keil的项目文件和C语言代码等文件

单片机源程序如下:
  1. #include <reg51.h>
  2. sbit LSA = P2^2;
  3. sbit LSB = P2^3;
  4. sbit LSC = P2^4;
  5. sbit k1=P3^1;
  6. sbit k2=P3^0;
  7. sbit k3=P3^2;
  8. sbit k4=P3^3;

  9. unsigned int num=2017;

  10. #define GPIO_Digitaltube P0

  11. unsigned char DIG_CODE[17]=
  12. {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  14. void delay1ms(void)
  15. {
  16.     unsigned char a,b;
  17.     for(b=199;b>0;b--)
  18.         for(a=1;a>0;a--);
  19. }

  20. void Digital_Tube_Display(num)
  21. {
  22.         LSA = 1;
  23.         LSB = 1;
  24.         LSC = 1;                               
  25.         GPIO_Digitaltube = DIG_CODE[num/1000];
  26.         delay1ms();
  27.         GPIO_Digitaltube = 0X00;
  28.         LSA = 0;
  29.         LSB = 1;
  30.         LSC = 1;
  31.         GPIO_Digitaltube = DIG_CODE[num/100%10];
  32.         delay1ms();
  33.         GPIO_Digitaltube = 0X00;
  34.         LSA = 1;
  35.         LSB = 0;
  36.         LSC = 1;
  37.         GPIO_Digitaltube = DIG_CODE[num/10%10];
  38.         delay1ms();
  39.         GPIO_Digitaltube = 0X00;
  40.         LSA = 0;
  41.         LSB = 0;
  42.         LSC = 1;                               
  43.         GPIO_Digitaltube = DIG_CODE[num%10];
  44.         delay1ms();
  45.         GPIO_Digitaltube = 0X00;
  46. }

  47. void keypros()
  48. {
  49.         if(k1==0)                 
  50.         {       
  51.                 delay1ms();
  52.                 if(k1==0)         
  53.                 {
  54.                         EA=0;
  55.                 }
  56.                 while(!k1);       
  57.         }
  58.         if(k2==0)                 
  59.         {       
  60.                 delay1ms();
  61.                 if(k2==0)         
  62.                 {
  63.                         EA=1;
  64.                 }
  65.                 while(!k2);       
  66.         }
  67.         if(k3==0)                 
  68.         {       
  69.                 if(EA==0)
  70.                 {
  71.                     delay1ms();
  72.                     if(k3==0)         
  73.                     {
  74.                             num=++num;
  75.                     }
  76.                     while(!k3);
  77.                 }       
  78.         }
  79.         if(k4==0)                 
  80.         {       
  81.                 if(EA==0)
  82.                 {
  83.                     delay1ms();
  84.                     if(k4==0)         
  85.                     {
  86.                             num=--num;
  87.                     }
  88.                     while(!k4);       
  89.                 }
  90.         }                               
  91. }

  92. int main()
  93. {
  94.         TMOD=0X10;
  95.         TH1=(65536-50000)/256;
  96.         TL1=(65536-50000)%256;
  97.         ET1=1;
  98.         EA=1;
  99.         TR1=1;
  100.     while(1)
  101.         {
  102.             keypros();
  103.                 Digital_Tube_Display(num);
  104.         }
  105. }

  106. void timer1(void) interrupt 3
  107. {
  108.     static unsigned char i = 0;
  109.         i++;
  110.         TH1=(65536-50000)/256;
  111.         TL1=(65536-50000)%256;
  112.         if(i==20)
  113.         {
  114.                 i=0;
  115.                 num=++num;
  116.         }
  117. }
复制代码

所有资料51hei提供下载:
四个独立按键控制数码管上的数字每秒自增1并在暂停后增减一.zip (25.26 KB, 下载次数: 29)



作者: 无线强大    时间: 2019-4-2 16:01
非常感谢,,帮助很大
作者: yzhbyyy    时间: 2019-4-19 12:54
非常感谢,,帮助很大
作者: cyy~qmr    时间: 2019-8-1 16:34
感谢   帮助非常大




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1