单片机串口通信求助

[复制链接]
1227 0 打印 上一主题 下一主题

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

8828彩票 www.sidanett.com 您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本人8828彩票小白,想入门单片机,串口通信遇到了问题望大神不吝赐教

这是我用的板子,和他串口通信的是一个扫码枪,想实现扫码枪扫描一个条形码,液晶显示屏上显示条形码上的数字
附上这个板子的原理图 TX-1C型单片机实验板原理图.pdf (1015.98 KB, 下载次数: 0)
扫码枪是串口扫码枪

现在的情况是我在使用串口调试工具的时候送数据是没有问题的,液晶上也有显示,但是扫码枪扫码之后却完全没有反应,网上说要扫码枪和单片机分别供电需要共地,但我不是很懂啊,应该怎么实现呢。这个实验板上有焊接max232??槭迪諸TL与RS232的转换,是不是就默认共地了??? 很懵逼啊
使用的是c语言,以下是我的代码

  1. #include <REG52.H>
  2. #include <string.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar UART_buff;
  6. uchar table[20];
  7. int count;
  8. bit New_rec = 0, Send_ed = 1;

  9. sbit lcden=P3^4;
  10. sbit lcdrs=P3^5;
  11. sbit dula=P2^6;
  12. sbit wela=P2^7;


  13. void delay(uint z) {                 //延时函数
  14.         uint x,y;
  15.         for(x=z; x>0; x--)
  16.                 for(y=110; y>0; y--);
  17. }
  18. void write_com(uchar com) {  //需要看操作时序
  19.         lcdrs=0;
  20.         P0=com;                                  //P0送的指令码
  21.         delay(5);
  22.         lcden=1;
  23.         delay(5);
  24.         lcden=0;
  25. }
  26. void write_dat(uchar dat) {  //需要看操作时序
  27.         lcdrs=1;
  28.         P0=dat;                                  //P0送的指令码
  29.         delay(5);
  30.         lcden=1;
  31.         delay(5);
  32.         lcden=0;
  33. }
  34. void init() {
  35.         dula=0;                                  //关闭数码管锁存端
  36.         wela=0;
  37.         lcden=0;
  38.         write_com(0x38);          //设置显示模式
  39.         write_com(0x0e);          //设置光标
  40.         write_com(0x06);          //设置字符指针
  41.         write_com(0x01);          //清屏指令
  42.         write_com(0x80);          //光标定位


  43. }
  44. //----------------------------------------------
  45. void main (void) {
  46.         int num;
  47.         init();
  48.         SCON = 0x50;   //串口方式1, 8-n-1, 允许接收.
  49.         TMOD = 0x20;   //T1方式2
  50.         TH1 = 0xFD;    //[email protected]
  51.         TL1 = 0xFD;
  52.         TR1 = 1;
  53.         ES  = 1;       //开中断.
  54.         EA  = 1;
  55.         while(1)  {
  56.                 if (New_rec == 1)  {                          //如果收到新数据
  57.                         ES=0;//关闭串口中断
  58.                         SBUF = UART_buff;                         //发送数据
  59.                         table[count++]=UART_buff;
  60.                         while(!Send_ed);                          //等待数据发送完毕
  61.                         if(!(table[9]==0)) {                //如果缓存表满,给LCD送出数据
  62.                                 init();                                        //清屏及光标定位
  63.                                 for(num=0; num<10; num++) {
  64.                                         write_dat(table[num]);
  65.                                 }
  66.                                 count=0;                                                   //缓存表初始化
  67.                                 num=0;
  68.                                 memset(table, 0, 20*sizeof(char)); //缓存表清零
  69.                         }
  70.                         ES=1;//开启串口中断
  71.                         New_rec = 0;                //接收完数据,标记置0
  72.                         Send_ed = 1;                                //发送完数据,标记置0
  73.                 }
  74.         }
  75. }
  76. //----------------------------------------------
  77. void ser_int (void) interrupt 4 {
  78.         if(RI == 1) {                          //处理接收中断
  79.                 RI = 0;                      //接收中断标记置0
  80.                 New_rec = 1;                //通知主函数接收到新数据
  81.                 UART_buff = SBUF;   //取串口数据
  82.         }
  83.         if(TI == 1)  {              //处理发送中断
  84.                 TI = 0;                      //发送中断标记置0
  85.                 Send_ed = 1;                //通知主函数数据发送完成
  86.         }
  87. }
  88. //----------------------------------------------
复制代码

跳转到指定楼层
28 个评论

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

  • 回复
  • 转播
  • 评分
  • 分享
打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

快速回复 返回列表 客服中心 搜索 官方QQ群
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 8828彩票 返回列表