单片机 LCD1602 液晶

 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图
                                图二
3`LCD1602主要技术参数:
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
4`引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表
继续阅读
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据

单片机 矩阵键盘扫描 C语言

//矩阵键盘扫描
void Keys_Scan()
{
	uchar Tmp;
	P1=0x0f;	//高4位置0,放入4行
	DelayMS(1);
	Tmp=P1^0x0f;//按键后0f变成0000XXXX,X中一个为0,3个仍为1,通过异或把3个1变为0,唯一的0变为1
	switch(Tmp)	//判断按键发生于0~3列的哪一列
	{
		case 1:	KeyNo=0;break;
		case 2:	KeyNo=1;break;
		case 4: KeyNo=2;break;
		case 8:	KeyNo=3;break;
		default:KeyNo=16;	//无键按下	
	}
	P1=0xf0;   //低4位置0,放入4列
	DelayMS(1);
	Tmp=P1>>4^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值
	switch(Tmp)	//对0~3行分别附加起始值0,4,8,12
	{
		case 1:	KeyNo+=0;break;
		case 2:	KeyNo+=4;break;
		case 4:	KeyNo+=8;break;
		case 8:	KeyNo+=12;
	}
}

单片机 串口通信 长字符串

#include <reg52.h>
/*数据定义区*/
#define uchar	unsigned char
#define uint	unsigned int
uchar		flag, a, i;
uchar code	table[]		= "I get ";
unsigned char	receive[20]	= { 0 }; /* 接收缓存 长度20 */

/*程序定义区*/
void init()
{
	TMOD	= 0x20;
	TH1	= 0xfd;
	TL1	= 0xfd;
	TR1	= 1;
	SCON	= 0x50;
	EA	= 1;
	ES	= 1;
}


void main( void )
{
	init();
	while ( 1 )
	{
		if ( flag == 1 )
		{
			ES = 0;
			for ( i = 0; i < 6; i++ ) /* 注意:若把i<6改成i<7,现象出错; */
			{
				SBUF = table[i];
				while ( !TI )
					;
				TI = 0;
			}
			i = 0;
			do /* 注意:若把i<6改成i<7,现象出错; */
			{
				SBUF = receive[i];
				while ( !TI )
					;
				TI = 0;
				i++;
			}
			while ( receive[i] != 0 );
			ES	= 1;
			flag	= 0;
			for ( i = 0; i < 19; i++ )//清空接受缓存
			{
				receive[i] = 0x00;
			}
		}
	}
}


void ser() interrupt 4
{
	static unsigned char count;
	RI = 0;
	if ( SBUF == 0x2e )//判断数据头
	{
		count = 1;
	}else if ( SBUF == 0x2d )//判断数据尾
	{
		count	= 0;
		flag	= 1;
		ES	= 0;
	}else  {
		receive[count - 1] = SBUF;//接收数据到数组receive
		count++;
	}
}


Proteus串口仿真7.0