欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機狀態機按鍵程序點燈哪里錯誤?
[打印本頁]
作者:
hjx5548
時間:
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) ; }
作者:
xuyaqi
時間:
2019-2-1 15:51
應該把要求的功能說清楚。
作者:
xuyaqi
時間:
2019-2-1 16:37
想用中斷,但沒開中斷。
作者:
wulin
時間:
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();
}
}
作者:
hjx5548
時間:
2019-2-1 19:07
按下key,點亮led燈。
作者:
angmall
時間:
2019-2-2 06:20
給你改了,對比一下就知道哪里錯了。
//單片機狀態機按鍵程序點燈哪里錯誤?
#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
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x00; //定時器T0,工作方式0 16位自動重裝 <--------
TL0 = 0x9A; //設置定時初值 // 65536-22118=43418
TH0 = 0xA9; //設置定時初值
TF0 = 0; //清除TF0標志
EA = 1; //開 總中斷 <---------
ET0 = 1; //開啟定時器T0中斷允許位 <--------
TR0 = 1; //定時器0開始計時
}
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;
cnt++;
if(cnt==5)
{
cnt=0;
key_scan();
}
}
void main()
{
led=0;
led=1;
key=1;
Timer0Init();
while(1) ;
}
復制代碼
作者:
hjx5548
時間:
2019-2-2 07:47
就是key點亮led燈
作者:
dzbj
時間:
2019-2-2 10:47
case break 語句 break是寫在if里邊么 if條件不滿足的時候是怎么執行的 怎么看范例都不是這么寫呢
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1