单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:4862|回复: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. }
复制代码



沙发
ID:77081发表于 2015-4-15 21:04|只看该作者
很好很强大。学习了。。。。
板凳
ID:79874发表于 2018-6-27 08:48|只看该作者
楼主分享下原理图源文件和程序的源文件

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

Powered by 单片机教程网