標題: STC8單片機一個IO檢測兩個按鍵+LED 源程序 [打印本頁]

作者: jaco_li    時間: 2022-3-29 15:30
標題: STC8單片機一個IO檢測兩個按鍵+LED 源程序
  1. #include<all.h>
  2. sbit LED=P1^0;
  3. sbit k=P1^1;
  4. bit led1=0,led2=0;
  5. u8 value=0;
  6. void GPIO_Init()
  7. {
  8.                 P7M0=0X00;
  9.                 P7M1=0X00;
  10.                 P6M0=0X00;
  11.                 P6M1=0X00;
  12.                 P5M0=0x00;
  13.                 P5M1=0X00;
  14.                 P4M0=0X00;
  15.                 P4M1=0X00;
  16.                 P3M0=0X00;
  17.                 P3M1=0X00;
  18.                 P2M0=0x00;
  19.                 P2M1=0X00;
  20.                 P1M0=0X00;
  21.                 P1M1=0X00;
  22.                 P0M0=0X00;
  23.                 P0M1=0X00;
  24. }
  25. void LEDRY(u8 a)
  26. {
  27.         switch(a)
  28.         {
  29.                 case 0:P1M1|=0X01;break;//高阻,全滅
  30.                 case 1:P1M1&=0XFE;LED=1;break;//上拉,一個亮
  31.                 case 2:P1M1&=0XFE;LED=0;break;//上拉,一個亮
  32.                 case 3:P1M1&=0XFE;LED=~LED;break;//上拉模式
  33.         }
  34. }
  35. void key_scan(u8 c)
  36. {
  37.                 switch(c)
  38.                 {
  39.                         case 0://k=0;
  40.                                                 P1M0=0X00;
  41.                                                 P1M1|=0X02;//高阻模式
  42.                                                 //if(k==1)//一定是正按鍵按下
  43.                                                 break;
  44.                         case 1:k=1;        
  45.                                                 P1M0=0X00;
  46.                                                 P1M1&=0XFD;//上拉模式
  47.                                                 //if(k==0)//一定是負按鍵按下
  48.                                                 break;
  49.                 }
  50. }
  51. void Key_Enter()
  52. {
  53.                 static bit k12=0,flag=1,flag2=1;
  54.                 static u16 count=0;
  55.                 if(flag)//掃描檢測
  56.                 {
  57.                                 k12=~k12;
  58.                                 key_scan(k12);
  59.                 }
  60.                 if((k12&&k==0&&flag2)||(k12==0&&k==1&&flag2))
  61.                 {
  62.                                 flag=0;//停止掃描
  63.                                 count++;
  64.                                 if(count>=1000)
  65.                                 {
  66.                                                 count=0;
  67.                                                 flag2=0;//禁止再次進入
  68.                                                 if(k)
  69.                                                         led2=~led2;
  70.                                                 else
  71.                                                         led1=~led1;
  72.                                 }
  73.                 }
  74.                 if((k12&&k)||(k12==0&&k==0))
  75.                 {
  76.                                 flag=1;//允許掃描
  77.                                 count=0;
  78.                                 flag2=1;//
  79.                 }
  80.         
  81.         
  82.         
  83. }
  84. void main()
  85. {               
  86.                 u16 count=0,i=0;
  87.                 u8 xdata j=0;
  88.                 GPIO_Init();
  89.                 UartInit();
  90.                 while(1)
  91.                 {        
  92.                                 value=0;
  93.                                 if(led1)
  94.                                         value+=2;
  95.                                 if(led2)
  96.                                         value++;
  97.                                 LEDRY(value);
  98.                                 Key_Enter();
  99.                                 
  100.                                 
  101.                                 count++;
  102.                                 if(count>=500)
  103.                                 {
  104.                                                 count=0;
  105.                                                 i++;
  106.                                                 if(i>=1000)
  107.                                                 {
  108.                                                         i=0;
  109.                                                         j++;
  110.                                                         j%=4;
  111.                                                 }
  112.                                 }        
  113.                 }
  114. }
復(fù)制代碼

Keil代碼下載: STC8-一個IO檢測兩個按鍵 LED.rar (51.87 KB, 下載次數(shù): 16)





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