欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
超聲波模塊跟GSM模塊沖突了,怎么改單片機程序?
[打印本頁]
作者:
2248373991
時間:
2022-5-3 18:50
標題:
超聲波模塊跟GSM模塊沖突了,怎么改單片機程序?
先謝謝大家
void Init_Timer()
{
PCON=0x00;
SCON=0x50;
TMOD=0x21;
TL0 =0x00;
TH0 =0x4C;
TL1 =0xfd;
TH1 =0xfd;
TR0 =1;
TR1 =1;
ET0 =1;
ES =1;
EA =1;
}
void inter() interrupt 4
{
date = SBUF;
if(RI)
RI = 0;
}
//外部中斷0
void initex()
{
TMOD=0x09; //定時器T0工作方式1 GATE0=1
IT0=1; //設置為下降沿中斷方式
EX0=1; //開外部中斷
}
void int0() interrupt 0
{
t=(TH0*256+TL0);//計算高電平持續的時間,上升沿到來時候開始計時,下降沿到來進入外部中斷,關閉計時器,停止計時
TH0=0;
TL0=0;
}
/*主函數*/
uchar global_state = 0;
uchar count_num = 0; //輸入的數字個數
void main()
{
uchar i;
uchar passwd;
uchar key_value = 0;
uchar temp_key_value = 0xff;
Lock = 1; //剛上電 鎖是需要保持閉合
Init_Timer();
initex();
lcd_init(); //LCD1602初始化
while(1) //進入不斷循環
{
temp_key_value = Calkey_scan(); //讀取矩陣按鍵的鍵值
if(temp_key_value != 0xff)
{
key_value = temp_key_value;
}
switch(global_state)
{
case 0: //初始化狀態
display1(); //顯示歡迎語句 -- "welcome"
zyx = 1; //紫外線
zm = 0;
display5(); //顯示Current T=
Read_Temperature(); //讀取溫度值
display7(); //顯示溫度
Alarm(); //報警
wenk(); //溫控
HC05_Init(); //超聲波
if(SetKey==0) //設置鍵
{
clear(); //清屏
global_state = 3; //切換運行狀態
}
if(key_value == 13) //存餐按鍵被按下
{
key_value = 0xff; //將按鍵值清除
if(distance>300)
{
TMOD=0x21;
global_state = 4;
}
else
{
clear(); //清屏,準備下一屏的顯示
display10();
delay(1000);
clear(); //清屏,準備下一屏的顯示
global_state = 0; //返回到初始界面
}
}
if(key_value == 14) //取餐按鍵被按下
{
key_value = 0xff; //將按鍵值清除
clear(); //清屏,準備下一屏的顯示
global_state = 2; //切換運行狀態
count_num = 0; //清除數字按鍵變量
for(i = 0;i < 4;i++) //清空輸入的密碼數組
inpPasswd[i] = ' '-0x30;
}
break;
case 1: //密碼生成狀態
display2(); //顯示密碼生成界面
GSM_PDU();
GSM_PDU_SMS();
global_state = 0; //返回到初始界面
clear(); //清屏,準備下一屏的顯示
break;
case 2: //輸入密碼狀態
display4(); //顯示輸入密碼界面
if((key_value >= 0) && (key_value <= 9)) //如果按下的為0-9的數字按鍵
{
if(count_num <= 3) //如果按鍵次數小于4次
{
inpPasswd[count_num] = key_value; //將按鍵值存入數組,并顯示
count_num++;
}
key_value = 0xff; //將按鍵值清除
}
if(key_value == 15) //清除按鍵被按下
{
key_value = 0xff; //將按鍵值清除
for(i = 0;i < 4;i++)
inpPasswd[i] = ' '-0x30; //清除剛剛輸入的密碼
count_num=0;
}
if(key_value == 16) //確認按鍵被按下
{
key_value = 0xff; //將按鍵值清除
for(i = 0;i < 4;i++)
{
if(inpPasswd[i] != genPasswd[i])
break;
}
if(i == 4) //密碼輸入正確
{
Lock = 0; //開鎖
zm = 1; //照明
zyx = 0;
clear(); //清屏,準備下一屏的顯示
display3(); //顯示關門提示語 -- "close door!"
delay(1900); //等待關門 大約3秒
clear(); //清屏,準備下一屏的顯示
Lock = 1; //關鎖
zyx = 1; //紫外線
zm = 0;
}
else //密碼輸入錯誤 報警
{
clear(); //清屏,準備下一屏的顯示
Lock = 1; //關鎖
BEEP=0;
display9();
delay(1000);
BEEP=1;
display9();
}
clear(); //清屏,準備下一屏的顯示
global_state = 0; //返回到初始界面
}
break;
case 3:
display5(); //顯示Current T=
display6(); //顯示上下限
Read_Temperature(); //讀取溫度值
display7(); //顯示溫度
display8(); //顯示上下限溫度
SetFun(); //指針>
Alarm();
wenk();
if(key_value == 16) //確認按鍵被按下
{
key_value = 0xff; //將按鍵值清除
clear(); //清屏,準備下一屏的顯示
global_state = 0; //返回到初始界面
}
break;
case 4:
Lock = 0; //開鎖
zm = 1;
zyx = 0;
clear(); //清屏,準備下一屏的顯示
display3(); //顯示關門提示語 -- "close door!"
delay(1900); //等待關門 大約3秒
clear(); //清屏,準備下一屏的顯示
Lock = 1; //關鎖
zyx = 1; //紫外線
zm = 0;
clear(); //清屏,準備下一屏的顯示
global_state = 1; //切換運行狀態
passwd = TL0; //采用定時器寄存器的值作為密碼
genPasswd[0] = passwd/100; //存儲密碼
genPasswd[1] = passwd%100/10;
genPasswd[2] = passwd%10;
genPasswd[3] = (genPasswd[1]+genPasswd[2])%10;
break;
}
}
}
復制代碼
作者:
188610329
時間:
2022-5-3 22:04
方法1:
//外部中斷0
void initex()
{
TMOD |=0x09;
//定時器T0工作方式1 GATE0=1
IT0=1; //設置為下降沿中斷方式
EX0=1; //開外部中斷
}
方法2:
void Init_Timer()
{
PCON=0x00;
SCON=0x50;
TMOD=0x29;
TL0 =0x00;
TH0 =0x4C;
TL1 =0xfd;
TH1 =0xfd;
TR0 =1;
TR1 =1;
ET0 =1;
ES =1;
EA =1;
}
//外部中斷0
void initex()
{
// TMOD=0x09;
//定時器T0工作方式1 GATE0=1
IT0=1; //設置為下降沿中斷方式
EX0=1; //開外部中斷
}
作者:
lkc8210
時間:
2022-5-3 23:00
有啥沖突?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1