1602自定義字符顯示攝氏度符號
1.當(dāng)使能端E由1變?yōu)?時,執(zhí)行寫指令,數(shù)據(jù)被寫入。
例如,欲寫入數(shù)據(jù)i到DDRAM:
void WDR(uchar i)
{
CheckBusy();//檢忙
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
Delay();
LCD_DATA=i;//數(shù)據(jù)輸出到定義端口
Delay();
LCD_EN=1;
Delay();
LCD_EN=0;//這一步才開始寫入到LCD
Delay();
}
2.CGRAM
1602能存儲8個自定義字符,這8個自定義字符存儲空間的首地址分別是:0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。
以0x40來說,它的存儲空間如圖所示:
如果使用5*7字符的話,那么最左3位和最后一行的數(shù)據(jù)實際上是沒用的,通常置0。如果要自定義一個℃符號,那么先填框,如圖(紅1白0):
這樣我們就得到每個地址需要寫入的數(shù)據(jù):
地址:數(shù)據(jù)
0x40:0x16
0x41:0x09
0x42:0x08
其他類推。將這8個數(shù)據(jù)寫入到對應(yīng)地址即可。
使用時,先確定顯示的位置,例如0X80,然后向DDRAM寫入自定義字符的使用代碼。0X40-0X78對應(yīng)為0X00-0X07。
本例中,先寫入指令寄存器0X80確定顯示位置為第一行第一個,然后寫入數(shù)據(jù)寄存器0X00,這樣就會在第一行第一個位置顯示出℃符號。
以下是源程序如果網(wǎng)頁格式導(dǎo)致部分字符丟失請下載c程序源文件:http://www.51hei.com/f/avr1602c.rar
#include
#include
#include
#define u8 uchar unsigned char
#define u16 uchar unsigned int
#define uchar unsigned char
#define uint unsigned int
#define u16 uchar unsigned int
#define uchar unsigned char
#define uint unsigned int
uchar zi[]={0x16,0x09,0x08,0x08,0x08,0x09,0x06,0x00}; //自定義字符攝氏度
#include"1602.h"
#include"18b20.h"
void port_init()
{
PORTA=0xff;
DDRA=0xff;
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0x00;
}
void setzi() //把設(shè)定字存入CGRAM
{
uchar i;
writecmd(0x40); //設(shè)置第一個字的起始地址
for(i=0;i<8;i++)
{
writedata(zi[i]);
}
}
{
uchar i;
writecmd(0x40); //設(shè)置第一個字的起始地址
for(i=0;i<8;i++)
{
writedata(zi[i]);
}
}
void show_temp(uint k)
{
displayonechar(1,1,(k/100)+48);
displayonechar(2,1,(k%100/10)+48);
displayonechar(3,1,.);
displayonechar(4,1,(k%10)+48);
}
void main()
{
uint TT; //顯示的溫度值
port_init();
delay(1000);
init1602();
displaychar(0,0,"Set zi Test");
setzi();
displayonechar(5,1,0x00); //0x00表示 0x40地址的值
while(1)
{
TT=read_temper();
show_temp(TT);
}
{
uint TT; //顯示的溫度值
port_init();
delay(1000);
init1602();
displaychar(0,0,"Set zi Test");
setzi();
displayonechar(5,1,0x00); //0x00表示 0x40地址的值
while(1)
{
TT=read_temper();
show_temp(TT);
}
}
//---------------1602.h----------------
#define RS PORTB_Bit0
#define RW PORTB_Bit1
#define EN PORTB_Bit2
#define DATA PORTA
#define busy 0x80
#define RW PORTB_Bit1
#define EN PORTB_Bit2
#define DATA PORTA
#define busy 0x80
void delay(uint k)
{
uint i,j;
for(i=0;i for(j=0;j<1140;j++);
}
{
uint i,j;
for(i=0;i
}
void wait()
{
uchar val;
DATA=0xff;
RS=0;
RW=1;
__no_operation();
__no_operation();
EN=1;
__no_operation();
__no_operation();
DDRA=0x00;
val=PINA;
while(val&busy)
{
val=PINA;
}
EN=0;
DDRA=0xff;
}
關(guān)鍵詞:
1602自定義字符攝氏度符
評論