?? lcd.c
字號:
#include "config.h"
#define PWR 1<<16
#define LCD_PSB 1<<0
#define LCD_RS 1<<1
#define LCD_RW 1<<2
#define LCDE 1<<3
#define D0 1<<4
#define D1 1<<5
#define D2 1<<6
#define D3 1<<7
#define D4 1<<8
#define D5 1<<9
#define D6 1<<10
#define D7 1<<11
#define HBIT 0x30
#define LBIT 0x20
uint8 sel;
uint8 com;
uint8 LCDRAM[32][32];
void LCDW_COM(uint8 com)
{
uint32 i;
IO0PIN = (IO0PIN&0xfffffff0)|0x01; //PSB=1并口 RS=0 RW=0寫入命令
IO0SET = LCDE; //將E信號置位
for(i=0;i<200;i++);
IO0PIN = (IO0PIN&0xfffff00f)|(com<<4); //命令發送
for(i=0;i<200;i++);
IO0CLR = LCDE; //將E信號歸零
for(i=0;i<200;i++);
}
void LCD_INT(uint8 sel)
{
uint32 i;
switch(sel)
{
case 0: //4bit 并口模式,基本指令集
IO0SET = LCD_RS;
IO0CLR = LCD_RW;
IO0SET = LCD_PSB;
LCDW_COM(LBIT);
LCDW_COM(0x08); //清除
LCDW_COM(0x0c); //顯示打開,光標關,反白關
LCDW_COM(0x01); //清屏,DDRAM地址計數器歸零
for(i=0;i<500;i+=1);
LCDW_COM(0x02); //地址歸位
LCDW_COM(LBIT);
break;
case 1:
IO0SET = LCD_RS;
IO0CLR = LCD_RW;
IO0SET = LCD_PSB;
LCDW_COM(HBIT);
LCDW_COM(0x08); //清除
LCDW_COM(0x0c); //顯示打開,光標關,反白關
LCDW_COM(0x01); //清屏,DDRAM地址計數器歸零
for(i=0;i<500;i+=1);
LCDW_COM(0x02); //地址歸位
LCDW_COM(HBIT); //8bit 并口模式
break;
case 2: //ser 串口模式
break;
default:
break;
}
}
void LCDW_DAT(uint8 dat)
{
uint32 i;
IO0SET = LCD_RS;
IO0SET = LCD_PSB;
for(i=0;i<200;i++);
IO0CLR = LCD_RW;
for(i=0;i<200;i++);
IO0PIN = (IO0PIN&0xfffff00f)|(dat<<4);
for(i=0;i<200;i++);
IO0SET = LCDE; //將E信號置位
for(i=0;i<200;i++);
IO0CLR = LCDE; //將E信號清零
for(i=0;i<200;i++);
}
//清屏
void PicClear(void)
{
uint8 i,k;
LCDW_COM(0x34);
for (i=0;i<255;i++);
for (i=0;i<255;i++);
for(i=0;i<16;i+=1)
{
for(k=0;k<32;k+=1)
{
LCDW_COM(0x80+k); LCDW_COM(0x80+i);
LCDW_DAT(0x00);
LCDW_DAT(0x00);
}
} //圖形清屏
for(i=0;i<32;i+=1)
{
for(k=0;k<32;k+=1)
{
LCDRAM[i][k] = 0;
}
}
LCDW_COM(0x30);
}
//直接顯示數據(全寬)
void LCDGB5(uint8 add,uint32 data)
{
LCDW_COM(add);
LCDW_DAT((data>>8)&0xff);
LCDW_DAT(data&0xff);
}
//顯示data變量的值(全寬)
void LCD_Data(uint8 add,uint32 data)
{
uint8 display[]={0};
int i,j,c=0xA3B0;
for(i=0;i<100;i++)
{
display[i]=data%10;
data=data/10;
if(data==0)
{
display[i+1]='\0';
break;
}
}
//把數據從變量中提取出來,放入display數組中
for(j=i;i>=0;i--)
{
LCDGB5(add+(j-i),c+display[i]);
}
}
void PicClear1(uint8 block)
{
uint8 i,k;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
i=block;
for(k=0;k<32;k+=1)
{
LCDW_COM(0x80+k); LCDW_COM(0x80+i);
LCDW_DAT(0x00);
LCDW_DAT(0x00);
}
//圖形清屏
for(i=0;i<32;i+=1)
{
for(k=0;k<32;k+=1)
{
LCDRAM[i][k]= 0;
}
}
}
//直接顯示數據(半寬字符)
void LCD_ASCII(uint8 add,uint32 data)
{
LCDW_COM(add);
LCDW_DAT(data);
}
//顯示data變量的值(半寬)
void LCD_ASCII_Data(uint8 add,uint32 data)
{
uint8 display[]={0};
int i,j,c=0x30;
for(i=0;i<100;i++)
{
//把數據從變量中提取出來,放入display數組中
display[i]=data%10;
data=data/10;
if(data==0)
{
display[i+1]='\0';
break;
}
}
for(j=i;i>=0;i--)
{
if(i==j)
{
LCDW_COM(add);
LCDW_DAT(display[i]+c);
}
else{LCDW_DAT(display[i]+c);}
}
}
//顯示小數data變量的值(半寬)
//只能顯示0-10的小數,小數點后3位
void LCD_ASCII_float(uint8 add,double data)
{
uint8 display[]={0};
int i,j,c=0x30,tmpdata;
tmpdata=data*1000;
for(i=0;i<100;i++)
{
//把數據從變量中提取出來,放入display數組中
display[i]=tmpdata%10;
tmpdata=tmpdata/10;
if(tmpdata==0)
{
display[i+1]='\0';
break;
}
}
if(data>1)
{
for(j=i+1;i>=0;i--)
{
if(j==i+1)
{
LCDW_COM(add);
LCDW_DAT(display[i]+c);
}
else if(j==i+2)
{
LCDW_DAT(0x2e);
LCDW_DAT(display[i]+c);
}
else{LCDW_DAT(display[i]+c);}
}
}
else
{
for(j=i+1;i>=0;i--)
{
if(j==i+1)
{
LCDW_COM(add);
LCDW_DAT(0+c);
LCDW_DAT(0x2e);
LCDW_DAT(display[i]+c);
}
else if(j==i+2)
{
LCDW_DAT(display[i]+c);
}
else{LCDW_DAT(display[i]+c);}
}
}
}
int main (void)
{// add user source code
IO0SET = PWR;
LCD_INT(1);
while(1)
{
LCD_ASCII_Data(0x80,9);
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -