找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1072|回复: 4
收起左侧

单片机小白新手写的关于一个数码管前三位显示一个跑表程序

[复制链接]
ID:1026584 发表于 2022-5-21 22:56 | 显示全部楼层 |阅读模式
关于一个数码管前三位显示一个跑,范围000~999,相邻两数间隔0.01s,当按下按键时跑表停止,松手后跑表继续。

单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int


  4. void display();
  5. uchar  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                              欢迎各位大神指正!!!!
  6. char hour=0,min=0,sec=0;


  7. sbit addr_A=P3^0;                                                                                         
  8. sbit addr_B=P3^1;
  9. sbit addr_C=P3^2;


  10. sbit P10=P1^0;


  11. void delay(uint i)
  12. {
  13.         while(i--);
  14. }



  15. void initT0() {
  16.         TMOD=0x01;
  17.         TH0 = (65536-10000)/256;        
  18.         TL0 = (65536-10000)%256;
  19.         EA =1;                          
  20.         ET0 =1;                        
  21.         TR0 =1;
  22. }


  23. void keyScan(){
  24.         static bit oldState = 1;
  25.         if(!P10){
  26.                 delay(1000);
  27.                 if(!P10){
  28.                         if(oldState) {        
  29.                                         oldState = 0;
  30.                             TR0=0;  
  31.                                 while(!P10){
  32.                                         display();
  33.                                 }
  34.                                 TR0=1;
  35.                         }
  36.                 }


  37.                 }
  38.                 else if(!oldState) oldState = 1;
  39. }
  40. void main() {
  41.         initT0();
  42.         while(1){
  43.                 keyScan();
  44.                 display();
  45.         }
  46. }


  47. void INT_T0() interrupt 1         
  48. {
  49.         static uchar counter = 0;   
  50.         TR0 = 0;                     
  51.         TH0 = (65536-10000)/256;        
  52.         TL0 = (65536-10000)%256;
  53.         TR0 = 1;  
  54.   counter++;
  55.   if(counter==1)         {
  56.                 counter=0;
  57.         }
  58.           sec++;
  59.                 if(sec>=10) {
  60.                         sec=0;
  61.                         min++;
  62.                 }
  63.                 if(min>=10) {
  64.                         min=0;
  65.                         hour++;
  66.                 }
  67.                 if(hour>=10) {
  68.                         hour=0;
  69.                 }
  70. }


  71. void display() {
  72.         uchar LED[3];
  73.         LED[0]=hour;
  74.         LED[1]=min;
  75.         LED[2]=sec;
  76.         
  77.         addr_A=0;
  78.         P0=table[LED[0]];
  79.         delay(200);
  80.         addr_A=1;
  81.         
  82.         
  83.         addr_B=0;
  84.         P0=table[LED[1]];
  85.         delay(200);
  86.         addr_B=1;
  87.         
  88.         addr_C=0;
  89.         P0=table[LED[2]];
  90.         delay(2000);
  91.         
  92. }
复制代码


51hei截图20220521225525.png

评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:979299 发表于 2022-5-22 13:42 | 显示全部楼层
共阴数组看上去没什么问题,0.01S太快了吧,根本看不清啊
回复

使用道具 举报

ID:1026584 发表于 2022-5-22 16:21 | 显示全部楼层
兴安xa 发表于 2022-5-22 13:42
共阴数组看上去没什么问题,0.01S太快了吧,根本看不清啊

是的,后来才发现这个问题。
回复

使用道具 举报

ID:863362 发表于 2022-5-22 17:18 | 显示全部楼层
数码管加上小数点就更完美了!
sec.JPG
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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