本帖最后由 515229319 于 2018-7-24 10:52 編輯
實現1602基本動態顯示:
(附詳細解析)
實現
#include<reg52.h> //52系列單片機頭文件
#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; //液晶數據命令選擇端
void delay(uint z) //延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //子函數
{
lcden=0; //選擇寫命令模式
lcdrw=0;
P0=com; //將要寫的命令字送到數據總線上
delay(10); //稍做延時以待數據穩定
lcden=1; //使能端給一高脈沖,因為初始化函數中已經將lcden置位0
delay(10); //稍做延時
lcden=0; //將使能端置0以完成高脈沖
}
void write_date(uchar date)
{
lcden=0;
lcdrs=1; //選擇寫命令模式
lcdrw=0;
P0=date; //將要寫的命令字送到數據總線上
delay(10); //稍做延時以待數據穩定
lcden=1; //使能端給一高脈沖,因為初始化函數中已經將lcden置位0
delay(10); //稍做延時
lcden=0; //將使能端置0以完成高脈沖
}
void init()
{
lcden=0;
lcdrw=0;
write_com(0x38); //00111000 設置16*2顯示,5*7點陣,8位數據接口
write_com(0x0c); //00001100 設置開顯示,不顯示光標 改為0x0f則帶閃爍光標(00001111)
write_com(0x06); //00000110 寫一個字符后地址指針加1
write_com(0x01); //00000001 顯示清0,數據指針清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); //控制進入速度
}
while(1);
}
|