標題: 如何添加按鍵使單片機程序通過按鍵啟動? [打印本頁]

作者: 1102285881    時間: 2023-6-20 20:04
標題: 如何添加按鍵使單片機程序通過按鍵啟動?
現(xiàn)在是接通電源后,流水燈直接亮,那如何修改讓它接通電源后,按下按鍵P2.0后流水燈開始運行
/**********************************************************
霓虹燈模擬控制主程序
**********************************************************/
       #include<AT89X52.h>
unsigned char i10,i8,i6;
unsigned charmod1,mod2;
void main(void)
{
   i10=10;          //設(shè)置軟件計數(shù)10次,每次100ms
   i8=8;            //設(shè)置循環(huán)點亮階段輸出次數(shù)
i6=6;            //設(shè)置間隔閃爍階段輸出次數(shù)
mod1=0x01;      //設(shè)置循環(huán)點亮階段控制碼初值
mod2=0xAA;     //設(shè)置間隔閃爍階段控制碼初值
F0=0;           //設(shè)置循環(huán)點亮階段標志,F(xiàn)0=0為循環(huán)點亮階段
TMOD=0x10;     //設(shè)置T1方式1定時
TH1=0x3C;        //送100ms定時初值
TL1=0xB0;
IE=0x88;           //允許T1中斷
P1_0=1           //
TR1=1;         //啟動T1定時
while(1);          //等待中斷
}

/**********************************************************
T1中斷服務(wù)程序
**********************************************************/
void timer0(void)  interrupt 3 using 1
{
  TH1=0x3C;        //100ms時間到,重裝定時初值
TL1=0xB0;
  i10--;
  if(i10==0)
  {
i10=10;           //1s到重設(shè)軟件計數(shù)器
  if(F0==0)
  {
   P1=~mod1;        //循環(huán)點亮階段控制碼取反送P1口
   mod1= mod1<<1;   //mod1值左移一位
   i8--;
   if(i8==0)
{
i8=8;            //完成重設(shè)循環(huán)點亮階段輸出次數(shù)
F0=1;           //設(shè)置間隔閃爍階段標志
          }
}
else
{
   P1=mod2;         //輸出間隔閃爍階段控制碼
   Mod2=~mod2;     //控制碼取反
   i6--;
   if(i6==0)
   {
i6=6;           //完成重設(shè)間隔閃爍階段輸出次數(shù)
F0=0;          //設(shè)置循環(huán)點亮階段標志
}
}
}
}





作者: lkc8210    時間: 2023-6-21 11:06


作者: wulin    時間: 2023-6-21 11:32
如果只是簡單的做一次性啟動可以加一句while(P2_0);,如果想一鍵開關(guān)機就要用掉電喚醒模式。
void main(void)
{
        i10=10;          //設(shè)置軟件計數(shù)10次,每次100ms
        i8=8;            //設(shè)置循環(huán)點亮階段輸出次數(shù)
        i6=6;            //設(shè)置間隔閃爍階段輸出次數(shù)
        mod1=0x01;      //設(shè)置循環(huán)點亮階段控制碼初值
        mod2=0xAA;     //設(shè)置間隔閃爍階段控制碼初值
        F0=0;           //設(shè)置循環(huán)點亮階段標志,F(xiàn)0=0為循環(huán)點亮階段
        TMOD=0x10;     //設(shè)置T1方式1定時
        TH1=0x3C;        //送100ms定時初值
        TL1=0xB0;
        IE=0x88;           //允許T1中斷
        P1_0=1           //
        while(P2_0);
        TR1=1;         //啟動T1定時
        while(1);          //等待中斷
}
作者: 2728999742    時間: 2023-6-21 11:57
首先在程序的開頭加入一句定義,sfr SAP = 0xe7;
SAP 是名稱,可以隨意改寫
之后在外部中斷或程序內(nèi)添加一個按鍵檢測的語句
作者: fegfds    時間: 2023-6-21 16:05
1、創(chuàng)建項目文件。
2、按鍵:S1=P3^2,點亮: led=P1^5。
3、創(chuàng)建C語言主函
5、選擇輸出的效果。
6、當(dāng)按下一個按鍵時,關(guān)閉燈,整個程序運行,再按一次,程序停止。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1