找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3892|回复: 4
收起左侧

单片机按键模块与CH9328的使用源程序

[复制链接]
ID:661763 发表于 2020-7-13 15:53 | 显示全部楼层 |阅读模式
我用的是stc系列的单片机(stc89c52rc),现在12和15抗干扰能力更强(推荐使用)。键盘模块用的是ch9328模块(如下图)
mmexport1594624351hei37.jpg

把单片机最小系统板的RXD与ch9328模块的TXD相连,TXD与模块的RXD相连。
按钮可以接到p0.0到p0.7等等,另一端接的是地,输出在电脑上的是数字的123......等等。

单片机源程序如下:
  1. #include "reg52.h"
  2. sbit k1=P1^0;//编码器开关接口               
  3. sbit k2=P1^1;//编码器开关接口                  
  4. sbit k3=P1^2;//编码器开关接口
  5. sbit k4=P1^3;//编码器开关接口               
  6. sbit k5=P1^4;//编码器开关接口                  
  7. sbit k6=P1^5;//编码器开关接口        
  8. sbit k7=P1^6;//编码器开关接口
  9. sbit k8=P1^7;//编码器开关接口
  10. sbit k9=P2^0;//编码器开关接口
  11. sbit k10=P2^1;//编码器开关接口
  12. sbit k11=P2^2;//编码器开关接口
  13. sbit k12=P2^3;//编码器开关接口
  14. //编码器C接口直接接地
  15. unsigned char key[8],i;
  16. void sendbyte(unsigned char b)//串口发送字符                  
  17. {
  18.         SBUF=b;
  19.         while(!TI);
  20.         TI=0;
  21. }                                                                  
  22. void init()//初始化函数
  23. {
  24.         //SCON=0X50;                        //设置为工作方式1
  25.         SCON=0X40;                        //设置为工作方式1                                1123
  26.         TMOD=0X20;                        //设置计数器工作方式2
  27.         PCON=0X80;                        //波特率加倍
  28.         TH1=0Xfa;                        //计数器初始值设置,波特率9600,0xf4:22.1184M;0xfa:11.0592M
  29. //        PCON=0X00;                        //波特率加倍
  30. //        TH1=0Xfd;                        //计数器初始值设置,波特率9600,0xf4:22.1184M;0xfa:11.0592M
  31.         TL1=TH1;        
  32.         TR1=1;        //打开计数器        
  33. }
  34.                                                 
  35. void delay(int x)//延时1Ms函数                  
  36. {
  37.     unsigned char a,b;
  38.         for(x;x>0;x--)
  39.                 for(b=80;b>0;b--)
  40.                         for(a=10;a>0;a--);
  41. }
  42. void keys()
  43. {
  44.           for(i=0;i<8;i++) key[i]=0x00;                                                         
  45.                 if(k1==0)
  46.                 {
  47.                         delay(10);
  48.                         if(k1==0)
  49.                         {
  50.                                 key[2]=0x31;
  51.                                 for(i=0;i<8;i++)
  52.                                         sendbyte(key[i]);
  53.                                 while(!k1);
  54.                         }
  55.                 }
  56.                 if(k2==0)
  57.                 {
  58.                         delay(10);
  59.                         if(k2==0)
  60.                         {
  61.                                 key[2]=0x32;
  62.                                 for(i=0;i<8;i++)
  63.                                         sendbyte(key[i]);
  64.                                 key[2]=0x00;//按下后发送的松开
  65.                                 for(i=0;i<8;i++)
  66.                                         sendbyte(key[i]);
  67.                                 while(!k2);
  68.                         }
  69.                 }
  70.                 if(k3==0)
  71.                 {
  72.                         delay(10);
  73.                         if(k3==0)
  74.                         {
  75.                                 key[2]=0x33;
  76.                                 for(i=0;i<8;i++)
  77.                                         sendbyte(key[i]);
  78.                                 key[2]=0x00;//按下后发送的松开
  79.                                 for(i=0;i<8;i++)
  80.                                         sendbyte(key[i]);
  81.                                 while(!k3);
  82.                         }
  83.                 }
  84.                 if(k4==0)
  85.                 {
  86.                         delay(10);
  87.                         if(k4==0)
  88.                         {
  89.                                 key[2]=0x34;
  90.                                 for(i=0;i<8;i++)
  91.                                         sendbyte(key[i]);
  92.                                 key[2]=0x00;//按下后发送的松开
  93.                                 for(i=0;i<8;i++)
  94.                                         sendbyte(key[i]);
  95.                                 while(!k4);
  96.                         }
  97.                 }
  98.                 if(k5==0)                 
  99.                 {
  100.                         delay(10);
  101.                         if(k5==0)
  102.                         {
  103.                                 key[2]=0x35;
  104.                                 for(i=0;i<8;i++)
  105.                                         sendbyte(key[i]);
  106.                                 key[2]=0x00;//按下后发送的松开                1223445612
  107.                                 for(i=0;i<8;i++)
  108.                                         sendbyte(key[i]);
  109.                                 while(!k5);
  110.                         }
  111.                 }
  112.                 if(k6==0)
  113.                 {
  114.                         delay(10);
  115.                         if(k6==0)
  116.                         {
  117.                                 key[2]=0x36;
  118.                                 for(i=0;i<8;i++)
  119.                                         sendbyte(key[i]);
  120.                                 key[2]=0x00;//按下后发送的松开
  121.                                 for(i=0;i<8;i++)
  122.                                         sendbyte(key[i]);
  123.                                 while(!k6);
  124.                         }
  125.                 }

  126.                 if(k7==0)
  127.                 {
  128.                         delay(10);
  129.                         if(k7==0)
  130.                         {
  131.                                 key[2]=0x37;
  132.                                 for(i=0;i<8;i++)
  133.                                         sendbyte(key[i]);
  134.                                 key[2]=0x00;//按下后发送的松开
  135.                                 for(i=0;i<8;i++)
  136.                                         sendbyte(key[i]);
  137.                                 while(!k7);
  138.                         }
  139.                 }

  140.                 if(k8==0)
  141.                 {
  142.                         delay(10);
  143.                         if(k8==0)
  144.                         {
  145.                                 key[2]=0x38;
  146.                                 for(i=0;i<8;i++)
  147.                                         sendbyte(key[i]);
  148.                                 key[2]=0x00;//按下后发送的松开
  149.                                 for(i=0;i<8;i++)
  150.                                         sendbyte(key[i]);
  151.                                 while(!k8);
  152.                         }
  153.                 }

  154.                 if(k9==0)
  155.                 {
  156.                         delay(10);
  157.                         if(k9==0)
  158.                         {
  159.                                 key[2]=0x39;
  160.                                 for(i=0;i<8;i++)
  161.                                         sendbyte(key[i]);
  162.                                 key[2]=0x00;//按下后发送的松开
  163.                                 for(i=0;i<8;i++)
  164.                                         sendbyte(key[i]);
  165.                                 while(!k9);
  166.                         }
  167.                 }
  168.                
  169.    if(k10==0)
  170.                 {
  171.                         delay(10);
  172.                         if(k10==0)
  173.                         {
  174.                                 key[2]=0x61;
  175.                                 for(i=0;i<8;i++)
  176.                                         sendbyte(key[i]);
  177.                                 key[2]=0x00;//按下后发送的松开
  178.                                 for(i=0;i<8;i++)
  179.                                         sendbyte(key[i]);
  180.                                 while(!k10);
  181.                         }
  182.                 }
  183.                
  184.    if(k11==0)
  185.                 {
  186.                         delay(10);
  187.                         if(k11==0)
  188.                         {
  189.                                 key[2]=0x62;
  190.                                 for(i=0;i<8;i++)
  191.                                         sendbyte(key[i]);
  192.                                 key[2]=0x00;//按下后发送的松开
  193.                                 for(i=0;i<8;i++)
  194.                                         sendbyte(key[i]);
  195.                                 while(!k11);
  196.                         }
  197.                 }

  198.    if(k12==0)
  199.                 {
  200.                         delay(10);
  201.                         if(k12==0)
  202.                         {
  203.                                 key[2]=0x63;
  204.                                 for(i=0;i<8;i++)
  205.                                         sendbyte(key[i]);
  206.                                 key[2]=0x00;//按下后发送的松开
  207.                                 for(i=0;i<8;i++)
  208.                                         sendbyte(key[i]);
  209.                                 while(!k12);
  210.                         }
  211.                 }
  212. }
  213. void main(void)//主函数        1111111111111224399         
  214. {

  215.         P1=0xff;
  216.         init();//初始化函数
  217.         while(1)
  218.         {
  219.                
  220.                 keys();
  221.         }
  222. }
复制代码
以上程序51hei下载地址:
按键模块.zip (33.99 KB, 下载次数: 38)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:249503 发表于 2020-10-12 23:57 | 显示全部楼层
老哥,你的键值怎么对应的啊,我按照给的键值表写进去显示出来的不一样
回复

使用道具 举报

ID:272158 发表于 2020-10-13 16:47 | 显示全部楼层
51小板卡不错,哪里买的。
回复

使用道具 举报

ID:661763 发表于 2020-12-25 11:25 | 显示全部楼层
feixue2007 发表于 2020-10-13 16:47
51小板卡不错,哪里买的。

τ 宝,我看这个晶振是贴片的就感觉还行,还有GND和5V接口
回复

使用道具 举报

ID:661763 发表于 2020-12-25 11:34 | 显示全部楼层
无极令 发表于 2020-10-12 23:57
老哥,你的键值怎么对应的啊,我按照给的键值表写进去显示出来的不一样

键码值对应的是键盘上的104键,分数字键盘的123....和主键盘的123.....我这程序写的是主键盘的123....
51hei图片_20201225113320.png

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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