|
//主函數(shù)main.c
#include<reg51.h>
#include"lcd.h"
u8 Disp[]="i want you yes do a b c";
void Delay10ms(unsigned int c) ;
void main(void)
{
u8 i;
LcdInit();
//--寫第二行
LcdWriteCom(0xC0); //設(shè)置坐標(biāo)在第二行 想要在第二行顯示數(shù)據(jù),必須再次定位指針的位置,即使在lcd.c中進(jìn)行了指針定位
for(i=0; i<26; i++)
{
LcdWriteData(Disp[ i]);
}
LcdWriteCom(0x07); //設(shè)置每寫一次整屏右移
while(1)
{
LcdWriteCom(0xC0); //設(shè)置坐標(biāo)在第二行
for(i=0; i<26; i++)
{
LcdWriteData(Disp[ i]);
Delay10ms(100);
}
}
}
void Delay10ms(unsigned int c) //誤差 0us
{
unsigned char a, b;
//--c已經(jīng)在傳遞過來的時(shí)候已經(jīng)賦值了,所以在for語句第一句就不用賦值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
//lcd.c
#include"lcd.h"
void Lcd1602_Delay1ms(u16 c)
{
u8 a, b;
for(; c > 0; c--)
{
for(b = 199; b > 0; b--)
for(a = 1; a > 0; a--);
}
}
#ifndef LCD1602_4PINS
void LcdInit()
{
LcdWriteCom(0x38); //開顯示,顯示一行
LcdWriteCom(0x0c); //開顯示不顯示指針
LcdWriteCom(0x06); //寫一個(gè)指針加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn)
// LcdWriteCom(0x80+0x40); //將指針放在第二行首位
}
#else
void LcdInit()
{
LcdWriteCom(0x32); //將8位總線轉(zhuǎn)為4位總線
LcdWriteCom(0x2c); //在4位線下的初始化,兩行
LcdWriteCom(0x0C); //開顯示不顯示指針
LcdWriteCom(0x06); //寫一個(gè)指針加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn)
// LcdWriteCom(0x80+0x40); //將指針放在第二行首位
}
#endif
#ifndef LCD1602_4PINS
void LcdWriteCom(u8 dat)
{
LCD1602_E = 0; //使能
LCD1602_RS = 0; //選擇發(fā)送命令
LCD1602_RW = 0; //選擇寫入
LCD1602_DATAPINS = dat; //放入命令
Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
}
#else
void LcdWriteCom(u8 dat)
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 0; //選擇寫入命令
LCD1602_RW = 0; //選擇寫入
LCD1602_DATAPINS = dat; //傳送高四位
Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //傳送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
}
#endif // LCD1602_4PINS
#ifndef LCD1602_4PINS
void LcdWriteData(u8 dat)
{
LCD1602_E = 0; //使能
LCD1602_RS = 1; //選擇輸入數(shù)據(jù)
LCD1602_RW = 0; //選擇寫入
LCD1602_DATAPINS = dat; //寫入數(shù)據(jù)
Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
}
#else
void LcdWriteData(u8 dat)
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //選擇寫入數(shù)據(jù)
LCD1602_RW = 0; //選擇寫入
LCD1602_DATAPINS = dat; //傳送高四位
Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //傳送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
}
#endif // LCD1602_4PINS
//lcd.h
#ifndef _lcd_H
#define _lcd_H
#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int
//#define LCD1602_4PINS
#define LCD1602_DATAPINS P0
sbit LCD1602_E =P2^7;
sbit LCD1602_RS=P2^6;
sbit LCD1602_RW=P2^5;
void LcdWriteData(u8 dat);
void LcdWriteCom(u8 dat);
void LcdInit();
#endif |
評(píng)分
-
查看全部評(píng)分
|