找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1344|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)代碼求解釋吶

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:312422 發(fā)表于 2018-4-20 14:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(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ù)制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:239596 發(fā)表于 2018-4-20 18:00 | 只看該作者
這是矩陣按鍵的掃描法,控制蜂鳴器和數(shù)碼管的吧
回復(fù)

使用道具 舉報(bào)

板凳
ID:312890 發(fā)表于 2018-4-21 10:23 | 只看該作者
開始頭文件、宏定義0----蜂鳴器引腳定義----數(shù)碼管顯示初始化----定義變量----延時(shí)函數(shù)----按鍵控制函數(shù)、先將按鍵置為第四位、兩個(gè)swtich控制矩陣按鍵的行列-------然后是蜂鳴器函數(shù)、取反延時(shí)即可----然后是主函數(shù),使用了你定義過的函數(shù)、P1按鍵控制功能(按鍵防抖語句)    PS;這按鍵防抖沒看懂。。。。以下是我經(jīng)常用的=。=嘿嘿,希望對你有幫助
if(!k1)
{
delay_ms(10)
if(!k1)
{
while(!k1)
語句。。。。
}
}
回復(fù)

使用道具 舉報(bào)

地板
ID:312890 發(fā)表于 2018-4-21 11:25 | 只看該作者
weiweioioi 發(fā)表于 2018-4-21 10:23
開始頭文件、宏定義0----蜂鳴器引腳定義----數(shù)碼管顯示初始化----定義變量----延時(shí)函數(shù)----按鍵控制函數(shù)、 ...

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

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表