找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4902|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机4X8键盘扫描电路图+程序

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-27 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. //===============================================================
  2. //程序编写人:
  3. //编写地点:湖南源点IC培训机构
  4. //时间:2009年7月6日下午  星期一
  5. //功能:本程序实现扫描4X8键盘,显示键值0-31.
  6. //===============================================================
  7. #include <reg51.h>
  8. #define   uchar  unsigned char
  9. #define   uint  long unsigned int
  10. #define   ShuChu  P1    //输出口
  11. #define   PianXuan P0    //片选口
  12. #define   Jian1    P2    //行输入口
  13. #define   Jian2    P3    //列输入口
  14. bit   AnJian;
  15. uchar  n;
  16. uint  code   tempt1[]={0x0efe,0x0dfe,0x0bfe,0x07fe,
  17.         0x0efd,0x0dfd,0x0bfd,0x07fd,
  18.         0x0efb,0x0dfb,0x0bfb,0x07fb,
  19.         0x0ef7,0x0df7,0x0bf7,0x07f7,
  20.         0x0eef,0x0def,0x0bef,0x07ef,
  21.         0x0edf,0x0ddf,0x0bdf,0x07df,
  22.         0x0ebf,0x0dbf,0x0bbf,0x07bf,
  23.         0x0e7f,0x0d7f,0x0b7f,0x077f};//反转码
  24. uchar code  tempt2[]={0xc0,0xf9,0xa4,0xb0,0x99,
  25.        0x92,0x82,0xf8,0x80,0x90};//共阳数码管数据
  26. void  Delay(uchar M)//延时函数
  27. {
  28. uchar i,j;
  29. for(j=M;j>0;j--)
  30.   for(i=125;i>0;i--);
  31. }
  32. void  Display(uchar N)//显示函数
  33. {
  34. ShuChu=tempt2[N/10];   //显示十位
  35. PianXuan=0x01;
  36. Delay(20);
  37. PianXuan=0x00;
  38. ShuChu=tempt2[N%10];  //显示个位
  39. PianXuan=0x02;
  40. Delay(20);
  41. PianXuan=0x00;
  42. }
  43. uint  SaoMiao(void)//扫描函数
  44. {
  45. uchar a,b;
  46. uint  d;
  47. Jian1=0x00;
  48. Jian2=0x0f;
  49. a=Jian2&0x0f;
  50. d=a<<8;
  51. Jian1=0xff;
  52. Jian2=0x00;
  53. b=Jian1;
  54. return (d=d|b);    //返回读取的键值
  55. }
  56. uchar DuJianZhi(uint K)//读键值函数
  57. {
  58. uchar i=0,b;
  59. if(K!=0x0fff)
  60. {
  61.   AnJian=1;
  62.   while(K!=tempt1)
  63.   {
  64.    i++;
  65.   }
  66.   return b=i;
  67. }
  68. else
  69.         return b=n;   //返回键值位置
  70. }
  71. main()//主函数
  72. {
  73. AnJian=0;
  74. while(1)
  75. {
  76.   P3=0x0f;
  77.   if(AnJian==1)
  78.   {
  79.    Display(n);        //显示键值
  80.     n=DuJianZhi(SaoMiao());
  81.   }
  82.   else
  83.   {
  84.    n=DuJianZhi(SaoMiao());
  85.   }
  86. }
  87. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:77081 发表于 2015-4-15 21:04 | 只看该作者
很好很强大。学习了。。。。
回复

使用道具 举报

板凳
ID:79874 发表于 2018-6-27 08:48 | 只看该作者
楼主分享下原理图源文件和程序的源文件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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