找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8279|回复: 3
收起左侧

基于51单片机的独立按键控制数码管练习

[复制链接]
ID:360078 发表于 2018-6-27 11:02 | 显示全部楼层 |阅读模式
功能:四个独立按键控制数码管上的数字每秒自增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)
回复

使用道具 举报

ID:503018 发表于 2019-4-2 16:01 | 显示全部楼层
非常感谢,,帮助很大
回复

使用道具 举报

ID:469510 发表于 2019-4-19 12:54 | 显示全部楼层
非常感谢,,帮助很大
回复

使用道具 举报

ID:568662 发表于 2019-8-1 16:34 | 显示全部楼层
感谢   帮助非常大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表