2024年2月16日发(作者:)
//功能:LCD液晶显示程序,采纳8位数据接口
#include
#include
// 概念操纵信号端口
#define E 2
#define RW 1
#define RS 0
//sbit RS=0xB0;
//sbit RW=0xB1;
//sbit E= 0xB2;
// 声明挪用函数
void lcd_w_cmd(unsigned char com); //写命令字函数
void lcd_w_dat(unsigned char dat); //写数据函数
unsigned char lcd_r_start();
void int1();
//读状态函数
//P3.0 sbit RS=P3^0;
//P3.1
//P3.2
//库函数头文件,代码中引用了_nop()函数
//LCD初始化函数
//可控延时函数 void delay(unsigned char t);
void delay1(); //软件实现延时函数,5个机械周期
void gong(void);
void main() //主函数
{
unsigned char lcd[]="yin hai chang";
unsigned char i;
PORTC=0xff;
DDRC=0xff;
PORTB=0xff;
DDRB=0xff;
int1();
delay(255);
lcd_w_cmd(0x80);
delay(255);
for(i=0;i<13;i++)
{
lcd_w_dat(lcd[i]);
delay(200);
}
gong();
lcd_w_cmd(0x8f);
lcd_w_dat(0x00);
while(1);
}
//函数名:delay
// 送全1到P0口
// 送全1到P0口
// 初始化LCD
// 设置显示位置 // 显示字符串
// 原地踏步
//函数功能:采纳软件实现可控延时
//形式参数:延不时刻操纵参数存入变量t中
//返回值:无
void delay(unsigned char t)
{
unsigned char j,i;
for(i=0;i for(j=0;j<50;j++); } //函数名:delay1 //函数功能:采纳软件实现延时,5个机械周期 //形式参数:无 //返回值:无 void delay1() { _NOP(); _NOP(); _NOP(); } //函数名:int1 //函数功能:lcd初始化 //形式参数:无 //返回值:无 void int1() { lcd_w_cmd(0x3c); // 设置工作方式 lcd_w_cmd(0x0f); // 设置光标 lcd_w_cmd(0x01); // 清屏 lcd_w_cmd(0x06); // 设置输入方式 lcd_w_cmd(0x80); // 设置初始显示位置 } //函数名:lcd_r_start //函数功能:读状态字 //形式参数:无 //返回值:返回状态字,最高位D7=0,LCD操纵器空闲;D7=1,LCD操纵器忙 unsigned char lcd_r_start() { unsigned char s; PORTB=PINB|(1< delay1(); PORTB=PINB&(~(1< delay1(); PORTB=PINB|(1< //RW=1,RS=0,读LCD状态 delay1(); s=PINC; delay1(); PORTB=PINB&(~(1< delay1(); // RW=0; delay1(); return(s); } //函数名:lcd_w_cmd //函数功能:写命令字 //形式参数:命令字已存入com单元中 //返回值:无 void lcd_w_cmd(unsigned char com) { unsigned char i; do { // 查LCD忙操作 //返回读取的LCD状态字 //从LCD的数据口读状态 i=lcd_r_start(); // 挪用读状态字函数 i=i&0x80; delay(2); } while(i!=0); // LCD忙,继续查询,不然退出循环 // 与操作屏蔽掉低7位 PORTB=PINB&(~(1< delay1(); PORTB=PINB&(~(1< delay1(); PORTB=PINB|(1< delay1(); PORTC=com; delay1(); PORTB=PINB&(~(1< delay1(); // RW=1; delay(255); } //函数名:lcd_w_dat //函数功能:写数据 //形式参数:数据已存入dat单元中 //返回值:无 void lcd_w_dat(unsigned char dat) { unsigned char i; do { // 查忙操作 //将com中的命令字写入LCD数据口 //E端时序 // RW=0,RS=0,写LCD命令字 i=lcd_r_start(); // 挪用读状态字函数 i=i&0x80; // 与操作屏蔽掉低7位 delay(2); } while(i!=0); // LCD忙,继续查询,不然退出循环 PORTB=PINB&(~(1< delay1(); PORTB=PINB|(1< delay1(); PORTB=PINB|(1< delay1(); PORTC=dat; delay1(); PORTB=PINB&(~(1< delay1(); // RW=1; delay(255); } void gong(void) {lcd_w_cmd(0x40); lcd_w_dat(0x1f); lcd_w_cmd(0x41); lcd_w_dat(0x1f); lcd_w_cmd(0x42); // 将dat中的显示数据写入LCD数据口 // E端时序 // RW=1,RS=0,写数据 lcd_w_dat(0x04); lcd_w_cmd(0x43); lcd_w_dat(0x04); lcd_w_cmd(0x44); lcd_w_dat(0x04); lcd_w_cmd(0x45); lcd_w_dat(0x1f); lcd_w_cmd(0x46); lcd_w_dat(0x1f); lcd_w_cmd(0x47); lcd_w_dat(0x00); }
发布者:admin,转转请注明出处:http://www.yc00.com/web/1708062365a1538076.html
评论列表(0条)