本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本人单片机小白,想入门单片机,串口通信遇到了问题望大神不吝赐教
这是我用的板子,和他串口通信的是一个扫码枪,想实现扫码枪扫描一个条形码,液晶显示屏上显示条形码上的数字
附上这个板子的原理图
TX-1C型单片机实验板原理图.pdf
(1015.98 KB, 下载次数: 0)
扫码枪是串口扫码枪
现在的情况是我在使用串口调试工具的时候送数据是没有问题的,液晶上也有显示,但是扫码枪扫码之后却完全没有反应,网上说要扫码枪和单片机分别供电需要共地,但我不是很懂啊,应该怎么实现呢。这个实验板上有焊接max232模块实现TTL与RS232的转换,是不是就默认共地了??? 很懵逼啊
使用的是c语言,以下是我的代码
- #include <REG52.H>
- #include <string.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar UART_buff;
- uchar table[20];
- int count;
- bit New_rec = 0, Send_ed = 1;
- sbit lcden=P3^4;
- sbit lcdrs=P3^5;
- sbit dula=P2^6;
- sbit wela=P2^7;
- void delay(uint z) { //延时函数
- uint x,y;
- for(x=z; x>0; x--)
- for(y=110; y>0; y--);
- }
- void write_com(uchar com) { //需要看操作时序
- lcdrs=0;
- P0=com; //P0送的指令码
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_dat(uchar dat) { //需要看操作时序
- lcdrs=1;
- P0=dat; //P0送的指令码
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void init() {
- dula=0; //关闭数码管锁存端
- wela=0;
- lcden=0;
- write_com(0x38); //设置显示模式
- write_com(0x0e); //设置光标
- write_com(0x06); //设置字符指针
- write_com(0x01); //清屏指令
- write_com(0x80); //光标定位
- }
- //----------------------------------------------
- void main (void) {
- int num;
- init();
- SCON = 0x50; //串口方式1, 8-n-1, 允许接收.
- TMOD = 0x20; //T1方式2
- TH1 = 0xFD; //9600bps@11.0592MHz
- TL1 = 0xFD;
- TR1 = 1;
- ES = 1; //开中断.
- EA = 1;
- while(1) {
- if (New_rec == 1) { //如果收到新数据
- ES=0;//关闭串口中断
- SBUF = UART_buff; //发送数据
- table[count++]=UART_buff;
- while(!Send_ed); //等待数据发送完毕
- if(!(table[9]==0)) { //如果缓存表满,给LCD送出数据
- init(); //清屏及光标定位
- for(num=0; num<10; num++) {
- write_dat(table[num]);
- }
- count=0; //缓存表初始化
- num=0;
- memset(table, 0, 20*sizeof(char)); //缓存表清零
- }
- ES=1;//开启串口中断
- New_rec = 0; //接收完数据,标记置0
- Send_ed = 1; //发送完数据,标记置0
- }
- }
- }
- //----------------------------------------------
- void ser_int (void) interrupt 4 {
- if(RI == 1) { //处理接收中断
- RI = 0; //接收中断标记置0
- New_rec = 1; //通知主函数接收到新数据
- UART_buff = SBUF; //取串口数据
- }
- if(TI == 1) { //处理发送中断
- TI = 0; //发送中断标记置0
- Send_ed = 1; //通知主函数数据发送完成
- }
- }
- //----------------------------------------------
复制代码
|