|
#include"LCD1602.H"
#define u16 unsigned int
#define LCD_DelayNop() NOP(20)
//檢測忙函數
void Check_Busy(void)
{
u16 i;
for(i=0;i<5000;i++) {if(!LCD_B7) break;} //檢測忙
}
//初始化寫命令,不檢測忙
void Cmd_Send_Init()
{
unsigned char cmd;
LCD_RW=0;
LCD_BusData(cmd);
LCD_DelayNop();
LCD_ENA=1;
LCD_DelayNop();
LCD_ENA=0;
LCD_BusData(0xff);
}
//寫命令,檢測忙
void Write_CMD(unsigned char cmd)
{
LCD_RS =0;
LCD_RW=1;
LCD_BusData(0xff);
LCD_DelayNop();
LCD_ENA=1;
Check_Busy();
LCD_ENA=0;
LCD_RW=0;
LCD_BusData(cmd);
LCD_DelayNop();
LCD_ENA=1;
LCD_DelayNop();
LCD_ENA=0;
LCD_BusData(0xff);
}
//寫顯示數據,檢測忙
void Write_DIS_Data(unsigned char dat)
{
LCD_RS=0;
LCD_RW=1;
LCD_BusData(0xff);
LCD_DelayNop();
LCD_ENA=1;
Check_Busy();
LCD_ENA=0;
LCD_RW=0;
LCD_RS =1;
LCD_BusData(dat);
LCD_DelayNop();
LCD_ENA=1;
LCD_DelayNop();
LCD_ENA=0;
LCD_BusData(0xff);
}
//LCD初始化
void LCD_Init(void)
{
LCD_ENA=0;
LCD_RS =0;
LCD_RW=0;
delay_Nms(100);
Cmd_Send_Init(C_BIT8); //設置數據8位
delay_Nms(10);
Write_CMD(C_L2DOT7); //兩行5*7
delay_Nms(6);
Write_CMD(C_CLEAR); //清屏
Write_CMD(C_CUR_R); //光標右移
Write_CMD(C_ON); //打開LCD
Clear_Line(2);Clear_Line(1);
}
//清除一行
void Clear_Line(unsigned char row)
{
unsigned char i;
Write_CMD(((row&1)<<6)|0x80);
for(i=0;i<LineLength;i++) Write_DIS_Data('');
}
//指定行、列和字符,寫一個字符
void Write_char(unsigned char row,unsigned char column,unsigned char dat)
{
Write_CMD((((row & 1)<<6)+column)|0x80);
Write_DIS_Data(dat);
}
//寫一個字符串,指定行、列和字符串首地址
void Put_String(unsigned char row,unsigned char column,unsigned char *puts)
{
Write_CMD((((row & 1)<<6)+column)|0x80);
for(; *puts!=0; puts++) //遇到停止符0結束
{
Write_DIS_Data(*puts);
if(++column>=LineLength) break;
}
}
// 寫數字
void Write_Num(unsigned char row,unsigned char column,long int dat)
{
unsigned char num[8],i=0,j;
while(dat){
num[ i]=dat%10+'0';
dat=dat/10;
i++;
}
j=0;
if(i==0){
Write_Char(row,column+i-j,'');
Write_Char(row,column,'0');
}
i--;
while(j<=i){
Write_Char(row,column+i-j,'');
Write_Char(row,column+i-j,num[j]);
j++;
}
}
//按指定位置顯示一串字符
void DisplayString(unsigned char X,unsigned char Y,unsigned char code*dat)
{
unsigned char ListLength,X2;
ListLength=0;
X2=X;
if(Y<1) Y=1; //限制X不大于16
if(Y>4) Y=4; //Y小于4
X &=0x0F;
switch(Y)
{
case 1:X2|=0X80; break; //根據行數來選擇相應的地址
case 2:X2|=0X90; break;
case 3:X2|=0X88; break;
case 4:X2|=0X98; break;
}
Write_Cmd(X2,1); //發送地址碼
while(dat[ListLength]>=0x20) //字符串結束
{
if(X<=0x0F)
{
Write_Data(dat[ListLength]);
ListLength++;
X++;
}
}
}
錯誤:compiling LCD1602.C...
..\SRC\LCD1602.C(18): error C236: '_Cmd_Send_Init': different length of parameter lists
..\SRC\LCD1602.C - 1 Error(s), 0 Warning(s).
|
-
捕獲.PNG
(64.73 KB, 下載次數: 14)
下載附件
2020-2-28 20:03 上傳
|