找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2570|回复: 0
收起左侧

单片机数字秒表代码与Proteus仿真

[复制链接]
ID:22266 发表于 2020-12-7 03:29 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define LED P0
  5. sbit  num0=P2^0;
  6. sbit  num1=P2^1;
  7. sbit  num2=P2^2;
  8. unsigned char key1_times;
  9. unsigned int zt,doc,n;
  10. sbit K1=P1^0;//用P1^0模拟串口数据
  11. uchar code dis_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //段码表0,1,2,3,4,5,6,7
  12. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//段码表8,9,a,b,c,d,e,f,灭(16),-(17)
  13. unsigned char SegBuf[3]={0};
  14. //*********************************
  15. //延时程序
  16. //*********************************
  17. void delayled(uchar N)
  18. {
  19.         uchar i,j;
  20.         for(i=0;i<N;i++)
  21.         for(j=0;j<125;j++);
  22. }
  23. //**********************************
  24. //显示转换
  25. //**********************************
  26. void convert(uint n)         
  27. {
  28.         SegBuf[0] =n%10;
  29.         SegBuf[1] =n/10%10;
  30.         SegBuf[2] =n/100%10;
  31. }
  32. //**********************************
  33. //显示程序
  34. //**********************************
  35. void display(void)
  36. {
  37.         LED=dis_code[SegBuf[0]];                 
  38.         num0=0;
  39.         delayled(3);
  40.         num0=1;
  41.        
  42.         LED=dis_code[SegBuf[1]]|0x80;                  
  43.         num1=0;
  44.         delayled(3);
  45.         num1=1;
  46.        
  47.         LED=dis_code[SegBuf[2]];          
  48.         num2=0;
  49.         delayled(3);
  50.         num2=1;
  51. }

  52. void Disp(uint n)
  53. {
  54.         convert(n);
  55.         display() ;
  56. }
  57. /*****延时程序**********/
  58. void delay(uchar ms)
  59. {
  60.         uchar i;
  61.         while(ms--)
  62.         {
  63.                 for (i=0;i<125;i++);
  64.         }
  65. }
  66. /***********************************/
  67. void main()
  68. {
  69.         TMOD = 0x01;  
  70.         TH0 = (65536-1000)/256;//定时器T0的初值
  71.         TL0 = (65536-1000)%256;
  72.         key1_times =2;//记录K1按键的次数。
  73.         IE = 0x8a;   
  74.         TR0 = 1;//先开T0,T1是关闭的
  75.         while(1)
  76.         {
  77.                 if(K1==0)
  78.                 {
  79.                         delay(5);
  80.                         if(K1==0)
  81.                         {
  82.                                 while(!K1);
  83.                                 key1_times++;
  84.                                 if(key1_times==3)key1_times=0;
  85.                         }
  86.                 }
  87.         }
  88. }

  89. void timer0() interrupt 1//显示程序,每隔定时的时间显示一位数值。
  90. {
  91.         TR0=0;
  92.         TH0 = (65536-1000)/256;
  93.         TL0 = (65536-1000)%256;   
  94.         Disp(doc);
  95.         if(key1_times==0)
  96.         {
  97.                 n++;
  98.                 if(n==20)//T1每两次中断计数值加1
  99.                 {
  100.                         doc++; n=0;                                       
  101.                 }
  102.         }
  103.         if(key1_times==1)        ;
  104.         if(key1_times==2)doc=0;
  105.         TR0=1;
  106. }
复制代码

所有资料51hei提供下载:
数字秒表.7z (19.41 KB, 下载次数: 22)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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