专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

Proteus 240 128液晶屏驱动

作者:佚名   来源:本站原创   点击数:  更新时间:2013年01月18日   【字体:

  搞了一个晚上终于搞出来了。AT89C52单片机,LM4229液晶屏分辨率240x128,没行可显示16x16汉字15个,共8行。大家可以试着改改程序,做个图片显示来,愿意可以分享给大家。有意见尽管提。头文件和Proteus的接线就不不放了,有需要的到论坛上去下载文件。里面有Proteus 文件和所有.c .h文件。


头文件和Proteus的接线就不挂了,有需要的到论坛上去下载文件。里面有Proteus文件和所有.c .h文件


主函数
#include<reg52.h>
#include<lm4229.h>
//============================================
//             主函数
//============================================
void main()
{
unsigned char i;
lcd_init();
   for(i=0;i<8;i++)
{
LCD_Cursor(i,2);
Show_String("★欢迎访问单片机技术论坛★"); 
i++; 
LCD_Cursor(i,0);
Show_String("bbs.c51mcu.cn   www.c51mcu.com"); 
}
while(1)
{
 
}

驱动程序
很简单,用的时候像主函数里一样,先设置行列,然后输入字符串就行。字库里没有的不显示。
#include<reg52.h>
#include"io.h"
#include"zimo.h"
unsigned char LCD_lin,LCD_column;
//===========================================
//              函数声明
//-------------------------------------------
void delay_lcd(unsigned char);
void write_data(unsigned char);
void write_com(unsigned char);
//--------------------------------------------
//              延时函数
//--------------------------------------------
void delay_lcd(unsigned char t)
{
for(;t!=0; t--);
}
//--------------------------------------------
//              写数据函数
//--------------------------------------------
void write_data(unsigned char dat)
{
CD=0;          //数据
CE=0;          //LCD使能
WRIT=0;        //写
DATA_PORT=dat; //把数据送到P口
delay_lcd(1);      //当晶振较高时加延时
WRIT=1;        //关写
CE=1;          //关使能
}
 
//--------------------------------------------
//              写命令函数
//--------------------------------------------
void write_com(unsigned char com)
{
CD=1;    //命令
CE=0;
WRIT=0;
DATA_PORT=com;
delay_lcd(1);    //当晶振较高时加延时
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);          //地址设置
write_com(0xb0);          //设置数据自动写
write_data(0x00); 
write_com(0xb2);          //自动复位
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);          //地址设置
write_com(0xb0);          //设置数据自动写
if(Attrib_Fg)
  write_data(~*(address+i));
else
  write_data(*(address+i));
//   write_data(0xff);
write_com(0xb2);          //自动复位
place+=30;
}
}
 
//--------------------------------------------
//显示8*16字符
//旋转90度:字模被竖着切分
//lin:行(0-3), column: 列(0-15)
//character:字符代码(标准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);
}
 
//显示一个汉字
//旋转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);
}
 
//显示一个串 包含汉字和16*8字符
//旋转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初始化函数
//--------------------------------------------
void lcd_init()
{
FS1 = 0;//fs1管脚高电平时表示字体为8*6;
           //低电平时为8*8
MD2 = 0;
HALT = 0;
write_data(0); 
write_data(0);        //图形首地址
write_com(0x42);     //图形首地址设置 
write_data(30);
write_data(0);
write_com(0x43);     //图形区域设置
write_com(0x80);     //设置为OR模式
write_com(0x9a);    //关闭文本显示,开图形显示
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,
 
"问", 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,
 
"机", 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,
 
"术", 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]);
 
关闭窗口

相关文章