找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5070|回复: 2
收起左侧

单片机00—99秒表的设计报告与Proteus仿真

[复制链接]
ID:430253 发表于 2018-12-17 22:35 | 显示全部楼层 |阅读模式

秒表的设计


  •    大作业设计要求:

设计一个2位的LED数码显示的“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“开始”键和一个“复位”键。


  • 方案论证:

方案一:

直接用STC89C52芯片加上三个独立按键和两端共阳数码管设计

方案二:

在方案一的基础上加上74LS138动态扫描数码管,使数码管显示更为清晰,这里我们采用方案二进行仿真实验

  • 理论设计





  • 电路仿真及仿真结果分析:

本系统采用protues仿真,以STC89C52为中心,采用定时器计数原理结合电源电路,晶振电路和少量按键实现了秒表的暂停,开始,复位功能,显示从0到99。

  • 心得体会

实验中数码管选择错误导致乱码,重新选择后完成实验。

体会到最任何事都要仔细认真一丝不苟学无止境。

  • 参考文献

《单片机原理与应用  ——基于C51及Protues仿真》  徐爱钧 编著 清华大学出版社

《金沙滩视频教学文件》

  • 附录

实验程序及注释:

  1. #include<reg51.h>

  2. sbit ADDR0 = P1^0;
  3. sbit ADDR1 = P1^1;
  4. sbit ADDR2 = P1^2;
  5. sbit ADDR3 = P1^3;
  6. sbit ENLED = P1^4;

  7. sbit K4 = P2^7;              //设置开始键
  8. sbit K3 = P2^6;                                                        //设置暂停键
  9. sbit K2 = P2^5;                                                        //设置复位键

  10. unsigned char code LedChar[]={
  11.               0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  12.               0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
  13.               };                                                                                                                              //数码管显示字符转换表
  14. unsigned char LedBuff[2]={                                                      
  15.               0xFF, 0xFF
  16.               };                                                                                                                              //数码管显示缓冲区,初值0xFF确保启动时都不亮
  17. unsigned char i = 0;                                                                      //定义一个变量用于动态扫描
  18. unsigned int cnt = 0;                                                                      //记录T0中断次数
  19. unsigned char flag1s = 0;                                                        //1秒定时标志

  20. void main()
  21. {
  22.               unsigned char sec = 0;                                                        //记录经过的秒数
  23.             
  24.               ENLED = 0;                                                                                                  //选择控制数码管
  25.               ADDR3 = 1;                                                                                                
  26.               TMOD = 0x01;                                                                                    //设置T0为模式1
  27.               TH0 = 0xF8;                                                                                                  //给T0赋值0xF8CD,定时2ms
  28.               TL0 = 0xCD;
  29.               TR0 = 1;                                                                                                    //启动T0
  30.               EA = 1;                                                                                                                //使能总中断
  31.               ET0 = 1;                                                                                                  //使能T0中断
  32.               P2 = 0xF7;

  33.               while(1)
  34.               {            
  35.                             P0 = 0xFF;                                                                                                     //显示消隐
  36.                    switch(i)                                                                                                     //动态扫描数码管            
  37.                             {
  38.                                           case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0];break;
  39.                                           case 1: ADDR2=0; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[1];break;
  40.                                           default:break;
  41.                             }
  42.                             if(flag1s == 1)                                                                        //判断1秒定时标志
  43.                             {
  44.                                           flag1s = 0;                                                                      //1秒定时标志清零
  45.                                           sec++;                                                                                    //秒计数自加1
  46.                                           LedBuff[0] = LedChar[sec%10];                   //取个位数
  47.                                           LedBuff[1] = LedChar[sec/10%10];                //取十位数
  48.                             }
  49.                             if(K3 == 0) TR0 = 0;                                                          //按下K3,暂停计数
  50.                             if(K4 == 0) TR0 = 1;                                                          //按下K4,开始计数
  51.                             if(K2 == 0)              sec = 0;                                                          //按下K2,复位
  52.               }
  53. }

  54. /*定时器0中断服务函数*/
  55. void InterruptTime0() interrupt 1                           
  56. {
  57.               TH0 = 0xF8;                                                                                       //重新加载初值
  58.               TL0 = 0xCD;
  59.               cnt++;                                                                                                                   //中断次数计数值加1
  60.               if(cnt >= 500)                                                                                       //中断次数500次即1秒
  61.               {
  62.                             cnt = 0;                                                                                       //清零
  63.                             flag1s = 1;                                                                                       //设置为1秒
  64.               }
  65. }</b>
复制代码

0.png


全部资料51hei下载地址:

秒表的设计与仿真.zip (209.36 KB, 下载次数: 115)

评分

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

查看全部评分

回复

使用道具 举报

ID:993062 发表于 2021-12-16 10:48 | 显示全部楼层
请问里面有原理图吗?
回复

使用道具 举报

ID:992684 发表于 2021-12-16 13:44 | 显示全部楼层
谁能根据楼主的资料画个PCB吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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