專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

Proteus 240 128液晶屏驅(qū)動(dòng)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年01月18日   【字體:

  搞了一個(gè)晚上終于搞出來(lái)了。AT89C52單片機(jī),LM4229液晶屏分辨率240x128,沒(méi)行可顯示16x16漢字15個(gè),共8行。大家可以試著改改程序,做個(gè)圖片顯示來(lái),愿意可以分享給大家。有意見(jiàn)盡管提。頭文件和Proteus的接線就不不放了,有需要的到論壇上去下載文件。里面有Proteus 文件和所有.c .h文件。


頭文件和Proteus的接線就不掛了,有需要的到論壇上去下載文件。里面有Proteus文件和所有.c .h文件


主函數(shù)
#include<reg52.h>
#include<lm4229.h>
//============================================
//             主函數(shù)
//============================================
void main()
{
unsigned char i;
lcd_init();
   for(i=0;i<8;i++)
{
LCD_Cursor(i,2);
Show_String("★歡迎訪問(wèn)單片機(jī)技術(shù)論壇★"); 
i++; 
LCD_Cursor(i,0);
Show_String("bbs.c51mcu.cn   www.c51mcu.com"); 
}
while(1)
{
 
}

驅(qū)動(dòng)程序
很簡(jiǎn)單,用的時(shí)候像主函數(shù)里一樣,先設(shè)置行列,然后輸入字符串就行。字庫(kù)里沒(méi)有的不顯示。
#include<reg52.h>
#include"io.h"
#include"zimo.h"
unsigned char LCD_lin,LCD_column;
//===========================================
//              函數(shù)聲明
//-------------------------------------------
void delay_lcd(unsigned char);
void write_data(unsigned char);
void write_com(unsigned char);
//--------------------------------------------
//              延時(shí)函數(shù)
//--------------------------------------------
void delay_lcd(unsigned char t)
{
for(;t!=0; t--);
}
//--------------------------------------------
//              寫數(shù)據(jù)函數(shù)
//--------------------------------------------
void write_data(unsigned char dat)
{
CD=0;          //數(shù)據(jù)
CE=0;          //LCD使能
WRIT=0;        //寫
DATA_PORT=dat; //把數(shù)據(jù)送到P口
delay_lcd(1);      //當(dāng)晶振較高時(shí)加延時(shí)
WRIT=1;        //關(guān)寫
CE=1;          //關(guān)使能
}
 
//--------------------------------------------
//              寫命令函數(shù)
//--------------------------------------------
void write_com(unsigned char com)
{
CD=1;    //命令
CE=0;
WRIT=0;
DATA_PORT=com;
delay_lcd(1);    //當(dāng)晶振較高時(shí)加延時(shí)
WRIT=1;
CE=1;
}
 
//--------------------------------------------
//          清屏
//--------------------------------------------
void clear_lcd(void)
{
unsigned int i,place;
unsigned int length=3840;
place=0;
for(i=0;i<length;i++)
{
write_data(place&0xff);   //寫入地址高位
write_data(place/256);    //寫入地址低位
write_com(0x24);          //地址設(shè)置
write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫
write_data(0x00); 
write_com(0xb2);          //自動(dòng)復(fù)位
place++;
}
}
void LCD_Cursor(unsigned char lin,unsigned char column)
{
  LCD_lin=lin;
LCD_column=column;
}
bit Attrib_Fg=0;
void Show8_16(unsigned char code *address,unsigned int place)
unsigned char i;
for(i=0;i<16;i++)
{
write_data(place&0xff);   //寫入地址高位
write_data(place/256);    //寫入地址低位
write_com(0x24);          //地址設(shè)置
write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫
if(Attrib_Fg)
  write_data(~*(address+i));
else
  write_data(*(address+i));
//   write_data(0xff);
write_com(0xb2);          //自動(dòng)復(fù)位
place+=30;
}
}
 
//--------------------------------------------
//顯示8*16字符
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-3), column: 列(0-15)
//character:字符代碼(標(biāo)準(zhǔn)ASCII碼)
//--------------------------------------------
void ShowChar16(unsigned char character)
{
  unsigned char i;
unsigned char code *pc;   
    unsigned int place; 
for(i=0;i<Char16_Num;i++)
{
if(zimoc16[i].Gb_Code==character)
{
pc=zimoc16[i].Gb_Data;
break;
}
}
if (i==Char16_Num)return;
place=LCD_lin*30*16+LCD_column;
Show8_16(pc,place);
}
 
//顯示一個(gè)漢字
//旋轉(zhuǎn)90度:字模被豎著切分
 
//hzcode: 漢字代碼(自定義的)
//unsigned char code HZtable
void ShowHZ(unsigned char code *hzcode)
{
unsigned char i,j;
unsigned char code *pc,*pc_A;     
    unsigned int place; 
for(i=0;i<Hz_Num;i++)
{
for(j=0,pc_A=hzcode;j<2;j++,pc_A++)
{
if(zimow[i].Hz_Code[j]!=*pc_A)break;
  
}
if(j==2)
  {
pc=zimow[i].Hz_Data;
break;
  }
}
if (i==Hz_Num)return;
place=LCD_lin*30*16+LCD_column;
Show8_16(pc,place);  
Show8_16(pc+16,place+1);
}
 
//顯示一個(gè)串 包含漢字和16*8字符
//旋轉(zhuǎn)90度:字模被豎著切分
void Show_String(unsigned char code *String)
{
unsigned char code *pc_A;
pc_A=String;
while(*pc_A!=0)
{
 
if(*pc_A>=0xa0)
{
 ShowHZ(pc_A);
 pc_A+=2; 
 LCD_column+=2;
}
else
{
   
ShowChar16(*pc_A);
pc_A++;
   LCD_column++;
}
}
}
//--------------------------------------------
//         LM4229初始化函數(shù)
//--------------------------------------------
void lcd_init()
{
FS1 = 0;//fs1管腳高電平時(shí)表示字體為8*6;
           //低電平時(shí)為8*8
MD2 = 0;
HALT = 0;
write_data(0); 
write_data(0);        //圖形首地址
write_com(0x42);     //圖形首地址設(shè)置 
write_data(30);
write_data(0);
write_com(0x43);     //圖形區(qū)域設(shè)置
write_com(0x80);     //設(shè)置為OR模式
write_com(0x9a);    //關(guān)閉文本顯示,開圖形顯示
clear_lcd();
}

字模文件
橫向取模
struct
{
unsigned char Gb_Code;
unsigned char Gb_Data[16];
}code zimoc16[]=
{
'.',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -.-
0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
 
'0',0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6,  // -0-
0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
 
'1',0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,  // -1-
0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,
 
'5',0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E,  // -5-
0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,
 
'B',0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66,  // -B-
0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00,
 
'C',0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,  // -C-
0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00,
 
'M',0x00,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,  // -M-
0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
 
'N',0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,  // -N-
0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
 
'O',0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6,  // -O-
0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00,  
 
'S',0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C,  // -S-
0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
 
'U',0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,  // -U-
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
 
'W',0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,  // -W-
0xD6,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00, 
 
'b',0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66,  // -b-
0x66,0x66,0x66,0xDC,0x00,0x00,0x00,0x00,
 
'c',0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0,  // -c-
0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,
 
'm',0x00,0x00,0x00,0x00,0x00,0xEC,0xFE,0xD6,  // -m-
0xD6,0xD6,0xD6,0xD6,0x00,0x00,0x00,0x00,
 
'n',0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,  // -n-
0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
 
'o',0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,  // -o-
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
 
's',0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60,  // -s-
0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00,
 
'u',0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,  // -u-
0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
 
'w',0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,  // -w-
0xD6,0xD6,0xFE,0x6C,0x00,0x00,0x00,0x00,
};
 
 
 
struct
{
unsigned char Hz_Code[2];
unsigned char Hz_Data[32];
}code zimow[]=
{
"歡", 0x00,0x00,0xFC,0x04,0x45,0x46,0x28,0x28,0x10,0x28,0x24,0x44,0x81,0x01,0x02,0x0C,
      0x80,0x80,0x80,0xFC,0x04,0x48,0x40,0x40,0x40,0x40,0xA0,0xA0,0x10,0x08,0x0E,0x04,
 
"迎", 0x00,0x41,0x26,0x14,0x04,0x04,0xF4,0x14,0x15,0x16,0x14,0x10,0x10,0x28,0x47,0x00,
      0x00,0x84,0x7E,0x44,0x44,0x44,0x44,0xC4,0x44,0x54,0x48,0x40,0x40,0x46,0xFC,0x00,
 
"訪", 0x00,0x20,0x10,0x10,0x07,0x00,0xF0,0x10,0x10,0x10,0x10,0x10,0x15,0x19,0x12,0x04,
      0x80,0x40,0x40,0x04,0xFE,0x80,0x88,0xFC,0x88,0x88,0x88,0x88,0x08,0x08,0x50,0x20,
 
"問(wèn)", 0x20,0x1B,0x08,0x40,0x40,0x4F,0x48,0x48,0x48,0x48,0x48,0x4F,0x48,0x40,0x40,0x40,
      0x04,0xFE,0x04,0x04,0x24,0xF4,0x24,0x24,0x24,0x24,0x24,0xE4,0x24,0x04,0x14,0x08,
 
"單", 0x10,0x08,0x04,0x3F,0x21,0x21,0x3F,0x21,0x21,0x3F,0x21,0x01,0xFF,0x01,0x01,0x01,
      0x10,0x20,0x48,0xFC,0x08,0x08,0xF8,0x08,0x08,0xF8,0x00,0x04,0xFE,0x00,0x00,0x00,
 
"片", 0x00,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x40,0x80,
      0x80,0x80,0x80,0x80,0x84,0xFE,0x00,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
 
"機(jī)", 0x10,0x10,0x11,0x11,0xFD,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x14,0x18,
      0x00,0x10,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0x0E,0x00,
 
"技", 0x10,0x10,0x10,0x13,0xFC,0x10,0x10,0x13,0x1A,0x31,0xD1,0x10,0x10,0x10,0x51,0x26,
      0x40,0x40,0x48,0xFC,0x40,0x40,0x40,0xF8,0x08,0x10,0x10,0xA0,0x40,0xB0,0x0E,0x04,
 
"術(shù)", 0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x03,0x05,0x09,0x11,0x21,0xC1,0x01,0x01,0x01,
      0x00,0x40,0x30,0x10,0x04,0xFE,0x00,0x80,0x40,0x20,0x10,0x0E,0x04,0x00,0x00,0x00,
 
"論", 0x00,0x40,0x30,0x10,0x01,0x02,0xF4,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x10,0x00,
      0x40,0x40,0xA0,0xA0,0x10,0x0E,0x04,0x00,0x10,0x30,0xC0,0x00,0x04,0x04,0xFC,0x00,
 
"壇", 0x10,0x10,0x13,0x10,0x10,0xFC,0x17,0x10,0x10,0x10,0x10,0x1D,0xF1,0x43,0x00,0x00,
      0x00,0x08,0xFC,0x00,0x00,0x04,0xFE,0x40,0x40,0x80,0x90,0x08,0x04,0xFC,0x04,0x00,
  
"★", 0x00,0x00,0x01,0x01,0x03,0x7F,0x3F,0x1F,0x0F,0x07,0x0F,0x0F,0x1E,0x18,0x20,0x00,
      0x80,0x80,0xC0,0xC0,0xE0,0xFF,0xFE,0xFC,0xF8,0xF0,0xF8,0x78,0x3C,0x0C,0x02,0x00,
 
};
unsigned char code Char16_Num=sizeof(zimoc16)/sizeof(zimoc16[0]);
unsigned char code Hz_Num=sizeof(zimow)/sizeof(zimow[0]);
 
關(guān)閉窗口

相關(guān)文章