|
|
本帖最后由 515229319 于 2018-7-24 10:52 編輯
實(shí)現(xiàn)1602基本動(dòng)態(tài)顯示:
(附詳細(xì)解析)
實(shí)現(xiàn)
#include<reg52.h> //52系列單片機(jī)頭文件
#define uchar unsigned char //宏定義
#define uint unsigned int //宏定義
uchar code table[]="51 dan pian ji";
uchar code table1[]="conscientious";
uchar num;
sbit lcden=P3^5; //液晶使能端
sbit lcdrw=P3^6;
sbit lcdrs=P3^7; //液晶數(shù)據(jù)命令選擇端
void delay(uint z) //延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //子函數(shù)
{
lcden=0; //選擇寫命令模式
lcdrw=0;
P0=com; //將要寫的命令字送到數(shù)據(jù)總線上
delay(10); //稍做延時(shí)以待數(shù)據(jù)穩(wěn)定
lcden=1; //使能端給一高脈沖,因?yàn)槌跏蓟瘮?shù)中已經(jīng)將lcden置位0
delay(10); //稍做延時(shí)
lcden=0; //將使能端置0以完成高脈沖
}
void write_date(uchar date)
{
lcden=0;
lcdrs=1; //選擇寫命令模式
lcdrw=0;
P0=date; //將要寫的命令字送到數(shù)據(jù)總線上
delay(10); //稍做延時(shí)以待數(shù)據(jù)穩(wěn)定
lcden=1; //使能端給一高脈沖,因?yàn)槌跏蓟瘮?shù)中已經(jīng)將lcden置位0
delay(10); //稍做延時(shí)
lcden=0; //將使能端置0以完成高脈沖
}
void init()
{
lcden=0;
lcdrw=0;
write_com(0x38); //00111000 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
write_com(0x0c); //00001100 設(shè)置開顯示,不顯示光標(biāo) 改為0x0f則帶閃爍光標(biāo)(00001111)
write_com(0x06); //00000110 寫一個(gè)字符后地址指針加1
write_com(0x01); //00000001 顯示清0,數(shù)據(jù)指針清0
}
void main()
{
init();
write_com(0x80+0x10);
for(num=0;num<14;num++)
{
write_date(table[num]);
delay(10);
}
write_com(0x80+0x50);
for(num=0;num<13;num++)
{
write_date(table1[num]);
delay(10);
}
for(num=0;num<16;num++)
{
write_com(0x18); //左移指令
delay(200); //控制進(jìn)入速度
}
while(1);
}
|
|