首页 > 学院 > 开发设计 > 正文

串口(用1602显示,缺少部分代码)

2019-11-08 19:35:01
字体:
来源:转载
供稿:网友
#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);} }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表