1602自定義字符顯示攝氏度符號(hào)
1.當(dāng)使能端E由1變?yōu)?時(shí),執(zhí)行寫(xiě)指令,數(shù)據(jù)被寫(xiě)入。
例如,欲寫(xiě)入數(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;//這一步才開(kāi)始寫(xiě)入到LCD
Delay();
}
2.CGRAM
1602能存儲(chǔ)8個(gè)自定義字符,這8個(gè)自定義字符存儲(chǔ)空間的首地址分別是:0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。
以0x40來(lái)說(shuō),它的存儲(chǔ)空間如圖所示:
如果使用5*7字符的話,那么最左3位和最后一行的數(shù)據(jù)實(shí)際上是沒(méi)用的,通常置0。如果要自定義一個(gè)℃符號(hào),那么先填框,如圖(紅1白0):
這樣我們就得到每個(gè)地址需要寫(xiě)入的數(shù)據(jù):
地址:數(shù)據(jù)
0x40:0x16
0x41:0x09
0x42:0x08
其他類(lèi)推。將這8個(gè)數(shù)據(jù)寫(xiě)入到對(duì)應(yīng)地址即可。
使用時(shí),先確定顯示的位置,例如0X80,然后向DDRAM寫(xiě)入自定義字符的使用代碼。0X40-0X78對(duì)應(yīng)為0X00-0X07。
本例中,先寫(xiě)入指令寄存器0X80確定顯示位置為第一行第一個(gè),然后寫(xiě)入數(shù)據(jù)寄存器0X00,這樣就會(huì)在第一行第一個(gè)位置顯示出℃符號(hào)。
以下是源程序如果網(wǎng)頁(yè)格式導(dǎo)致部分字符丟失請(qǐng)下載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è)置第一個(gè)字的起始地址
for(i=0;i<8;i++)
{
writedata(zi[i]);
}
}
{
uchar i;
writecmd(0x40); //設(shè)置第一個(gè)字的起始地址
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自定義字符攝氏度符
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車(chē)電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論