找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2586|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机+PC机控制的秒表倒计时Proteus仿真代码

[复制链接]
跳转到指定楼层
楼主
PC机通过串口以字符方式向单片机发送一二位十进制数值(仿真时串口发送器的显示设置为Echo Typed),波特率为9600,单片机收到后将其显示到数码管上,当P3.2引脚按键按下时开始做秒表倒计时(这里使用的是定时器),数值减到0停止,P3.5端口的LED灯闪烁三下。这里附上程序和仿真图,有需要的可以下载。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg52.h>
  2. sbit key = P3^2;
  3. sbit led = P3^5;
  4. typedef unsigned char uchar;
  5. typedef unsigned int uint;

  6. uchar smg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
  7. uchar time,s=0,over = 0;
  8. char m = 0;
  9. uchar num[2];



  10. void delay(uint x)
  11. {
  12.         uchar y;
  13.         for(x;x>0;x--)
  14.                 for(y=110;y>0;y--);       
  15. }


  16. void time_uart_init()
  17. {
  18.         TMOD = 0x21;
  19.         SCON = 0x50;
  20.         TH0=0XFC;
  21.         TL0=0X18;       
  22.         TH1 = 0xfd;
  23.         TL1 = 0xfd;       
  24.         ET0=1;
  25.         EA=1;
  26.         TR0=1;       
  27.         TR1 = 1;
  28.         ES = 1;
  29.        
  30. }

  31. void smg_some()
  32. {
  33.         char num_[2];
  34.         char i;
  35.         num_[0] = time/10;
  36.         num_[1] = time%10;                       
  37.         for(i=6;i<8;i++)
  38.         {
  39.                 P1=(0x01<<i);
  40.                 P0=~smg[num_[i-6]];
  41.                 delay(1);
  42.                 P0=0xff;
  43.                 delay(1);
  44.         }
  45. }


  46. void main()
  47. {
  48.         uchar j = 0;
  49.         time_uart_init();
  50.         while(1)
  51.         {       
  52.                 smg_some();
  53.                 if(key == 0)
  54.                 {
  55.                         m = 1;
  56.                         while(!key);
  57.                 }
  58.                 if(over)
  59.                 {
  60.                         for(j = 0;j<6;j++)
  61.                         {
  62.                                    led = ~led;
  63.                                 delay(1500);
  64.                         }
  65.                         over = 0;
  66.                 }
  67.         }
  68. }


  69. void Timer0() interrupt 1
  70. {
  71.         static uint i;
  72.         TH0=0XFC;
  73.         TL0=0X18;
  74.         i++;
  75.         if(i==1000)
  76.         {
  77.                 if(m)
  78.                 {
  79.                         time--;
  80.                         if(time<=0)
  81.                         {
  82.                            time = 0;
  83.                            over = 1;
  84.                            m = 0;
  85.                         }
  86.                 }       
  87.                 i = 0;       
  88.         }       
  89. }

  90. void serve() interrupt 4
  91. {
  92.         uchar temp;
  93.         if(RI)
  94.         {
  95.                 RI = 0;
  96.                 temp = SBUF-0x30;
  97.                 num[1]=num[0];
  98.                 num[0]=temp;       
  99.                 time=num[1]*10+num[0];                                       
  100.         }

  101. }
复制代码

所有资料51hei提供下载:
PC机控制的倒计时秒表发挥部分.zip (101.58 KB, 下载次数: 28)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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