|
用的N76E003的 P0口接LCD1602模塊的DB0~DB7,P1.2接RS,P1.4接RW ,P1.3接EN;程序抄的大佬的改了下 不知道為什么LCD沒有一點(diǎn)顯示 求大佬們幫看下 程序如下
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"
#define uint unsigned int //預(yù)定義一下
#define uchar unsigned char
sbit rs=P1^2; //1602的數(shù)據(jù)/指令選擇控制線
sbit rw=P1^4; //1602的讀寫控制線
sbit en=P1^3; //1602的使能控制線
/*P2口接1602的D0~D7,注意不要接錯了順序,我以前可在這上面吃過虧~*/
uchar code table[]="LCD1602 check ok"; //要顯示的內(nèi)容1放入數(shù)組tablel
uchar code table1[]="study up"; //要顯示的內(nèi)容2放入數(shù)組table1
void GPIO_INIT(void)
{
P00_PushPull_Mode;
P01_PushPull_Mode;
P02_PushPull_Mode;
P03_PushPull_Mode;
P04_PushPull_Mode;
P05_PushPull_Mode;
P06_PushPull_Mode;
P07_PushPull_Mode;
P12_PushPull_Mode;
P13_PushPull_Mode;
P14_PushPull_Mode;
}
void delay(uint n) //延時函數(shù)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com) //1602寫命令函數(shù)
{
rs=0; //選擇指令寄存器
rw=0; //選擇寫
P0=com; //把命令字送入P2
delay(10); //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)
en=1; //使能線電平變化,命令送入1602的8位數(shù)據(jù)口
en=0;
}
void lcd_wdat(uchar dat) //1602寫數(shù)據(jù)函數(shù)
{
rs=1; //選擇數(shù)據(jù)寄存器
rw=0; //選擇寫
P0=dat; //把要顯示的數(shù)據(jù)送入P2
delay(10); //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)
en=1; //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
en=0;
}
void lcd_init() //1602初始化函數(shù)
{
lcd_wcom(0x38); //8位數(shù)據(jù),雙列,5*7字形
lcd_wcom(0x0E); //開啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍
lcd_wcom(0x06); //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位
lcd_wcom(0x01); //清屏
}
void main() //主函數(shù)
{
uchar n,m=0;
GPIO_INIT();
lcd_init(); //液晶初始化
lcd_wcom(0x80); //顯示地址設(shè)為80H(即00H,)上排第一位
for(m=0;m<16;m++) //將table[]中的數(shù)據(jù)依次寫入1602顯示
{
lcd_wdat(table[m]);
delay(400);
}
lcd_wcom(0x80+0x44); //重新設(shè)定顯示地址為0xc4,即下排第5位
for(n=0;n<8;n++) //將table1[]中的數(shù)據(jù)依次寫入1602顯示
{
lcd_wdat(table1[n]);
delay(400);
}
while(1); //動態(tài)停機(jī)
}
|
|