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

QQ登錄

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

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

我怎么仿真不出來(lái),大家來(lái)看看

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
#include<reg52.h>               //52 系列單片機(jī)頭文件
#define uchar unsignedchar        //宏定義
#define uint unsigned int
sbit key1=P3^4;                //申明四個(gè)按鍵的鎖存端
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uchar code table[]={            //含有 0~9 的數(shù)字?jǐn)?shù)組
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7c,0x07,
0x7f,0x67};
uchar code table2[]={            //含有 0~9 的數(shù)字?jǐn)?shù)組(帶小數(shù)點(diǎn))
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfc,0x87,
0xff,0xe7};
void delayms(uint);                //聲明延時(shí)函數(shù)
voiddisplay(uchar,uchar,uchar);      //聲明顯示函數(shù)
void keyscan();                   //聲明按鍵函數(shù)
ucharnum1,num2,bai,shi,ge;     //變量聲明
uint num;
void main()                       //主函數(shù)入口
{
TMOD=0x11;                  //設(shè)置 TO,T1 定時(shí)器
TH0=(65536-45872)/256;    //裝初值11.05992M晶振50ms數(shù)為45872
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;                       //開(kāi)總中斷
ET0=1;                      //開(kāi)啟定時(shí)器 T0 中斷
ET1=1;                     //開(kāi)啟定時(shí)器 T1 中斷
while(1) //程序停在這里等待中斷的發(fā)生,這個(gè)大循環(huán)也是實(shí)現(xiàn)數(shù)據(jù)顯示的主體
{
  keyscan();                  //三個(gè)數(shù)碼管要選送的數(shù)據(jù)
  bai=num/100;               //百位
  shi=(num-100*bai)/10;        //十位
  ge=num-100*bai-shi*10;      //個(gè)位
  display(bai,shi,ge);           //數(shù)碼管顯示
}
}
void display(uchar bai,uchar shi,uchar ge)
    {
       P1=0xfe;        //位選選中第一個(gè)數(shù)碼管
       P2=table[bai];    //送段選數(shù)據(jù)
       delayms(10);     //延時(shí)
       P1=0xff;         //關(guān)閉位選
P1=0xfd;        //位選選中第二個(gè)數(shù)碼管
       P2=table2[shi];   //送段選數(shù)據(jù)
       delayms(10);  //延時(shí)
P1=0xff;     //關(guān)閉位選
       P1=0xfb;     //位選選中第二個(gè)數(shù)碼管
       P2=table[ge];  //送段選數(shù)據(jù)
       delayms(10);    //延時(shí)
P1=0xff;      //關(guān)閉位選
}
void delayms(uintxms)   //延時(shí)子函數(shù)
   {
       uint i,j; for(i=xms;i>0;i--)         //i=xms 即延時(shí)約 xms 毫秒
       for(j=110;j>0;j--);
   }
void keyscan()
{
   if(key1==0)                   //清零
     {
       delayms(10);             //延時(shí)去抖
       if(key1==0)
         { while(!key1)             //等待按下
           {
              TR0=0;               //定時(shí)器 TR0 關(guān)閉
              TR1=1;               //定時(shí)器 TR1 打開(kāi)
              num=0;               //送數(shù)據(jù) num=0
              TR1=0;               //定時(shí)器 TR1 關(guān)閉
            }
          }
      }
    if(key2==0)                   //暫停和開(kāi)始
      {
        delayms(10);
        if(key2==0)
          {
            while(!key2);
            TR0=0;
            TR1=~TR1;            //每次按下,TR1 的狀態(tài)時(shí)相反的
          }
       }
     if(key3==0)                   //使計(jì)數(shù)器顯示為 60.0
       {
          while(!key3);
          TR0=0;
          TR1=1;
          num=999;
          TR1=0;
        }
      if(key4==0)                      //實(shí)現(xiàn)計(jì)數(shù)器的倒數(shù)功能
        {
          while(!key4);
          TR1=0;
          TR0=~TR0;//TR0=1;
         }
}
void T0_time()interrupt 1                                                  //定時(shí)器 T0,中斷序號(hào)為 1
{TH0=(65536-45872)/256;       //重裝初值
    TL0=(65536-45872)%256;
    num2++;
    if(num2==2)                 //如果到了2次,說(shuō)明0.1秒的時(shí)間到
      {  num2=0;                 //然后把num2清零重新再計(jì)2次
        num1++;
      }
    if(num1==10)
num1=0;
    if(num==0)     //當(dāng) num 自減為0時(shí),重新為 60.0,再開(kāi)始倒計(jì)時(shí)
      num=999;        //num 逐漸自減
        num--;
}
void T1_time()interrupt 3
{   TH1=(65536-45872)/256;    //重裝初值
    TL1=(65536-45872)%256;
    num2++;
    if(num2==2)                //如果到了 2 次,說(shuō)明 0.1 秒的時(shí)間到
      {  num2=0;                //然后把 num2 清零重新再計(jì) 2 次
         num1++;
         if(num1==10)
num1=0;
           num++;               //num 逐漸自加  
         if(num==999)                                                                          
num=0;//這個(gè)數(shù)十用來(lái)送給數(shù)碼管顯示的,到了60.0后歸零
      }
}


秒表.png (29.28 KB, 下載次數(shù): 30)

照?qǐng)D仿真做不出來(lái)!

照?qǐng)D仿真做不出來(lái)!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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