标题: 单片机怎么在已显示的静态初值上进行动态显示 [打印本页]

作者: HuTi123    时间: 2020-11-2 20:58
标题: 单片机怎么在已显示的静态初值上进行动态显示
设计一个数码管动态显示,显示202.0,每过0.1秒,显示内容加1
求如何开始显示202.0
#include <reg51.h>
#define seg_bit P2                                       
#define seg_dat P3       
#define uint unsigned int                                        #define uchar unsigned char               
unsigned char code numtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code bittab[]={0xfe,0xfd,0xfb,0xf7};
unsigned char t;
void delayms(uint);
uint num=0;
void main()
{ TMOD=0X01;                        TH0=(65536-50000)/256;                TL0=(65536-50000)%256;        EA=1;                                ET0=1;                                       
TR0=1;               
while(1)        {                                                   
P2=0Xfe;              
P3=numtab[num%10];                  delayms(5);                               
P3=0;                 
P2=0Xfd;                P3=numtab[(num/10)%10]|0x80;                          delayms(5);                               
P3=0;                                                                              P2=0Xfb;               
P3=numtab[(num/100)%10];                          delayms(5);                               
P3=0;                P2=0Xf7;                P3=numtab[(num/1000)%10];                          delayms(5);                                P3=0;                                                                   }                }       
void jishu() interrupt 1{                        TH0=(65536-50000)/256;                        TL0=(65536-50000)%256;                t++;                if(t==2)               
{t=0;num++;}                                                                                }
void delayms(uint xms)                 //延时程序{                        uint i,j;        for(i=xms;i>0;i--)                for(j=110;j>0;j--);}
作者: csmyldl    时间: 2020-11-3 00:30
把要显示的内容存放在内存缓冲区,更改缓冲区的数据实现实时显示更新的内容
作者: wulin    时间: 2020-11-3 06:29
设num初值=2020即可。
  1. #include <reg51.h>
  2. #define seg_bit P2                                       
  3. #define seg_dat P3        
  4. #define uint unsigned int
  5. #define uchar unsigned char               

  6. uchar code numtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. uchar code bittab[]={0xfe,0xfd,0xfb,0xf7};
  8. uchar data disbuf[4];
  9. uchar t,i;
  10. uint num=2020;

  11. void delayms(uint xms)//延时程序
  12. {
  13.         uint i,j;
  14.         for(i=xms;i>0;i--)
  15.                 for(j=110;j>0;j--);
  16. }

  17. void main()
  18. {
  19.         TMOD=0X01;
  20.         TH0=(65536-50000)/256;
  21.         TL0=(65536-50000)%256;
  22.         EA=1;
  23.         ET0=1;
  24.         TR0=1;
  25.         while(1)
  26.         {
  27.                 disbuf[0]=numtab[num%10];
  28.                 disbuf[1]=numtab[num/10%10]|0x80;
  29.                 disbuf[2]=numtab[num/100%10];
  30.                 disbuf[3]=numtab[num/1000%10];
  31.                 seg_dat=0x00;
  32.                 seg_bit=bittab[i];
  33.                 seg_dat=disbuf[i];
  34.                 i++;
  35.                 i%=4;
  36.                 delayms(1);
  37.         }
  38. }

  39. void jishu() interrupt 1
  40. {
  41.         TH0=(65536-50000)/256;
  42.         TL0=(65536-50000)%256;
  43.         t++;
  44.         if(t==2)
  45.         {
  46.                 t=0;
  47.                 num++;
  48.                 if(num>9999)
  49.                         num=2020;
  50.         }
  51. }
复制代码

作者: HuTi123    时间: 2020-11-4 15:40
wulin 发表于 2020-11-3 06:29
设num初值=2020即可。

谢谢,已经实现并运行
作者: HuTi123    时间: 2020-11-4 15:40
csmyldl 发表于 2020-11-3 00:30
把要显示的内容存放在内存缓冲区,更改缓冲区的数据实现实时显示更新的内容

谢谢,加深了对单片机的理解




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