?? main.c
字號(hào):
//漢顯液晶模塊HZ132-64演示程序
//該模塊是一款使用簡(jiǎn)便,功能多樣的漢顯模塊!
//模塊的資料請(qǐng)到 http://www.laogu.com/product/wwwlcm/index.htm 查看
//本例僅用了簡(jiǎn)單的送數(shù)據(jù)到串口的方法就實(shí)現(xiàn)了文字的任意位置顯示,作圖,顯示圖片,t9兼容輸入法等操作
//本例程由'51單片機(jī)世界http://www.mcu51.com'的版主丁丁編寫,Email:mcu52@163.com
//2002年11月24日調(diào)試成功
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
extern char getbyte(void); //從接收緩沖區(qū)取一個(gè)byte,如不想等待則在調(diào)用前檢測(cè)inbufsign是否為1。
extern putbyte(char c); //放入一個(gè)字節(jié)到發(fā)送緩沖區(qū)
extern putstring(uchar *puts); //發(fā)送一個(gè)定義在程序存儲(chǔ)區(qū)的字符串到串口
extern putbytes(uchar *outplace,uint j);//放一串?dāng)?shù)據(jù)到發(fā)送緩沖區(qū),需要定義發(fā)送的字節(jié)數(shù)
extern puthex(uchar c); //發(fā)送一個(gè)字節(jié)的hex碼,分成兩個(gè)字節(jié)發(fā)。
extern bit inbufsign; //串口接收到數(shù)據(jù)標(biāo)志
#define CR putstring("\r\n") //發(fā)送一個(gè)回車換行
extern void serial_init (void); //串口初始化
//灰度
void lcd_light(uchar ch)
{
while(inbufsign)getbyte();
if(ch>0x3f)
return;
putbyte(0x1b);
putbyte(0x31);
putbyte(ch);
getbyte();getbyte();
}
//清屏
void lcd_cls(void)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x32);
getbyte();getbyte();
}
// 設(shè)置光標(biāo)位置
void lcd_cursor(uchar x, uchar y)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x33);
putbyte(x);
putbyte(y);
getbyte();getbyte();
}
//閃爍還是關(guān)閉光標(biāo)
void lcd_showcursor(uchar attr)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x34);
putbyte(attr);
getbyte();getbyte();
}
//顯示字符串
void lcd_string(uchar attr,uchar *string)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x37);
putbyte(attr);
putstring(string);
putbyte(0x00);
getbyte();getbyte();
}
//畫點(diǎn)
void lcd_dot(uchar attr,uchar x,uchar y)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x38);
putbyte(attr);
putbyte(x);
putbyte(y);
getbyte();getbyte();
}
//畫線
void lcd_line(uchar attr,uchar x0,uchar y0,uchar x1,uchar y1)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x39);
putbyte(attr);
putbyte(x0);
putbyte(y0);
putbyte(x1);
putbyte(y1);
getbyte();getbyte();
}
//畫圓
void lcd_circle(uchar attr,uchar ox,uchar oy,uchar rx)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x41);
putbyte(attr);
putbyte(ox);
putbyte(oy);
putbyte(rx);
getbyte();getbyte();
}
// 畫圖片,*picture_data指向圖片數(shù)據(jù),圖片數(shù)據(jù)的第一二個(gè)字節(jié)是圖片寬度和圖片高度
void lcd_picture(uchar attr,uchar x0,uchar y0,uchar *picture_data)
{
putbyte(0x1b);
putbyte(0x42);
putbyte(attr);
putbyte(x0);
putbyte(y0);
putbytes(picture_data,(((*picture_data)+7)/8)*(*(picture_data+1))+2);
getbyte();getbyte();
}
//畫ICON
void lcd_icon(uchar attr,uchar ch)
{
while(inbufsign)getbyte();
putbyte(0x1b);
putbyte(0x43);
putbyte(attr);
putbyte(ch);
getbyte();getbyte();
}
//取數(shù)字組合的有效拼音組合,
//*num指向輸入的數(shù)字,
//返回的有效拼音組合放在pinyin[6][8]
//函數(shù)返回返回有效拼音的個(gè)數(shù)
uchar lcd_num2pinyin(uchar *num, uchar pinyin[6][8])
{
ulong n=0;//超時(shí)用
uchar m,i,j,ch;
while(inbufsign)getbyte(); //清空串口緩沖區(qū)
putbyte(0x1b);
putbyte(0x47);
putstring(num);
putbyte(0x00);
while(1)
{
if(inbufsign)//串口接收到了數(shù)據(jù)
{
if(getbyte()==0x1b)
{
m=getbyte();//查到的總條數(shù)
for(i=0;i<m;i++)
{
for(j=0;;j++)
{
ch=getbyte();
pinyin[i][j]=ch;
if(ch==0)break;
}
}
getbyte();getbyte();
return(m);
}
}
n++; //超時(shí)計(jì)時(shí)加一
if(n>100000)return(0x00);//超時(shí)返回0
}
}
//取符合拼音字符串的10個(gè)漢字,page是取第幾頁
//返回的漢字串在hz[21];
void lcd_pinyin2hz(uchar page, uchar *pinyin,uchar *hz)
{
uchar i,ch;
ulong n=0;
while(inbufsign)getbyte(); //清空串口緩沖區(qū)
putbyte(0x1b);
putbyte(0x48);
putbyte(10);//在這里修改你需要返回幾個(gè)漢字
putbyte(page);
putstring(pinyin);
putbyte(0x00);
while(1)
{
if(inbufsign)//串口接收到了數(shù)據(jù)
{
if(getbyte()==0x1b)
{
for(i=0;;i++)
{
ch=getbyte();
*(hz+i)=ch;
if(ch==0)break;
}
getbyte();getbyte();
return;
}
}
n++; //超時(shí)計(jì)時(shí)加一
if(n>100000)
return;//超時(shí)返回
}
}
void delay(void)
{
ulong n;
uchar i;
//for(i=0;i<2;i++)
for(n=0;n<60000;n++);
}
//定義一個(gè)圖片
uchar code pic[]={
0x48, 0x1c, //這兩個(gè)字節(jié)是圖形塊的長(zhǎng)和寬,下面的才是圖形數(shù)據(jù)
0x00, 0x4E, 0x20, 0x00, 0x00, 0xF0, 0x40, 0x00, 0x00, 0x00, 0x7B, 0xE0, 0x01, 0x01, 0xF8, 0xC0,
0x00, 0x00, 0x01, 0xFF, 0x7C, 0xFF, 0xF1, 0xFD, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC6, 0xFF, 0xC1,
0x9F, 0xC3, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0xFF, 0xF3, 0x0F, 0xBF, 0xC0, 0x00, 0x00, 0x7F, 0xE6,
0x1F, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x77, 0xFC, 0x07, 0xE7, 0x07, 0xFF, 0xC0, 0x00, 0x00,
0x77, 0xFB, 0x07, 0xFB, 0x87, 0xBF, 0x00, 0x00, 0x00, 0x67, 0xFF, 0xF7, 0xA7, 0x7E, 0x00, 0x00,
0x00, 0x00, 0x67, 0xFF, 0xF7, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x67, 0xFF, 0xEF, 0xE1, 0xFF,
0x98, 0x00, 0x00, 0x00, 0x63, 0xFF, 0xEF, 0xFF, 0xFF, 0xB8, 0x00, 0x44, 0x00, 0x03, 0xFF, 0xEF,
0xFF, 0xFF, 0xFC, 0x08, 0xC6, 0x04, 0x01, 0xFF, 0xEF, 0xFF, 0xFF, 0xF4, 0x04, 0x8E, 0x0C, 0x43,
0xFE, 0x6F, 0xFF, 0xFF, 0xE6, 0x05, 0x9F, 0x98, 0x43, 0xFF, 0x8F, 0xFF, 0xFB, 0xC3, 0xC7, 0x9F,
0x99, 0xE7, 0x7F, 0xFF, 0xFF, 0xFD, 0xC1, 0xE7, 0xFF, 0xD9, 0xE6, 0xFD, 0xFF, 0xFF, 0xDF, 0xF0,
0x0F, 0xFF, 0xFF, 0xA7, 0xE1, 0x9F, 0xFF, 0x0F, 0xF8, 0x5B, 0xFF, 0xEE, 0x8F, 0x81, 0x87, 0xE0,
0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x01, 0x8F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3C, 0x01,
0x9E, 0xF3, 0xC4, 0x15, 0xE2, 0x08, 0x00, 0xF8, 0x00, 0xF8, 0x91, 0x24, 0xFC, 0x02, 0x08, 0x03,
0x98, 0x00, 0xE0, 0x93, 0xD4, 0x90, 0x77, 0x88, 0x7E, 0x30, 0x01, 0x80, 0xF8, 0x94, 0xEA, 0x22,
0x88, 0x38, 0x30, 0x07, 0x00, 0x0B, 0xD4, 0xAC, 0x2A, 0x80, 0x00, 0x60, 0x3C, 0x01, 0xE8, 0x84,
0xAC, 0x36, 0x88, 0x00, 0x40, 0x38, 0x00, 0x1B, 0xED, 0x76, 0x6D, 0x80
};
void main(void)
{
char i,j;
uint n;
uchar code string_num[]="7426";
uchar pinyin_buf[6][8];
serial_init();
for(n=0;n<60000;n++);
while(1)
{
lcd_cls();
lcd_string(0,"您好!歡迎使用漢顯液晶模塊!");
delay();
lcd_string(1,"反顯效果");
delay();
lcd_cls();
lcd_string(0,"現(xiàn)在打開光標(biāo)閃爍:");
lcd_showcursor(0x01);
delay();
lcd_cls();
lcd_string(0,"現(xiàn)在將光標(biāo)移到(8,3)位置:");
lcd_cursor(8, 3);
delay();
lcd_string(0,"您好!");
delay();
lcd_cls();
lcd_string(0,"現(xiàn)在關(guān)閉光標(biāo)閃爍:");
lcd_showcursor(0x00);
delay();
lcd_cls();
lcd_string(0,"在(20,40)位置畫一個(gè)點(diǎn):");
lcd_dot(1,20,40);
delay();
lcd_cursor(0, 0);
lcd_string(0,"再以直徑為15畫一個(gè)圓: ");
lcd_circle(1,20,40,15);
delay();
lcd_cursor(0, 0);
lcd_string(0,"再畫兩條線,一條實(shí)線,一條虛線:");
lcd_line(1,10,5,100,60);
lcd_line(2,10,55,100,10);
delay();
lcd_cls();
lcd_string(0,"畫一個(gè)圖片'馬到成功'");
lcd_picture(0,30,20,pic);
delay();
lcd_cls();
lcd_string(0,"現(xiàn)在取'7426'的拼音串");
while(inbufsign) getbyte(); //清空接收緩沖區(qū)
lcd_string(0,"返回的結(jié)果:");
j=lcd_num2pinyin(string_num, pinyin_buf);
lcd_cursor(0, 3);
for(i=0;i<j;i++)
{
if(i==0) lcd_string(1,pinyin_buf[i]);//默認(rèn)反顯第一個(gè)拼音
else lcd_string(0,pinyin_buf[i]);
lcd_string(0," ");
}
delay();
lcd_cls();
lcd_cursor(0, 0);
lcd_string(0,"反顯第二個(gè)拼音:");//比如通過按鍵選到了第二個(gè)
lcd_cursor(0, 3);
for(i=0;i<j;i++)
{
if(i==1) lcd_string(1,pinyin_buf[i]);//反顯第一個(gè)拼音
else lcd_string(0,pinyin_buf[i]);
lcd_string(0," ");
}
delay();
lcd_cls();
lcd_string(0,"取這個(gè)拼音的漢字串:\r\n");
while(inbufsign) getbyte(); //清空接收緩沖區(qū)
lcd_pinyin2hz(1, pinyin_buf[1],pinyin_buf);//借用拼音的緩沖區(qū)pinyin_buf放漢字串,以節(jié)省內(nèi)存
lcd_cursor(0, 4);
lcd_string(0,pinyin_buf[0]);
delay();delay();delay();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -