找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1348|回复: 3
收起左侧

单片机代码求解释呐

[复制链接]
ID:312422 发表于 2018-4-20 14:54 | 显示全部楼层 |阅读模式
单片机源程序如下:
  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. }
复制代码

回复

使用道具 举报

ID:239596 发表于 2018-4-20 18:00 | 显示全部楼层
这是矩阵按键的扫描法,控制蜂鸣器和数码管的吧
回复

使用道具 举报

ID:312890 发表于 2018-4-21 10:23 | 显示全部楼层
开始头文件、宏定义0----蜂鸣器引脚定义----数码管显示初始化----定义变量----延时函数----按键控制函数、先将按键置为第四位、两个swtich控制矩阵按键的行列-------然后是蜂鸣器函数、取反延时即可----然后是主函数,使用了你定义过的函数、P1按键控制功能(按键防抖语句)    PS;这按键防抖没看懂。。。。以下是我经常用的=。=嘿嘿,希望对你有帮助
if(!k1)
{
delay_ms(10)
if(!k1)
{
while(!k1)
语句。。。。
}
}
回复

使用道具 举报

ID:312890 发表于 2018-4-21 11:25 | 显示全部楼层
weiweioioi 发表于 2018-4-21 10:23
开始头文件、宏定义0----蜂鸣器引脚定义----数码管显示初始化----定义变量----延时函数----按键控制函数、 ...

打错了抱歉,按键设置为低四位  0x0f(0000 1111)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表