📄 l5-7.c
字号:
/**********************************************************************
程序名称:L5-7.c
程序功能:用16×2点阵字符型LCD显示键盘输入的字符
程序作者:张三
创建时间:2008-3-28
**********************************************************************/
#include <reg51.h>
#define unchar unsigned char
#define unint unsigned int
sbit RS = P3^0; // 定义LCD的控制信号线
sbit RW = P3^1;
sbit E = P3^4;
unchar ch, key; // ch为显示数据,key为键值
void delayXms( unint x ); // 函数声明
void lcd_init( void );
void write_ir( void );
void write_dr1( unchar ch );
/**********************************************************************
函数名称:main( void )
函数功能:主函数,根据按键在指定的位置显示指定的字符
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void main( void )
{
lcd_init( ); // LCD初始化
while( 1 ){
key = P3&0xe0;
switch( key ){
case 0xc0: ch = 'A';
P1 = 0x80; // 在第1行起始地址显示A
write_ir( );
write_dr1( ch );
break;
case 0xa0: ch = 'B';
P1 = 0x80; // 在第1行起始地址显示B
write_ir( );
write_dr1( ch );
break;
case 0x60: ch = 'C';
P1 = 0x80; // 在第1行起始地址显示C
write_ir( );
write_dr1( ch );
break;
default: P1 = 0x81; // 光标最后停留在LCD 的位置
write_ir( );
}
}
}
/**********************************************************************
函数名称:delayXms( unint x )
函数功能:延时xms,振荡器频率为12MHz
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void delayXms( unint x )
{
unint y,z;
for( ; x>0; x-- )
for( y=4; y>0; y-- )
for( z=250; z>0; z--);
}
/**********************************************************************
函数名称:lcd_init( void )
函数功能:LCD初始化
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void lcd_init( void )
{
P1 = 0x01; // 清屏指令
write_ir( );
P1 = 0x38; // 功能设定指令:8位,2行,5×7点矩阵
write_ir( );
P1 = 0x0f; // 开显示指令:显示屏ON,光标ON,闪烁ON
write_ir( );
P1 = 0x06; // 设置字符/光标移动模式:光标右移,整屏显示不移动
write_ir( );
}
/**********************************************************************
函数名称:write_ir( void )
函数功能:写指令到LCD指令寄存器
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void write_ir( void )
{
RS = 0; // 选择LCD指令寄存器
RW = 0; // 执行写入操作
E = 0; // 禁用LCD
delayXms( 30 );
E = 1; // 启动LCD
}
/**********************************************************************
函数名称:write_dr1( unchar x )
函数功能:将单个数据x写到LCD数据寄存器
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void write_dr1( unchar x )
{
P1 = x; // 送字符x
RS = 1; // 选择LCD数据寄存器
RW = 0; // 执行写入操作
E = 0; // 禁用LCD
delayXms( 30 );
E = 1; // 启动LCD
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -