找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3016|回复: 1
收起左侧

一个简单的秒表单片机程序+proteus仿真工程

[复制链接]
ID:211391 发表于 2017-6-15 08:36 | 显示全部楼层 |阅读模式
这周实训弄得一个简单的秒表
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. #include <reg51.H>  
  2. sbit sta_end=P0^0;
  3. sbit reset=P3^7;   
  4. unsigned char code table0[]={       
  5.                                         0x3F,/*0*/
  6.                                 0x06,/*1*/
  7.                                 0x5B,/*2*/
  8.                                 0x4F,/*3*/
  9.                                 0x66,/*4*/
  10.                                 0x6D,/*5*/
  11.                                 0x7D,/*6*/
  12.                                 0x07,/*7*/
  13.                                 0x7F,/*8*/
  14.                                 0x6F,/*9*/
  15.                                         };   
  16. unsigned char code table1[]={       
  17.                                         0x3F,/*0*/
  18.                                 0x06,/*1*/
  19.                                 0x5B,/*2*/
  20.                                 0x4F,/*3*/
  21.                                 0x66,/*4*/
  22.                                 0x6D,/*5*/
  23.                                 0x7D,/*6*/
  24.                                 0x07,/*7*/
  25.                                 0x7F,/*8*/
  26.                                 0x6F,/*9*/
  27.                                         };
  28. /*声明second10用于计数十分之一秒变化,second1用于记录秒的个*/       /*位,second2用于记录秒的十位*/  
  29. unsigned int second10,second1,second2;
  30. bit bdata flag;   /*以下是设置延时功能的函数*/
  31. void delay()                     
  32. {   
  33. unsigned char i,j;   
  34. for(i=90;i>0;i--)   
  35. for(j=200;j>0;j--);  
  36. }      
  37. /*以下是设置时间的函数*/
  38. void  setTime()   
  39. {                  
  40. second10++;   
  41. if(second10==10)             /*当十分之一秒计数到十后从零重新计时*/   
  42. {   
  43.   second10=0;                /*同时秒计时个位加一*/   
  44.   second1++;                 
  45.   if(second1==10)             /*当秒计数个位到十后从零重新计时*/   
  46. {
  47.   second1=0;   
  48.   second2++;               /*同时秒计时十位加一*/   
  49.   if(second2==10)     
  50.   second2=0;  
  51. }   
  52. }
  53. }   
  54. /*以下是向LED管输数据并使之显示的函数*/  
  55. void dispact()                                       
  56. {   
  57.    P3=0xfe;                        
  58.    P1=table1[second1];        
  59.    delay();   
  60.    P3=0xfd;   
  61.    P1=table1[second2];
  62.    delay();   
  63.    P2=table0[second10];
  64. }
  65. /*十分之一秒刷新一次,实现十分之一秒进一*/  
  66. Timer0 ()  interrupt 1 using 1
  67. {   
  68.   TH0 = (65535 - 50000)/256;   
  69.   TL0 = (65535 - 50000)%256;   
  70.   if(flag)     
  71.      setTime();   
  72.   dispact();
  73. }   
  74. void main(void)                     
  75. {   
  76.   TMOD = 0x01;
  77.   TH0 = (65535 - 50000)/256;         /*定时器赋初值*/   
  78.   TL0 = (65535 - 50000)%256;   
  79.   flag = 0;
  80.   EA = 1;                     /*cpu开中断*/   
  81.   TR0 = 1;                           /*利用定时器0*/   
  82.   ET0 = 1;                           /*外部中断允许*/   
  83.   do   
  84.   {      
  85.      if(!sta_end)  
  86.   {      
  87.      if(flag == 0)      
  88. ……………………

  89. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
新建文件夹.rar (17.34 KB, 下载次数: 12)

评分

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

查看全部评分

回复

使用道具 举报

ID:211391 发表于 2017-6-15 08:45 | 显示全部楼层
一个0到99的秒表,可暂停和复位
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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