找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3068|回复: 0
上一主题 下一主题
收起左侧

单片机4*4按键设计 带实验文档说明,仿真图

[复制链接]
跳转到指定楼层
楼主
一个基于AT89C51简单的4*4按键设计,带实验文档说明,仿真图,带注释程序。


所有资料51hei提供下载:

新建压缩(zipped)文件夹.zip (30.39 KB, 下载次数: 11)

实验24 单片机键盘显示控制实验.doc (57.5 KB, 下载次数: 5)



单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int        //引用头文件和定义宏

  4. uchar n,i;
  5. uchar code number[]={"0123456789ABCDEF"};
  6. uchar code k_t[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};

  7. //相连一行为0,不相连为1,找出所有按键值(可列表实现)
  8. //K_T={0xee,...};


  9. sbit lcdrs=P2^0;                                                                                                
  10. sbit lcdrw=P2^1;
  11. sbit lcden=P2^2;  //定义LCD的引脚

  12. void delaylcd() //延时,用于LCD控制
  13. {  uchar i;
  14.    for(i=0;i<125;i++); }

  15. void delay()          //延时20ms
  16. {  uchar i;
  17.    uchar t=20;
  18.    while(t--)
  19.    for(i=0;i<125;i++); }

  20. void w_lcdcom(uchar com) //写LCD命令数据
  21. {  lcdrs=0;
  22.    lcdrw=0;
  23.    delay();
  24.    P0=com;
  25.    lcden=1;
  26.    delay();
  27.    lcden=0; }

  28. void w_lcddat(uchar dat)//写LCD一个字符数据
  29. {  lcdrs=1;
  30.    lcdrw=0;
  31.    delay();
  32.    P0=dat;
  33.    lcden=1;
  34.    delay();
  35.    lcden=0; }

  36. void initlcd()//初始化LCD
  37. {  lcden=0;
  38.    w_lcdcom(0x38);
  39.    w_lcdcom(0x06);
  40.    w_lcdcom(0xc); }

  41. void w_lcdstr(uchar *s)//写LCD字符串
  42. {   while(*s)
  43.    {  w_lcddat(*s);
  44.       s++;} }

  45. void key()
  46. { uchar x=0,y=0,i;
  47.    P3=0xf0;  //行线送全“1”
  48.    while(P3==0xf0); //无键按下等待
  49.    delay(); //延时20ms去抖动
  50.    y=P3; //读行值
  51.    P3=0xf; //列线送全“1”
  52.    x=P3; //读列值
  53.    x=x|y; //将4位行值和4位列值,组合成8位的键值。
  54.    P3=0xf0;
  55.    while(P3!=0xf0);
  56.    for(i=0;i<16;i++)  
  57.    {  if(x==k_t[i])
  58.       {  n=i; break;}
  59.    }}


  60. void main()//主程序
  61. {  uint count=0,i;
  62.    initlcd(); //初始化LCD
  63.    while(1)
  64.    { //读按键
  65.               w_lcdcom(0x80);   //置光标到第1行第1列
  66.       for(i=0;i<16;i++)
  67.       {  key();
  68.          w_lcddat(number[n]);delaylcd();count++; }

  69.          if(count==17)        w_lcdcom(0xc0);
  70.          
  71.           {for(i=0;i<16;i++)
  72.       {  key();
  73.          w_lcddat(number[n]);delaylcd();count++;}}        //显示
  74.         
  75.         if(count==33)        {w_lcdcom(1);count=0;}
  76.           }
  77. }
复制代码









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

使用道具 举报

沙发
ID:535857 发表于 2019-5-12 00:44 来自手机
打不开,解压不了,上传不上,唉

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

本版积分规则

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

Powered by 单片机教程网

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