找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2935|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)+PC機(jī)控制的秒表倒計(jì)時(shí)Proteus仿真代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
PC機(jī)通過(guò)串口以字符方式向單片機(jī)發(fā)送一二位十進(jìn)制數(shù)值(仿真時(shí)串口發(fā)送器的顯示設(shè)置為Echo Typed),波特率為9600,單片機(jī)收到后將其顯示到數(shù)碼管上,當(dāng)P3.2引腳按鍵按下時(shí)開(kāi)始做秒表倒計(jì)時(shí)(這里使用的是定時(shí)器),數(shù)值減到0停止,P3.5端口的LED燈閃爍三下。這里附上程序和仿真圖,有需要的可以下載。

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


單片機(jī)源程序如下:
  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. }
復(fù)制代碼

所有資料51hei提供下載:
PC機(jī)控制的倒計(jì)時(shí)秒表發(fā)揮部分.zip (101.58 KB, 下載次數(shù): 28)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表