小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

1602液晶顯示還可以顯示漢字

 kequansodo 2010-12-12

原創(chuàng)]1602液晶顯示漢字

昨天從網(wǎng)上看到1602液晶可以顯示漢字,感覺挺有趣的就自己來做一下。

     從網(wǎng)上下了一些資料,具體是應(yīng)用1602的CGRAM,它一共有512bit,并且一個5*7點(diǎn)矩陣字型需8*8bit,所以CGRAM最多可存8個造型(自定義字符)。但是看了好多資料還是看不懂,它是怎么保存的那,又是怎么顯示的那?......實(shí)在是想不通呀! >_< MY GOD!

      下午上的是自動控制,最后一節(jié)課老師講的聽不懂,索性就不聽了。拿起一本單片機(jī)的書隨便看了看,正好后面有1602液晶的CGRAM的介紹,看了幾遍好像有那么點(diǎn)意思了,就差調(diào)試出來了。

     放了學(xué)就沖到實(shí)驗(yàn)室里,打開keil ,打開 Proteus,調(diào)試......調(diào)試......調(diào)試,半個小時,哈哈,搞定了,顯示漢字了!YEAH!

     原理很簡單,自定義庫保存到CGROM的00——07單元中。1602液晶上是5*7點(diǎn)陣顯示,需要8個2進(jìn)制數(shù),把漢字(比如‘年’)所對應(yīng)的2進(jìn)制數(shù)組寫入到CGRAM中去,并且保存到CGROM的00單元中,顯示出來就可以了。自己做了幾個漢字和一個攝氏度符號。大家快來分享一下做1602液晶時的一些技巧吧。

我收藏的一個1602顯示漢字程序

//*************************************
//lcd頭文件
//*************************************
#include<reg52.h>
#include<string.h>
#include <absacc.h>
#define lcd_data P0 //定義端口
#define uchar unsigned char
#define uint  unsigned int
sbit RS=P2^1;
sbit RW=P2^2;
sbit E=P2^3;
sbit BF=P0^7;

//***************************************
//延時函數(shù)
//***************************************
void delay(uint i)
{
 while(i--);
}
//***************************************
//寫控制字
//***************************************
void write_struct(uchar temp) 
{
 E=0;
 delay(100);
 //while(BF==1);
 RW=0;
 RS=0;
 lcd_data=temp;
 delay(3);
 E=1;
 delay(3);
 E=0;
}
//**************************************
//寫數(shù)據(jù)
//**************************************
void write_data(uchar temp)
{
 delay(100);
 //while(BF==1);
 E=0;
 RS=1;
 RW=0;
 lcd_data=temp;
 E=1;
 delay(3);
 E=0;
}

//***************************************
//獲得顯示地址
//x表示是第幾行顯示  (0-1)
//y表示某行的第幾個字符(0-15)
//***************************************
uchar getchar_adress(uchar x,uchar y)
{  uchar address;
   if(x==0) address=0x80+y;  //第一行
   else address=0xc0+y;   //第二行
   return address;
}

//***************************************
//lcd初始化
//***************************************
void lcd_init()
{
 write_struct(0x38); //設(shè)置接口DB寬度(8位)和LCM顯示行數(shù)(2行)
 write_struct(0x08); //
 write_struct(0x0c); //設(shè)置光標(biāo)為移位模式
 write_struct(0x01); //執(zhí)行清屏操作
 write_struct(0x06); //設(shè)置光標(biāo)為加1模式

}
//***************************************
//向CGRAM寫入數(shù)據(jù)
//***************************************
void write_cgram(unsigned char adress,unsigned char *p)
{
 char i;
 for(i=0;i<8;i++)
 {  write_struct(adress+i);
     write_data(p); 
 }

}

//***************************************
//顯示CGRAM數(shù)據(jù)
//x表示是第幾行顯示  (0-1)
//y表示某行的第幾個字符(0-15)
//***************************************
void display_cgram(unsigned char x,uchar y,uchar  *CgramData)

    uchar address,cgram_address,p;
 address=getchar_adress(x,y);      //獲得CGRAM字符顯示位置
   
 
 cgram_address=0x40+(address&0x07)*8; //CGRAM初始地址

 p=address&0x07;

    write_cgram(cgram_address,CgramData);
 write_struct(address);          //設(shè)置DDRAM地址

 write_data(p); 

}
//顯示字符
//***************************************
void display(char temp0,char *p)
{
 write_struct(temp0);
 delay(3);
 write_data(*p);
}
//****************************************
//顯示字符串
//****************************************
void display_str(uchar x,uchar y,char *p)
{
 char i,temp0;
 temp0=getchar_adress(x,y);
 write_struct(temp0);
 for(i=0;i<16;i++)
 {
  if(*p=='\0')
   break;
     write_data(*p);
   
  p++;
 }
}
//****************************************
//清屏
//****************************************
void lcd_clr()
{
 write_struct(0x01); 
}
//*****************************************************end

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多