標(biāo)題: 單片機(jī)代碼求解釋吶 [打印本頁(yè)]

作者: 吶吶吶    時(shí)間: 2018-4-20 14:54
標(biāo)題: 單片機(jī)代碼求解釋吶
單片機(jī)源程序如下:
  1. #include <reg52.h>

  2. #define uchar unsigned char

  3. #define uint unsigned int

  4. sbit BEEP = P3^7;


  5. uchar code DSY_CODE[]=

  6. {

  7.     0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00

  8. };

  9. uchar Pre_KeyNO = 16,KeyNO = 16;


  10. void DelayMS(uint ms)

  11. {

  12.     uchar t;

  13.     while(ms--)

  14.     {

  15.         for(t=0;t<120;t++);

  16.     }

  17. }


  18. void Keys_Scan()

  19. {

  20.     uchar Tmp;

  21.     P1 = 0x0f;

  22.     DelayMS(1);

  23.     Tmp = P1 ^0x0f;

  24.     switch(Tmp)

  25.     {

  26.         case1: KeyNO = 0; break;

  27.         case 2:KeyNO = 1; break;

  28.         case 4:KeyNO = 2; break;

  29.         case 8:KeyNO = 3; break;

  30.         default:KeyNO = 16;

  31.     }

  32.     P1 = 0xf0;

  33.     DelayMS(1);

  34.     Tmp = P1>> 4 ^ 0x0f;

  35.     switch(Tmp)

  36.     {

  37.         case1: KeyNO += 0; break;

  38.         case 2:KeyNO += 4; break;

  39.         case 4:KeyNO += 8; break;

  40.         case 8:KeyNO += 12;

  41.     }

  42. }


  43. void Beep()

  44. {

  45.     uchar i;

  46.     for(i=0;i<100;i++)

  47.     {

  48.         DelayMS(1);

  49.         BEEP =~BEEP;

  50.     }

  51.     BEEP = 1;

  52. }


  53. void main()

  54. {

  55.     P0 = 0x00;

  56.     while(1)

  57.     {

  58.         P1 =0xf0;

  59.         if(P1!= 0xf0)

  60.             Keys_Scan();

  61.         if(Pre_KeyNO!= KeyNO)

  62.         {

  63.             P0 =DSY_CODE[KeyNO];

  64.             Beep();

  65.             Pre_KeyNO= KeyNO;

  66.         }

  67.         DelayMS(100);

  68.     }

  69. }
復(fù)制代碼


作者: emmmmm    時(shí)間: 2018-4-20 18:00
這是矩陣按鍵的掃描法,控制蜂鳴器和數(shù)碼管的吧
作者: weiweioioi    時(shí)間: 2018-4-21 10:23
開始頭文件、宏定義0----蜂鳴器引腳定義----數(shù)碼管顯示初始化----定義變量----延時(shí)函數(shù)----按鍵控制函數(shù)、先將按鍵置為第四位、兩個(gè)swtich控制矩陣按鍵的行列-------然后是蜂鳴器函數(shù)、取反延時(shí)即可----然后是主函數(shù),使用了你定義過(guò)的函數(shù)、P1按鍵控制功能(按鍵防抖語(yǔ)句)    PS;這按鍵防抖沒(méi)看懂。。。。以下是我經(jīng)常用的=。=嘿嘿,希望對(duì)你有幫助
if(!k1)
{
delay_ms(10)
if(!k1)
{
while(!k1)
語(yǔ)句。。。。
}
}
作者: weiweioioi    時(shí)間: 2018-4-21 11:25
weiweioioi 發(fā)表于 2018-4-21 10:23
開始頭文件、宏定義0----蜂鳴器引腳定義----數(shù)碼管顯示初始化----定義變量----延時(shí)函數(shù)----按鍵控制函數(shù)、 ...

打錯(cuò)了抱歉,按鍵設(shè)置為低四位  0x0f(0000 1111)




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