液晶显示原理图
谁有液晶显示的原理图和51单片机的源代码吗?显示汉字和字符的,谢谢啦,哪位好心人!!测试可用程序
/*********************************包含头文件********************************/<br />#include <reg51.h><br /><br />/********************************命令字定义*********************************/<br />#define Disp_On 0x3f<br />#define Disp_Off 0x3e<br />#define Col_Add 0x40<br />#define Page_Add 0xb8<br />#define Start_Line 0xc0<br /><br />/*********************************端口定义**********************************/<br />sbit Mcs=P2^3; //左半屏使能,当MCS=1,左半屏显示<br />sbit Scs=P2^4; //右半屏使能,当SCS=1,右半屏显示<br />sbit Enable=P2^2; //使能<br />sbit Di=P2^0; //数据/命令选择(RS)<br />sbit RW=P2^1; //读/写信号<br />sbit Rst=P2^5; //复位脚<br />sbit Light=P2^6; //背光脚<br /><br />/**********************************字模表***********************************/<br />/*****************************www.hificat.com*******************************/<br />char code h[]={<br />/*-- 文字: h --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,<br />};<br />char code w[]={<br />/*-- 文字: w --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,<br />};<br />char code i[]={<br />/*-- 文字: i --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,<br />};<br />char code f[]={<br />/*-- 文字: f --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,<br />};<br />char code c[]={<br />/*-- 文字: c --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,<br />};<br />char code a[]={<br />/*-- 文字: a --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,<br />};<br />char code t[]={<br />/*-- 文字: t --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,<br />};<br />char code o[]={<br />/*-- 文字: o --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,<br />};<br />char code m[]={<br />/*-- 文字: m --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,<br />};<br />char code dian[]={<br />/*-- 文字: . --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,<br />};<br />/*************************************欢迎使用***********************************/<br />char code huan[]={<br />/*-- 文字: 欢 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,<br />0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,<br />};<br />char code yun2[]={<br />/*-- 文字: 迎 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,<br />0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,<br />};<br />char code shi[]={<br />/*-- 文字: 使 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,<br />0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,<br />};<br />char code yong[]={<br />/*-- 文字: 用 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,<br />0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,<br />};<br /><br />/***********************************单片机开发板*********************************/<br />char code dan[]={<br />/*-- 文字: 单 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x00,0x00,0xF8,0x28,0x29,0x2E,0x2A,0xF8,0x28,0x2C,0x2B,0x2A,0xF8,0x00,0x00,0x00,<br />0x08,0x08,0x0B,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x0B,0x08,0x08,0x00,<br />};<br />char code pian[]={<br />//*-- 文字: 片 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x18,0x10,0x00,<br />0x80,0x40,0x30,0x0F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,<br />};<br />char code ji[]={<br />/*-- 文字: 机 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,<br />0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,<br />};<br />char code kai[]={<br />/*-- 文字: 开 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x00,<br />0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,<br />};<br />char code fa[]={<br />/*-- 文字: 发 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x00,0x10,0x3E,0x10,0x10,0xF0,0x9F,0x90,0x90,0x92,0x94,0x1C,0x10,0x10,0x10,0x00,<br />0x40,0x20,0x10,0x88,0x87,0x41,0x46,0x28,0x10,0x28,0x27,0x40,0xC0,0x40,0x00,0x00,<br />};<br />char code ban[]={<br />/*-- 文字: 板 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x10,0x10,0xD0,0xFF,0x50,0x90,0x00,0xFE,0x62,0xA2,0x22,0x21,0xA1,0x61,0x00,0x00,<br />0x04,0x03,0x00,0x7F,0x00,0x11,0x0E,0x41,0x20,0x11,0x0A,0x0E,0x31,0x60,0x20,0x00,<br />};<br /><br />char code dang[]={<br />/*-- 文字: 当 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x00,0x00,0x40,0x42,0x5C,0x48,0x40,0x40,0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00,<br />0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,<br />};<br /><br />char code qian[]={<br />/*-- 文字: 前 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08,0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00,<br />0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00,0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00,<br />};<br /><br />char code zhuang[]={<br />/*-- 文字: 状 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0xE1,0x26,0x2C,0x20,0x20,0x00,<br />0x04,0x02,0x01,0xFF,0x40,0x20,0x18,0x07,0x00,0x00,0x03,0x0C,0x30,0x60,0x20,0x00,<br />};<br /><br />char code tai1[]={<br />/*-- 文字: 态 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x00,0x04,0x04,0x04,0x84,0x44,0x34,0x4F,0x94,0x24,0x44,0x84,0x84,0x04,0x00,0x00,<br />0x00,0x60,0x39,0x01,0x00,0x3C,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00,<br />};<br /><br />char code yun[]={<br />/*-- 文字: 运 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x40,0x41,0xCE,0x04,0x00,0x20,0x22,0xA2,0x62,0x22,0xA2,0x22,0x22,0x22,0x20,0x00,<br />0x40,0x20,0x1F,0x20,0x28,0x4C,0x4A,0x49,0x48,0x4C,0x44,0x45,0x5E,0x4C,0x40,0x00,<br />};<br /><br />char code xing[]={<br />/*-- 文字: 行 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x10,0x08,0x84,0xC6,0x73,0x22,0x40,0x44,0x44,0x44,0xC4,0x44,0x44,0x44,0x40,0x00,<br />0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,<br />};<br /><br />char code zhong[]={<br />/*-- 文字: 中 --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/<br />0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,<br />0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,<br />};<br /><br />char code maohao[]={<br />/*-- 文字: : --*/<br />/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/<br />0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,<br />};<br /><br />/****************************************************************************<br />函数功能:延时程序<br />入口参数:t<br />出口参数:<br />****************************************************************************/<br />void delay(unsigned int t)<br />{<br /> unsigned int i,j;<br /> for(i=0;i<t;i++)<br /> for(j=0;j<10;j++);<br />}<br /><br />/*****************************************************************************<br />函数功能:写命令到LCD程序<br />入口参数:cmdcode<br />出口参数:<br />*****************************************************************************/<br />void write_com(unsigned char cmdcode)<br />{<br /> Di=0;<br /> RW=0;<br /> P0=cmdcode; <br /> delay(2);<br /> Enable=1;<br /> delay(2);<br /> Enable=0;<br />}<br /><br />/*****************************************************************************<br />函数功能:写数据到LCD程序<br />入口参数:Dispdata<br />出口参数:<br />*****************************************************************************/<br />void write_data(unsigned char Dispdata)<br />{<br /> Di=1;<br /> RW=0;<br /> P0=Dispdata;<br /> delay(2);<br /> Enable=1;<br /> delay(2);<br /> Enable=0;<br />}<br /><br />/*****************************************************************************<br />函数功能:清除LCD内存程序<br />入口参数:pag,col,hzk<br />出口参数:<br />*****************************************************************************/<br />void Clr_Scr()<br />{<br /> unsigned char j,k;<br /> Mcs=1;Scs=1;<br /> write_com(Page_Add+0);<br /> write_com(Col_Add+0);<br /> for(k=0;k<8;k++)<br /> {<br /> write_com(Page_Add+k);<br /> for(j=0;j<64;j++)write_data(0x00);<br /> }<br /> Mcs=0;Scs=0;<br />}<br /><br />/*****************************************************************************<br />函数功能:指定位置显示数字16*16程序<br />入口参数:pag,col,hzk<br />出口参数:<br />*****************************************************************************/<br />void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)<br />{<br /> unsigned char j=0,i=0;<br /> for(j=0;j<2;j++)<br /> {<br /> write_com(Page_Add+pag+j);<br /> write_com(Col_Add+col);<br /> for(i=0;i<16;i++) <br /> write_data(hzk);<br /> }<br />}<br /><br />/*****************************************************************************<br />函数功能:指定位置显示数字8*16程序<br />入口参数:pag,col,hzk<br />出口参数:<br />*****************************************************************************/<br />void hz_disp8(unsigned char pag,unsigned char col, unsigned char code *hzk)<br />{<br /> unsigned char j=0,i=0;<br /> for(j=0;j<2;j++)<br /> {<br /> write_com(Page_Add+pag+j);<br /> write_com(Col_Add+col);<br /> for(i=0;i<8;i++) <br /> write_data(hzk);<br /> }<br />}<br />/*****************************************************************************<br />函数功能:LCD初始化程序<br />入口参数:<br />出口参数:<br />*****************************************************************************/<br />void init_lcd()<br />{<br /> delay(100);<br /> Mcs=1;<br /> Scs=1;<br /> delay(100);<br /> write_com(Disp_Off);<br /> write_com(Page_Add+0);<br /> write_com(Start_Line+0);<br /> write_com(Col_Add+0);<br /> write_com(Disp_On);<br />}<br /><br /><br />/*****************************************************************************<br />函数功能:主程序<br />入口参数:<br />出口参数:<br />*****************************************************************************/<br />void main(void)<br />{<br /> Light=0; //开LCD背光<br /> init_lcd();<br /> Clr_Scr();<br /> Mcs=1;Scs=0; //左、右都显示<br /> while(1)<br /> {<br /> Mcs=1;Scs=0; //左显示<br /> delay(2);<br /> //欢迎<br /> hz_disp16(0,32,huan);<br /> hz_disp16(0,48,yun2);<br /> //单片机<br /> hz_disp16(2,16,dan);<br /> hz_disp16(2,32,pian);<br /> hz_disp16(2,48,ji);<br /> //当前状态<br /> hz_disp16(4,0,dang);<br /> hz_disp16(4,16,qian);<br /> hz_disp16(4,32,zhuang);<br /> hz_disp16(4,48,tai1);<br /> //网址:www.hifi<br /> hz_disp8(6,0,w);<br /> hz_disp8(6,8,w);<br /> hz_disp8(6,16,w);<br /> hz_disp8(6,24,dian);<br /> hz_disp8(6,32,h);<br /> hz_disp8(6,40,i);<br /> hz_disp8(6,48,f);<br /> hz_disp8(6,56,i);<br /><br /> Mcs=0;Scs=1; //右显示<br /> //使用<br /> hz_disp16(0,0,shi);<br /> hz_disp16(0,16,yong);<br /> //开发板<br /> hz_disp16(2,0,kai);<br /> hz_disp16(2,16,fa);<br /> hz_disp16(2,32,ban); <br /> //:运行中<br /> hz_disp8(4,0,maohao);<br /> hz_disp16(4,8,yun);<br /> hz_disp16(4,24,xing);<br /> hz_disp16(4,40,zhong);<br /> //网址:cat.com<br /> hz_disp8(6,0,c);<br /> hz_disp8(6,8,a);<br /> hz_disp8(6,16,t);<br /> hz_disp8(6,24,dian);<br /> hz_disp8(6,32,c);<br /> hz_disp8(6,40,o);<br /> hz_disp8(6,48,m);<br /> delay(2);<br /> }<br />}<br /><br /> 看了 眼前一亮 if 程序是 真,,真是太好了,,,:lol 收藏了,谢谢三楼 。。。。。。。。。。 强人学习一下 学习了 学习 可以把同一高宽的字放在同一数组用一个变量控制更方便点吧应该 顶! 哦顶 oh my god :) 顶啊 学习 这个裤子是谁给缝的? 太.....2..........了........... 学习了! :) //12864模块//
sbit CS=P1^5; //接口定义
sbit SCLK=P1^7;
sbit STD=P1^6;
sbit LCD_PSB=P1^4; //串行数据设置L串口 H并口
void delay(unsigned int ms) // 延时函数
{
unsigned int i,j;
for(j=0;j<=ms;j++)
{
for(i=0;i<=120;i++)
{}
}
}
void send(uchar type,uchar transdata) //串行通信传输函数,transdata为要写入的数据或指令
{
uchar firsttype=0xf8; //firsttype为第一字节,用来判断是写数据还是写指令。默认是写指令
uchar temp;
uchar i,j=3;
if(type) //判断是是写数据还是写指令,0为写指令,1为写数据
firsttype=firsttype|0x02; //如果要写数据,则把第一字节的第七位至高
CS=1; //给CS高电平开始写入操作
SCLK=0; //给SCLK时钟脉冲,在每个上升沿把数据写入到LCD
while(j>0) //把写数据指令方式和要写入的数据发送给LCD
{
if(j==3) temp=firsttype; //确认要写入第一字节数据,及数据指令判断
else
if(j==2) temp=transdata&0xf0;//确认要写入第二字节数据
else temp=(transdata<<4)&0xf0; //确认要写入第三字节数据
for(i=8;i>0;i--) //把要写入的数据每个位由STD发送到LCD,写入
{
if(temp&0x80) STD=1; //写入第一字节,及最高字节
else STD=0;
SCLK=1; //给SCLK一个上升沿,写入一位
temp<<=1; //把数据指令左移一位,开始写入下一位数据
SCLK=0; //给SCLK一个低电平,确保下一次写入数据正常
}
delay(1); //做简单的延时
j--; //准备写入下一字节数据
}
STD=0; //写入数据指令完毕,给STD和CS低电平
CS=0;
}
void init() // 初始化函数
{
LCD_PSB=0; //把PSB至低,选择串行通信模式
delay(100); //延时,保证LCD处于空闲状态
send(0,0x30); //初级指令集
delay(1);
send(0,0x0c); //开显示
delay(1);
send(0,0x01); //清屏
delay(1);
}