|
#include <STC12C5A60S2.H>
#include <intrins.h>
sbit RS=P4^3;
sbit RW=P4^4;
sbit E=P4^5;
/*********************************************************************************************
函數(shù)名:毫秒級CPU延時函數(shù)
調(diào) 用:DELAY_MS (?);
參 數(shù):1~65535(參數(shù)不可為0)
返回值:無
結(jié) 果:占用CPU方式延時與參數(shù)數(shù)值相同的毫秒時間
備 注:應(yīng)用于1T單片機(jī)時i<600,應(yīng)用于12T單片機(jī)時i<125
/*********************************************************************************************/
void Delay1602 (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
//寫數(shù)據(jù)函數(shù)
void LCD1602_Write_data(unsigned char databuf)
{
RS=1;
RW=0;
P0=databuf;
E=1;
E=0;
}
//寫指令函數(shù)
void LCD1602_Write_com(unsigned char combuf)
{
RS=0;
RW=0;
P0=combuf;
E=1;
E=0;
}
//忙檢測函數(shù)
void Lcd1602_busy(void)
{
RS=0;
RW=1;
P0=0xFF; // 這個地方出現(xiàn)了問題,P0=0x00;
E=1;
while(P0^7==1); //P0^7==0;
E=0;
}
//寫指令函數(shù)帶忙檢測
void LCD1602_Write_com_busy(unsigned char combuf)
{
Lcd1602_busy();
RS=0;
RW=0;
P0=combuf;
E=1;
E=0;
}
//寫數(shù)據(jù)帶忙檢測函數(shù)
void LCD1602_Write_data_busy(unsigned char databuf)
{
Lcd1602_busy();
RS=1;
RW=0;
P0=databuf;
E=1;
E=0;
}
//初始化 l
void Lcd1602_init(void)
{
Delay1602(15);
LCD1602_Write_com(0x38);
Delay1602(5);
LCD1602_Write_com(0x38);
Delay1602(5);
LCD1602_Write_com(0x38);
LCD1602_Write_com_busy(0x38);
LCD1602_Write_com_busy(0x08);
LCD1602_Write_com_busy(0x01);
LCD1602_Write_com_busy(0x06);
LCD1602_Write_com_busy(0x0c);
}
//寫地址函數(shù)
void lcd1602_Write_address(unsigned char x,unsigned char y)
{
if(y==0)
LCD1602_Write_com_busy(0x80+x);
else
LCD1602_Write_com_busy(0xc0+x);
}
//顯示函數(shù)
void Lcd1602_Disp(unsigned char x,unsigned char y,unsigned char buf)
{
lcd1602_Write_address(x,y);
LCD1602_Write_data_busy(buf);
}
void main(void)
{
Lcd1602_init();
Lcd1602_Disp(0,1,'1');
Lcd1602_Disp(1,1,'2');
while(1)
{
}
} |
|