⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p0902-usart.c

📁 单片机与电脑进行串口数据通讯试验
💻 C
📖 第 1 页 / 共 2 页
字号:

/*--  文字:  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 + -