#include <reg52.h>#include "delay.h"#include "1602.h"void uart_init(void){ SCON = 0x50;//设置工作方式为方式1,允许串口接收 TMOD |= 0X20;//定时器1工作于方式1 TH1 = 0XFD;//波特率为9600 TR1 = 1; EA = 1; //ES = 1;}void uart_send_byte(unsigned char byte){ SBUF = byte; while(!TI);//TI为自动至1,手动清零 TI = 0;}void uart_send_str(unsigned char *s){ while(*s) { uart_send_byte(*s); s++; }}unsigned char recvbuf[50] = '/0';void uart_recv_str(){ unsigned char temp; unsigned char num = 0; while(1) { if(RI) { RI = 0; temp = SBUF; if(temp == ';') { recvbuf[num] = '/0'; break; } else { recvbuf[num] = temp; num++; if(num == 50) num = 0; } } }}void main(void){ uart_init(); LCD_Clear(); LCD_Init(); while(1) { uart_recv_str(); uart_send_str("get string:"); uart_send_str(recvbuf); uart_send_str("/r/n"); }}/*void uart_isr(void) interrupt 4{ unsigned char temp; static unsigned char i; if(RI) { temp = SBUF; display[i++] = temp; SBUF = temp; RI = 0; } else if(display[i-1]) { display[i] = '/0'; i++; LCD_Clear(); LCD_Write_String(0,0,display); } if(TI) TI = 0; }*/#include "1602.h"#include "delay.h"sbit RS = P2^4; //定义端口 sbit RW = P2^5;sbit EN = P2^6;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0/*------------------------------------------------ 判忙函数------------------------------------------------*/ /*bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); }*//*------------------------------------------------ 写入命令函数------------------------------------------------*/void LCD_Write_Com(unsigned char com) { // while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR;}/*------------------------------------------------ 写入数据函数------------------------------------------------*/void LCD_Write_Data(unsigned char Data) { //while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR;}/*------------------------------------------------ 清屏函数------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); }/*------------------------------------------------ 写入字符串函数------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } }/*------------------------------------------------ 写入字符函数------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); }/*------------------------------------------------ 初始化函数------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/}
#include "delay.h"void DelayUs2x(unsigned char t) //2t+7{while(--t);}void DelayMs(unsigned char t){while(t--){DelayUs2x(200);DelayUs2x(254);}}void DelayS(unsigned char t){unsigned char i;for(i = 0; i < t; i++){DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);} }
新闻热点
疑难解答