找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

程序?qū)慿eil里面沒有報(bào)錯(cuò),生成hex文件就放在proteus里面,就是仿真不出來怎么辦?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì)內(nèi)容:1、3個(gè)獨(dú)立按鍵分別控制“自然風(fēng)”、“睡眠風(fēng)”、“常風(fēng)”,(三者的區(qū)別是直流電機(jī)的停歇時(shí)間不同),并在數(shù)顯管上顯示出區(qū)別
   2、每種類型風(fēng)可以根據(jù)按下獨(dú)立按鍵次數(shù)分為4個(gè)檔的風(fēng)力調(diào)節(jié)。
    3、設(shè)計(jì)風(fēng)扇的過熱保護(hù),用繼電器實(shí)現(xiàn)。即當(dāng)風(fēng)扇運(yùn)行一段時(shí)間后,暫停10秒。
   4、其他創(chuàng)新內(nèi)容(如報(bào)警提示
程序如下:#include<reg51.h>  //頭文件
sbit K1=P1^0;                //定義按鍵 開關(guān)
sbit K2=P1^1;                //正常風(fēng)
sbit K3=P1^2;                //自然風(fēng)
sbit K4=P1^3;                //睡眠風(fēng)
sbit mada=P2^0;                         //馬達(dá)驅(qū)動(dòng)
sbit jdq=P2^1;                         //繼電器驅(qū)動(dòng)
int PWM=40;                                 //PWM寄存器
int dang=1;                                 //檔位寄存器
int i,j;   //輸出PWM是的變量
int moshi=0;        //模式標(biāo)志
int time;        //睡眠和自然風(fēng)開關(guān)間隙時(shí)間,定時(shí)寄存器
int time1;        //定時(shí)工作1分鐘休息10秒鐘,定時(shí)寄存器
int daima=0;        //數(shù)碼管顯示位選選擇
sbit p1=P2^4;         //數(shù)碼管位選
sbit p2=P2^5;
sbit p3=P2^6;
sbit p4=P2^7;
char data_7seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x86};           //數(shù)碼管段碼
void xianshi()                                                //顯示子程序
{  switch(daima)
  {case 0:
   p1=0;p2=0;p3=0;p4=0;                                //位選關(guān)
   P0=data_7seg[moshi];                        //發(fā)送第一位數(shù)碼管顯示代碼
   p1=1;p2=0;p3=0;p4=0;                                //第一個(gè)位選開
   daima=1;                                                //顯示延遲
   break;
   case 1:
   p1=0;p2=0;p3=0;p4=0;                                //位選關(guān)
   P0=data_7seg[10];                        //發(fā)送第二位數(shù)碼管顯示代碼
   p1=0;p2=1;p3=0;p4=0;                                //第二個(gè)位選開
   daima=2;                                                //顯示延遲
   break;
   case 2:
   p1=0;p2=0;p3=0;p4=0;                            //位選關(guān)
   P0=data_7seg[10];                        //發(fā)送第三位數(shù)碼管顯示代碼
   p1=0;p2=0;p3=1;p4=0;                                //第三個(gè)位選開
   if(moshi==0)
   daima=0;                                                //顯示延遲
   else
   daima=3;
   break;
   case 3:
   p1=0;p2=0;p3=0;p4=0;                                //位選關(guān)
   P0=data_7seg[dang];                        //發(fā)送第四位數(shù)碼管顯示代碼
   p1=0;p2=0;p3=0;p4=1;                                //第四個(gè)位選開
   daima=0;                                                //顯示延遲
   break;
}
}
void key()                                           //按鍵掃描
{        if(K1==0)           //檔位切換
    { dang++;                          //循環(huán)
          if(dang>4)
          dang=1;
          switch(dang)                        //根據(jù)檔位控制PWM占空比
          {         case 1: PWM=40; break;
                   case 2: PWM=60; break;
                 case 3: PWM=80; break;
                 case 4: PWM=100; break;
          }
        }
        while(K1==0);
        if(K2==0)           //正常模式按鍵
    {
         moshi=1;           //正常模式
        }
        while(K2==0);
    if(K3==0)           //自然風(fēng)模式按鍵
    {
        moshi=2;           //自然風(fēng)模式
        }
        while(K3==0);
        if(K4==0)           //睡眠模式按鍵
    {
        moshi=3;           //睡眠模式
        }
        while(K4==0);
}
void main()                        //主程序
{         
    mada=0;                         //初始化端口
        i=100;
        jdq=0;
        TMOD=0X12;                        //定義中斷和開啟中斷                                                                                                               
        TH0=256-100;
        TL0=256-100;
        ET0=1;TR0=1;
        EA=1;
        TH1 = 0x3C;
    TL1 = 0x0B0;
    ET1 = 1;
    TR1 = 1;
        while(1)           //無限循環(huán)
        {  key();           //按鍵掃描
           if(moshi==0)          //模式=0,待機(jī)
           {i=0;jdq=1;time1=0; }
           else
           if(moshi==1)                //模式=1,正常
           i=PWM;                        //正常輸出
           else
           if(moshi==2)                 //模式=2,自然風(fēng)
           {  if(time<200) //開10秒,關(guān)5秒
              i=PWM;
                  else
                  i=0;
           }
           else
           if(moshi==3)           //模式=3,睡眠風(fēng)
           {  if(time<100) //開5秒,關(guān)10秒
              i=PWM;
                  else
                  i=0;
           }
      
        }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
void Timer0Interrupt(void) interrupt  0     //定時(shí)器中斷,輸出PWM,占空比
{       
        if(j>100)
        j=0;
        if(j<i)
        {
        mada=1;
        }
        else
       
        {
    mada=0;
        }       
         xianshi();
}
void Timer1Interrupt(void) interrupt 3                          //定時(shí)器中斷0,計(jì)時(shí)
{
    TH1 = 0x3C;
    TL1 = 0x0B0;
    if(moshi>1)
        time++;
        else
        time=0;
       
         
        time1++;
        if(time1>=1400)
    time1=0;
        if(time1>=1200)
        jdq=1;
        else
        if(moshi>0)
        jdq=0;
        if(time>=300)  time=0;
}

ok.PNG (100.46 KB, 下載次數(shù): 71)

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

使用道具 舉報(bào)

沙發(fā)
ID:762484 發(fā)表于 2020-5-27 15:08 | 只看該作者
那個(gè)數(shù)碼管的燈不亮,但是按鈕燈是亮的。求大佬解答
回復(fù)

使用道具 舉報(bào)

板凳
ID:523886 發(fā)表于 2020-5-27 16:09 | 只看該作者
keil不報(bào)錯(cuò)只是語法沒錯(cuò),程序定義的變量盡量別亂定義名字,比如用拼音什么的會(huì)讓人看不懂,建議先完成pwm驅(qū)動(dòng)然后再完成按鍵一步步來
回復(fù)

使用道具 舉報(bào)

地板
ID:762615 發(fā)表于 2020-5-27 16:12 | 只看該作者
厲害,謝謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:762484 發(fā)表于 2020-5-27 16:48 | 只看該作者
就是那個(gè)數(shù)碼管不顯示也不亮
回復(fù)

使用道具 舉報(bào)

6#
ID:277550 發(fā)表于 2020-5-27 16:58 | 只看該作者
建議  用一些led來顯示不同的狀態(tài)
回復(fù)

使用道具 舉報(bào)

7#
ID:342822 發(fā)表于 2020-5-27 18:27 | 只看該作者
lun203  9腳接+5v
p2.0繼電器    p2.1驅(qū)動(dòng)
繼電器不能仿真  換一個(gè)能仿真的
錯(cuò)誤不少慢慢查找吧
回復(fù)

使用道具 舉報(bào)

8#
ID:759918 發(fā)表于 2020-5-27 18:32 | 只看該作者
是程序錯(cuò)誤還是軟件問題?VCC屬性設(shè)置了嗎
回復(fù)

使用道具 舉報(bào)

9#
ID:762484 發(fā)表于 2020-5-27 19:43 | 只看該作者
g2363451687 發(fā)表于 2020-5-27 16:09
keil不報(bào)錯(cuò)只是語法沒錯(cuò),程序定義的變量盡量別亂定義名字,比如用拼音什么的會(huì)讓人看不懂,建議先完成pwm ...

嗯嗯,我是小白,還搞不太明白就用拼音了
回復(fù)

使用道具 舉報(bào)

10#
ID:762484 發(fā)表于 2020-5-27 20:00 | 只看該作者
g2363451687 發(fā)表于 2020-5-27 16:09
keil不報(bào)錯(cuò)只是語法沒錯(cuò),程序定義的變量盡量別亂定義名字,比如用拼音什么的會(huì)讓人看不懂,建議先完成pwm ...

哥你能不能幫我改改啊,這個(gè)pwm驅(qū)動(dòng)我咋一直搞不好呢
回復(fù)

使用道具 舉報(bào)

11#
ID:762484 發(fā)表于 2020-5-27 20:01 | 只看該作者
devcang 發(fā)表于 2020-5-27 16:58
建議  用一些led來顯示不同的狀態(tài)

哥 您能不能幫我改改啊,我卡到這里好幾天了,謝謝大佬
回復(fù)

使用道具 舉報(bào)

12#
ID:762484 發(fā)表于 2020-5-27 21:15 | 只看該作者
gianthunter 發(fā)表于 2020-5-27 18:32
是程序錯(cuò)誤還是軟件問題?VCC屬性設(shè)置了嗎

程序?qū)χ,沒有報(bào)錯(cuò),圖用別的hex文件也有反應(yīng),就是一起用這個(gè)自己寫的沒反應(yīng)
回復(fù)

使用道具 舉報(bào)

13#
ID:762484 發(fā)表于 2020-5-27 21:16 | 只看該作者
農(nóng)夫山泉不甜 發(fā)表于 2020-5-27 16:48
就是那個(gè)數(shù)碼管不顯示也不亮

對的,所以現(xiàn)在很煩,也不知道錯(cuò)誤在哪兒?所以來這兒找一下大佬求助一下,
回復(fù)

使用道具 舉報(bào)

14#
ID:762484 發(fā)表于 2020-5-27 21:18 | 只看該作者
taotie 發(fā)表于 2020-5-27 18:27
lun203  9腳接+5v
p2.0繼電器    p2.1驅(qū)動(dòng)
繼電器不能仿真  換一個(gè)能仿真的

這個(gè)圖錯(cuò)了很多嗎?哦哦哦,謝謝。哥你能給點(diǎn)建議嗎?還是不太會(huì)啊
回復(fù)

使用道具 舉報(bào)

15#
ID:762892 發(fā)表于 2020-5-27 21:21 | 只看該作者
直接看懵了
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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