📄 p0902-usart.c
字号:
/*-- 文字: z --35*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,
/*-- 文字: - --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
/*-- 文字: = --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
/*-- 文字: \ --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,
/*-- 文字: --39*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: [ --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,
/*-- 文字: ] --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,
/*-- 文字: ; --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
/*-- 文字: ' --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: , --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: . --45*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: / --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00
};
//---------------------------------------
//名称: 5110LCD初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void LCD_init(void)
{
LCD_write_byte(0x21,0);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
LCD_write_byte(0xc5,0);//设置VOP值,室温下的编程范围为3.00-10.68
//Vlcd=3.06+(VOP)*0.06,本例VOP为0B0101 0000为十进制的80,Vlcd=7.86V
LCD_write_byte(0x20,0);//LCD功能设置:芯片活动,水平寻址,使用基本指令
LCD_write_byte(0x0C,0);//设定显示配置:普通模式
}
//---------------------------------------
//名称: LCD清屏函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void LCD_clear(void)
{
unsigned char t;
unsigned char k;
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
LCD_write_byte(0,1);
}
}
}
//---------------------------------------
//名称: 设置坐标函数
//参数:X:0-83 Y:0-5
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_write_byte(0x40 | Y, 0);
LCD_write_byte(0x80 | X, 0);
}
//---------------------------------------
//名称: 显示英文字符
//参数:c:显示的字符在font6x8表格中的位置
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void LCD_write_char(unsigned char c)
{
unsigned char line;
c-= 32;
for (line=0; line<6; line++)
LCD_write_byte(font6x8[c][line], 1);
}
//---------------------------------------
//名称: 英文字符串显示函数
//参数:*s:英文字符串指针
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void LCD_write_String(unsigned char X,unsigned char Y,char *s)
{
LCD_set_XY(X,Y);
while (*s)
{
LCD_write_char(*s);
s++;
}
}
//---------------------------------------
//名称: SPI初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20090325
//-----------------------------------------
void init_spi()
{
P1M0=0X40;
P1M1=0XA0;
SPCTL=0XD0;
SPSTAT=0XC0;
}
//---------------------------------------
//名称: 使用SPI接口写数据到LCD
//参数:dt:写入的数据 command: 1-数据/0-命令
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20090325
//-----------------------------------------
void LCD_write_byte(unsigned char dt, unsigned char command)
{
sce=0;
dc=command;
SPDAT=dt;
while(!(SPSTAT&0X80));
SPSTAT=0XC0;
dc=1;
sce=1;
sdin=1;
}
//---------------------------------------
//名称: 写一个汉字到LCD函数
//参数:x,y:写入汉字的地址 address: 写入汉字在han表格中的位置
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void disp16_16(unsigned char x,unsigned char y,unsigned char address)
{
unsigned char c;
LCD_set_XY(x*8, y);
for(c=0;c<16;c++)
{
LCD_write_byte(han[address*32+c],1);
}
LCD_set_XY(x*8, y+1);
for(c=16;c<32;c++)
{
LCD_write_byte(han[address*32+c],1);
}
}
//---------------------------------------
//名称: 写一个字符到LCD函数(8*16点阵)
//参数:x,y:写入字符的地址 c: 写入字符在shu表格中的位置
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void disp8_16(unsigned char x,unsigned char y,unsigned char c)
{
unsigned char i;
LCD_set_XY(x*8, y);
for(i=0; i<8;i++)
{
LCD_write_byte(shuzi[c*16+i],1);
}
LCD_set_XY(x*8, y+1);
for(i=8; i<16;i++)
{
LCD_write_byte(shuzi[c*16+i],1);
}
}
//---------------------------------------
//名称: 蜂鸣器驱动函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void beep_pro()
{
if(beep==0)
{
if(++beepcon>250) //每次响250个扫描周期后停止
{
beepcon=0;
beep=1;
}
}
else
beepcon=0;
}
//---------------------------------------
//名称: 串口数据发送函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void send232byte(unsigned char bytebuf)
{
TI=0;
SBUF=bytebuf;
while(!TI);
}
//---------------------------------------
//名称: 串口数据接收函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
bit WaitComm()
{
if(RI)
{
recebuf=SBUF; //接收到的数据放入缓冲区recebuf中
RI=0;
return 1; //有数据接收到,返回1
}
else
{
return 0; //无数据接收到,返回0
}
}
//---------------------------------------
//名称: 主函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111
//-----------------------------------------
void main()
{
unsigned char k;
init_spi();
res=0;
for(k=0;k<250;k++);
res=1; //LCD复位
LCD_init(); //初始化LCD模块
LCD_clear(); //清屏幕
disp16_16(0,0,0); //宁
disp16_16(2,0,1); //波
disp16_16(4,0,2); //单
disp16_16(6,0,3); //片
disp16_16(8,0,4); //机
disp16_16(1,2,5); //开
disp16_16(4,2,6); //发
disp16_16(7,2,7); //网
LCD_write_String(1,5,"www.nbdpj.com"); //www.nbdpj.com
back_led=0; //开背光
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0X50;
TR1=1;
AUXR=0;
clrbit=1; //置清屏标志位
while(1)
{
beep_pro();
if(WaitComm()==1) //如果有收到上位机数据
{
if(clrbit) //如果为第一次收到数据启动清屏操作
{
clrbit=0;
LCD_clear(); //清屏幕
}
send232byte(recebuf+1); //回复数据为接收数据+1
disp16_16(0,0,8); //哇
disp16_16(2,0,9); //赛
disp8_16(4,0,44); //!
disp16_16(5,0,10); //收
disp16_16(7,0,11); //到
disp16_16(0,2,12); //短
disp16_16(2,2,13); //信
disp8_16(4,2,47); //:
disp8_16(5,2,0); //0
disp8_16(6,2,33); //x
disp8_16(7,2,(recebuf>>4)&0x0f); //显示接收数据高位
disp8_16(8,2,recebuf&0x0f); //显示接收数据低位
disp16_16(0,4,14); //回
disp16_16(2,4,15); //复
disp8_16(4,4,47); //:
disp8_16(5,4,0); //0
disp8_16(6,4,33); //x
disp8_16(7,4,((recebuf+1)>>4)&0x0f); //显示回复数据高位
disp8_16(8,4,(recebuf+1)&0x0f); //显示回复数据低位
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -