欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2957|回復: 7
打印 上一主題 下一主題
收起左側

單片機狀態機按鍵程序點燈哪里錯誤?

[復制鏈接]
跳轉到指定樓層
樓主
ID:72649 發表于 2019-2-1 06:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "stc15w408as.h"
#include"intrins.h"sbit key=P1^4;sbit led=P3^5;void Timer0Init(void);
void key_scan();
void Timer0Init(void)                //2??@11.0592MHz
{        TL0 = 0x9A;        
TH0 = 0xA9;      
TF0 = 0;   
TR0 = 1;
}
void key_scan()
{        static unsigned char state_cnt=0;        
switch(state_cnt)        
{                case 0x00: if(key==0)                 
{                        state_cnt=0x01;                       
break;                        }               
case 0x01: if(key==0)                     
{                        state_cnt=0x02;                        
led=~led;                     
break;                        }                        
else                     
{      state_cnt=0;                        break;      }               
case 0x02: if(key==1)                     
{                        state_cnt=0x00;                        break;                        }                default: break;        }}

void t0int() interrupt 1           //(location at 000BH)
{        static unsigned char cnt=0;        
AUXR |= 0x80;     
TMOD &= 0xF0;      
cnt++;        
if(cnt==5)        {   cnt=0;         key_scan();  }}

void main()        {  led=0;                led=1;                key=1;                Timer0Init();                while(1) ;        }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:94031 發表于 2019-2-1 15:51 | 只看該作者
應該把要求的功能說清楚。
回復

使用道具 舉報

板凳
ID:94031 發表于 2019-2-1 16:37 | 只看該作者
想用中斷,但沒開中斷。
回復

使用道具 舉報

地板
ID:213173 發表于 2019-2-1 17:14 | 只看該作者
初始化定時器和中斷的寫法如下,按鍵掃描程序錯誤明顯,但不知道你想達到什么目的,無法修改。
void Timer0Init()        //2毫秒@11.0592MHz
{
        AUXR |= 0x80;        //定時器時鐘1T模式
        TMOD &= 0xF0;        //設置定時器模式
        TL0 = 0x9A;                //設置定時初值
        TH0 = 0xA9;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
        EA=1;                        //開總中斷
        ET0=1;                        //開定時器0中斷       
}
void t0int() interrupt 1
{
        static unsigned char cnt=0;        
        cnt++;        
        if(cnt==5)
        {   
                cnt=0;
                key_scan();  
        }
}
回復

使用道具 舉報

5#
ID:72649 發表于 2019-2-1 19:07 | 只看該作者
按下key,點亮led燈。
回復

使用道具 舉報

6#
ID:155507 發表于 2019-2-2 06:20 | 只看該作者
給你改了,對比一下就知道哪里錯了。

  1. //單片機狀態機按鍵程序點燈哪里錯誤?

  2. #include "stc15w408as.h"
  3. #include"intrins.h"

  4. sbit key=P1^4;
  5. sbit led=P3^5;
  6. void Timer0Init(void);
  7. void key_scan();

  8. void Timer0Init(void)                //2毫秒@11.0592MHz
  9. {
  10.         AUXR |= 0x80;        //定時器時鐘1T模式
  11.         TMOD &= 0xF0;   //設置定時器模式
  12.         TMOD |= 0x00;        //定時器T0,工作方式0 16位自動重裝  <--------
  13.         TL0 = 0x9A;                //設置定時初值 // 65536-22118=43418
  14.         TH0 = 0xA9;                //設置定時初值
  15.         TF0 = 0;                //清除TF0標志
  16.         EA = 1;         //開 總中斷              <---------
  17.     ET0 = 1;        //開啟定時器T0中斷允許位  <--------
  18.         TR0 = 1;                //定時器0開始計時
  19. }


  20. void key_scan()
  21. {
  22.         static unsigned char state_cnt=0;        
  23.         switch(state_cnt)        
  24.         {
  25.         case 0x00: if(key==0)                 
  26.                 {
  27.                         state_cnt=0x01;                       
  28.                         break;
  29.                 }               
  30.         case 0x01: if(key==0)                     
  31.                 {
  32.                         state_cnt=0x02;                        
  33.                         led=~led;                     
  34.                         break;
  35.                 }                        
  36.                 else                     
  37.                 {
  38.                         state_cnt=0;
  39.                         break;
  40.                 }               
  41.         case 0x02: if(key==1)                     
  42.                 {
  43.                         state_cnt=0x00;
  44.                         break;
  45.                 }
  46.         default: break;
  47.         }
  48. }

  49. void t0int() interrupt 1           //(location at 000BH)
  50. {
  51.         static unsigned char cnt=0;        
  52.         cnt++;        
  53.         if(cnt==5)
  54.         {
  55.                 cnt=0;
  56.                 key_scan();  
  57.         }
  58. }

  59. void main()
  60. {
  61.         led=0;
  62.         led=1;
  63.         key=1;
  64.         Timer0Init();
  65.         while(1) ;
  66. }


復制代碼
回復

使用道具 舉報

7#
ID:72649 發表于 2019-2-2 07:47 | 只看該作者
就是key點亮led燈
回復

使用道具 舉報

8#
ID:47286 發表于 2019-2-2 10:47 | 只看該作者
case break 語句 break是寫在if里邊么 if條件不滿足的時候是怎么執行的 怎么看范例都不是這么寫呢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表