|
20黑幣
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "lcd.h"
typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
unsigned char i = 0;
unsigned char str[16];
u8 Temp;
void delayms(uint ms)
{
while(ms--)
{
for(i=0;i<120;i++);
}
}
void UsartInit()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
ES=1; //打開(kāi)接收中斷
EA=1; //打開(kāi)總中斷
TR1=1; //打開(kāi)計(jì)數(shù)器
}
void uart_send_byte(unsigned char byte)
{
SBUF = byte;
//TI位自動(dòng)置1,手動(dòng)清0
while(!TI);//while(TI != 1);
TI = 0;
}
void uart_send_string(unsigned char *string)
{
while(*string)
{
uart_send_byte(*string);
string++;
}
}
void uart_rcv_str()
{
u8 temp,bitnum = 0;
while(1)
{
if(RI)
{
RI = 0;
temp = SBUF;
if(temp == ';')
{
str[bitnum] = '\0';
break;
}
else
{
str[bitnum] = temp;
bitnum++;
}
}
}
}
void LCD_Write_String(uchar x,uchar y,uchar *str)
{
u8 n=0;
u8 *temp;
temp=str;
while(*str++!='\0') n++;
if(y==0)
{
LcdWriteCom(0x80|x);
}
if(y==1)
{
LcdWriteCom(0xc0|x);
}
for(i=0;i<n;i++)
{
LcdWriteCom(temp[i]);
}
}
void Usart() interrupt 4
{
if(RI) //判斷是接收中斷產(chǎn)生
{
RI=0; //標(biāo)志位清零
Temp=SBUF; //讀入緩沖區(qū)的值
P1=Temp;
if(i < 10)
{
str[i] = Temp;
i++;
}
if(i == 9)
{
str[i] = '\0';
LCD_Write_String(1,0,str);
} //把值輸出到P1口,用于觀察
SBUF=Temp; //把接收到的值再發(fā)回電腦端
}
if(TI) //如果是發(fā)送標(biāo)志位,清零
TI=0;
}
void main(void)
{
UsartInit();
LcdInit();
uart_send_string("I received is:");
while(1)
{
uart_send_string("I rcvd is:");
uart_rcv_str();
uart_send_string(str);
uart_send_string("\n");
LCD_Write_String(0,0,"I received is:");
LCD_Write_String(1,1,str);
if(RI)
{
uart_send_string("I received is:");
while(SBUF)
{
uart_send_byte(SBUF);
SBUF++;
}
uart_send_byte('\n');
uart_send_string("\n");
delayms(5);
RI = 0;
}
LCD_Write_String(2,1,str);
}
}
或者幫我看看?????????
|
|