51單片機(jī)學(xué)習(xí)日記15系列為增強(qiáng)型1T 51內(nèi)核的單片機(jī),驅(qū)動(dòng)LCD1602時(shí)需要增加適當(dāng)延時(shí),而且只要延時(shí)控制的得當(dāng),可以省去判忙步驟,下面是簡(jiǎn)單的例程:
(使用的是STC15F2K60S2)
QQ圖片20190310155027.png (11.82 KB, 下載次數(shù): 40)
下載附件
2019-3-10 15:50 上傳
這是引腳定義;下面是LCD頭文件:
void LCD_WriteCmd(unsigned char a) //寫(xiě)命令
{
LCD = a;
RS = 0;
RW = 0;
ENLCD = 1;Delayus(50); //延時(shí)50us
ENLCD = 0;Delayus(50);
}
void LCD_ShowStr(unsigned char x,unsigned y ,unsigned char *str) //x:0~15 y:0~1
{
if(y==0)
LCD_WriteCmd((0x00+x)|0x80); //設(shè)置坐標(biāo)
else
LCD_WriteCmd((0x40+x)|0x80);
while(*str != '\0') //寫(xiě)數(shù)據(jù)
{
LCD = *str++;
RS = 1;
RW = 0;
ENLCD = 1;Delayus(50); //延時(shí)50US
ENLCD = 0;Delayus(50);
}
}
void LCD_Init() //數(shù)據(jù)手冊(cè)的初始化命令
{
LCD_WriteCmd(0x38);
Delayms(5); //延時(shí)5MS
LCD_WriteCmd(0x0C);
Delayms(5);
LCD_WriteCmd(0x06);
Delayms(5);
LCD_WriteCmd(0x01);
Delayms(5);
}
代碼比較簡(jiǎn)單,下面給出延時(shí)函數(shù)和主函數(shù):
void Delayus(unsigned int a) //@11.0592MHz
{ do{
_nop_();
_nop_();
_nop_();
}while(--a);
}
void Delayms(unsigned int a) //@11.0592MHz
{unsigned char i, j;
do
{
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}while(--a);
}
主函數(shù):
#include<LCD_1602.h>
void main()
{
LCD_Init(); //初始化
LCD_ShowStr(0,0,"Happy Every Day"); //在第0行第0列顯示Happy Every Day
while(1);
}
下面是實(shí)物圖
IMG_20190310_155925.jpg (4.52 MB, 下載次數(shù): 38)
下載附件
2019-3-10 16:00 上傳
|