main.c

#include "config.h"
//矩阵按键扫描头文件
#include "anjian.h"
//1602显示头文件
#include "1602.h"
#include "music.h"sbit LED=P1^0;
u8 code key[]={'0','1','2','3','4','5','6','7','8','9','*','#'};//3*4手机拨号键盘号码u8 code title[]="- phone number -";
u8 keynum=12;
//数字缓冲区
u8 Number_Str[]={"           "};
u8 i=0,j;
//设定工作方式
void port()
{TMOD=0x21; //(定时器T0工作方式1、软启动、定时,驱动蜂鸣器);(T1工作方式2、软启动,设置串口波特率) //串口初始化TH1=0xfd; //波特率9600TL1=0xfd;TR1=1;  PCON=0x00;SCON=0X40;//串口工作方式1,8位异步收发,(REN=0)不允许接收//定时器初始化,驱动蜂鸣器发声TH0=63628/256;TL0=63628%256;  //根据蜂鸣器频率设置计数初值
}void init()
{EA=1;EX0=1;//允许外部中断0IT0=1;//下降沿引发外部中断EX1=1;//允许外部中断1IT1=1;//下降沿引发外部中断
}void main()
{   port();LCD_Init();//使用前初始化display_char(title,0x00);while(1){keynum=keyscan();//扫描按键init();if(keynum<12)   {       EA=0;//关键:两个定时器同时使用时,在串口收发时,最好把EA关掉,处理完后在将EA打开。SBUF=key[keynum];while(!TI);//检测发送标志位TI, TI=0,未发送完TI=0;//一个字节发送完,TI清0//打开蜂鸣器EA=1;ET0=1;  //允许计数器T0中断TR0=1;  //启动计数器T0驱动蜂鸣器sound(keynum);delay(300);BEEP=1;  TR0=0;//停止定时器,关闭蜂鸣器if(keynum==0xFF) continue;if(++i == 12)                            //超过十一位时清空{for(j=0;j<16;j++) Number_Str[j]=' ';i=0;}Number_Str[i]=key[keynum];display_char(Number_Str,0x40);}}
}
//外部中断0
void EX_INT0() interrupt 0       /*INT0中断服务程序*/
{LED=~LED;for(j=0;j<16;j++) Number_Str[j]=' ';i=0;display_char(Number_Str,0x40);
}
//外部中断1
void EX_INT1() interrupt 2      /*INT0中断服务程序*/
{PlayMusic(); //播放生日快乐
}void Time0() interrupt 1//定时器T0中断
{   TH0 = TH00;TL0 = TL00;BEEP = ~BEEP;
} 

anjian.h

#include "config.h"u8 keyscan()//手机拨号盘按键扫描函数:要去抖,若有按键按下,返回对应的按键值(0-9,*-10,#-12),否则返回16
{unsigned char i,key=16,row,temp;//初值设置为16,目的是:没有按键按下时返回16;若不设初值(默认值为0),没有按键按下时,将返回0,会误认为0被按下  row=0xef;        for(i=0;i<4;i++){P2=0xff;  P2=row;row=_crol_(row,1); temp=P2;  temp=temp&0x0f;  if(temp!=0x0f)  {  delay(20);  temp=P2;  temp=temp&0x0f;  if(temp!=0x0f)  {  switch(temp)  {  case 0x0e:key=1+i*3;break;  case 0x0d:key=2+i*3;break;  case 0x0b:key=3+i*3;  }do{temp=P2;  temp=temp&0x0f;  }while(temp!=0x0f);  //等待按键释放   }  }}  if(key==11) key=0;if(key==12) key=11;return(key);//没找到
}//按键音
void sound(u8 keynum)
{switch(keynum){case 0:TH00=0xf3;TL00=0x07;break;     //低3 case 1:TH00=0xf3;TL00=0xc8; break;    //低4 case 2:TH00=0xf5;TL00=0x1e; break;    //低5 case 3:TH00=0xf6;TL00=0x4c; break;    //低6 case 4:TH00=0xf7;TL00=0x5a; break;    //低7 case 5:TH00=0xf7;TL00=0xd8; break;    //中1 case 6:TH00=0xf8;TL00=0xbd; break;    //中2 case 7:TH00=0xf9;TL00=0x87; break;    //中3 case 8:TH00=0xf9;TL00=0xe4; break;    //中4 case 9:TH00=0xfa;TL00=0x90; break;    //中5 case 10:TH00=0xfb;TL00=0x29; break;   //中6 case 11:TH00=0xfb;TL00=0xb1; break;   //中7 case 12:TH00=0xfb;TL00=0xef; break;   //高1 case 13:TH00=0xfc;TL00=0x62; break;   //高2 case 14:TH00=0xfc;TL00=0xc7; break;   //高3 case 15:TH00=0xfc;TL00=0xf6; break;   //高4 }TH0=TH00;TL0=TL00;
//  TR0=1;
}

music.h

#include "config.h"//生日快乐歌的音符频率表,不同频率由不同的延时来决定
u8 code SONG_TONE[]={201,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};
//生日快乐歌节拍表,节拍决定每个音符的演奏长短
u8 code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};void PlayMusic()
{u16 i=0,j,k;while(SONG_LONG[i]!=0||SONG_TONE[i]!=0){   //播放各个音符,SONG_LONG为拍子长度for(j=0;j<SONG_LONG[i]*20;j++){BEEP=~BEEP;//SONG_TONE延时表决定了每个音符的频率for(k=0;k<SONG_TONE[i]/3;k++);}delay(10);i++;        }
}

1602.h

/*****************************显示输入文本数字等*********************************************/
void display_char(u8 *point, u8 address)
{
    unsigned char i;
    WrComLCD(0x80 + address);
    for (i=0;i<16;i++)
    {     WrDatLCD(*point);
     point++;
    }
}/*****************************显示变量(三位数)*********************************************/
void display(int number, unsigned char address)
{
    unsigned char b,c,d;
    b = (number/100);
    c = (number/10)%10;
    d = (number/1)%10;
    WrComLCD(0x80+address);
    WrDatLCD(b+48);
    WrDatLCD(c+48);
    WrDatLCD(d+48);
}

keypad 按键显示相关推荐

  1. 按键显示按键编码 keycode

    按键显示按键编码 keycode <!doctype html> <html> <head> <meta charset="utf-8"& ...

  2. 题目十二:脉冲按键电话按键显示电路设计(平台实现)

    题目十二:脉冲按键电话按键显示电路设计(平台实现) 题目要求:设计一个具有8位显示的电话按键显示器,显示器应能正确反映按键数字,接通后能显示通话时间. \1) 显示器显示从低位向高位前移,逐位显示按键 ...

  3. 【Proteus仿真】4X4矩阵按键显示0-F

    [Proteus仿真]4X4矩阵按键显示0-F 本实验基于Proteus VSM Studio仿真 VSM Studio程序代码 /* Main.c file generated by New Pro ...

  4. linux下屏幕按键显示软件

    今天给大家推荐一款linux下的好用的屏幕按键显示软件,方便大家教学或者其他使用. 软件名称:keymon 安装:sudo apt-get install keymon 安装后打开软件,命令行输入:k ...

  5. 我的世界服务器按键显示mod,我的世界按键显示MOD

    我的世界按键显示MOD专为我的世界的玩家们打造,是一个功能型mod,能够映射按键,玩家安装补丁之后就可以在游戏桌面上显示鼠标左右键了,包含WASD.Space.Shift和自定义状态键,玩家可以通过按 ...

  6. Android启动页,引导页适配华为手机(虚拟按键)显示问题

    前言 看到我这篇文章的同学肯定会质疑我开发的能力,我遇到的问题总是很奇怪,估计真的跟我的开发能力有关系~~~,最近公司的B端项目要上线了,UI妹子昨天给做了几张引导页与一张启动页,原来没有仔细观察过图 ...

  7. android 从零单排 第一期 按键显示helloworld

    啦啦啦- 我是qscqesze 今天开始android的从零单排啦啦啦- 首先从最简单的开始 要求: 程序运行后,单击屏幕上的按键后可以显示一句话,如"Hello World!" ...

  8. 51单片机4位数码管按键显示

    定义一个数g,初始化为0,每按下一次键盘g都加1,把第一次的数赋给b显示在数码管上,第二次的数赋给c显示在数码管上,依次类推直到第四位.定义一个确认按键按下后检查密码是否为1112,如果是就..... ...

  9. 利用51单片机,矩阵键盘按键显示0--F在数码管

    代码如下: #include <reg52.h> #define uchar unsigned char #define uint  unsigned int sbit we = P2^7 ...

最新文章

  1. 边做边思考,谷歌大脑提出并发RL算法,机械臂抓取速度提高一倍!
  2. 从一次线下读书会获得的收获
  3. WEB前端底层知识--浏览器是如何工作的
  4. 【Jmeter篇】后置处理器之边界提取器
  5. 快查电脑:开关机记录等(电脑使用痕迹)
  6. stringr | 文本处理方法(Ⅰ-1):字符串处理函数(上)
  7. 基于cxf框架javaweb服务说明
  8. 20145228《网络对抗》 后门原理与实践
  9. 课程体系包括哪些要素_课程建设包括哪些内容_以课程建设为抓手,促进专业团队的发展...
  10. 移动硬盘 提示“介质受写保护“ 无法格式化等 解决方案
  11. SwiftUI+CoreData项目出现The operation couldn’t be completed(GenericObjCError error 0)错误的解决
  12. 李峋爱心代码 程序员教你用代码制作爱心网页[樱花+爱心],正好拿去送给女神给她个惊喜
  13. vscode能写winform窗体吗_VSCode——愉快的写C#
  14. php ean13,php生成EAN_13标准条形码实例_PHP教程
  15. echarts实用篇(一)——饼状图
  16. diagrams 一个完全可以代替visio的软件
  17. 2021.12.9洛谷小书童——凯撒密码——c语言
  18. STM32F103RCT6 介绍
  19. Linux下按键设备驱动开发以及对中断的上半部分和下半部分详细介绍
  20. 对当下金融危机发生可能性的判断

热门文章

  1. 亡命威龙评测:像城管一样开警车
  2. 飞机上允许携带哪些移动电源?
  3. offset、scroll、client三大家族
  4. 【小罗的hdlbits刷题笔记5】基于fifo思想的fsm设计(Exams/2014 q3fsm)
  5. 成为云计算产品经理的前提
  6. 转载-【讨论】为什么不去读顶级会议上的论文?适应于机器学习、计算机视觉和人工智能
  7. 如何编写一个好的软件设计文档
  8. 2021年制冷与空调设备运行操作免费试题及制冷与空调设备运行操作操作证考试
  9. telegram协议电报群组采集,群用户提取,私发消息,群拉人,关键词监控回复等引流自动化
  10. JQuery中的id选择器含有特殊字符时,不能选中dom元素的解决方法