实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序

实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序

ID:9147067

大小:158.61 KB

页数:15页

时间:2018-04-19

实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序_第1页
实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序_第2页
实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序_第3页
实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序_第4页
实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序_第5页
资源描述:

《实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实现ATmegal6单片机AD键盘与PC机的串口通信并用LCD1602显示程序平台ATmegal6编程软件CodeVisionAV实现功能:单片机与PC机(电脑)之间的串口通信。具体就是单片机最小系统上的AD键盘按键按下后发送键值到串口助手上显示,申口助手发送一串字符到最小系统上的lcdl602显示。(程序或有冗余)include<megal6.h>//include<delay.h>#asm.equ_Icd_port=0xl5;PORTC#endasm#include<lcd.h>#defineucharunsig

2、nedchar#defineuintunsignedint#defineRSPORTC.7#defineRWPORTC.6#defineEPORTC.5ucharflag;//标志位全局变量的定义#ifndefRXB8#defineRXB81#endif#ifndefTXB8#defineTXB80#endif#ifndefUPE//defineUPE2#endif#ifndefDOR//defineDOR3#endif#ifndefFE#defineFE4#endif#ifndefUDRE#defineUDRE5#endif#ifndefRXC#de

3、fineRXC7#endif#defineFRAMING^ERROR(l<<FE)#definePARITY_ERROR(l<<UPE)#defineDATA_OVERRUN(l<<DOR)#defineDATA_REGISTER_EMPTY(l<<UDRE)#defineRX_COMPLETE(l<<RXC)//USARTReceiverbuffer:接收器缓冲#defineRX_BUFFER_SIZE8charrx_buffer[RX_BUFFER_SIZE];#ifRXBUFFERSIZ

4、E<256unsignedcharrx_wr_index,rx_rd_index,rx_counter;#elseunsignedintrx_wr_index,rx_rd」ndex,rx_counter;#endif//ThisflagissetonUSARTReceiverbufferoverflowbitrx_buffer_overfIow;//USARTReceiverinterruptserviceroutine:接收器中断interrupt[USART_RXC]voidusart_rx_isr(void){charstatus,data

5、;status=UCSRA;/八卖取接受状态标志位data=UDR;//读取USART数据寄存器flag=l;//白定义接收标志位if((status&(FRAMING_ERROR

6、PARITY_ERROR

7、DATA_OVERRUN))==0)rx_buffer[rx_wr_index]=data;//将数据填充到接收缓冲队列中if(++rx_wr_index==RX_BUFFER_SIZE)//写指针指向下一个单元,并判断是否到了队列的尾部,(不表示接受缓冲区是否满!)rx_wr_index=O;//到了尾部,则指向头部(构成环状)if(++

8、rx_counter==RX_BUFFER_SIZE)//队列中收到字符加1,并判断是否队列己满rx_counter=0;//队列满了,队列中收到字符个数为0,表示队列中所有以前的数据作废,因为最后的数据己经把最前边的数据覆盖了rxbufferoverflow=l;//置缓冲区溢出标志。在主程序中必要的地方需要判断该标志,以证明读到数据的完整性};}#ifndef_DEBUG_TERMINAL_IO_#define_ALTERNATE_GETCHAR_#pragmaused+/********g¥#********chargetchar(void){c

9、hardata;while(rx_counter==0);//队列屮没有数掘可以读取,等待。。。data=rx_buffer[rx_rd」ndex];//读取缓冲队列中的数据if(++rx_rd」ndex==RX_BUFFER_SIZE)rx_rd_index=O;#asm("clin)//关中断-rx_counter;//队列屮未读数据个数减1#asm("sei")//开中断returndata;}#pragmaused-#endif//USARTTransmitterbuffer#defineTX_BUFFER_SIZE8chartx_buffer

10、[TX_BUFFER_SIZE];#ifTXBUFFERSIZE<256unsigned

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。