液晶显示屏的驱动程序 Word 文档
LCD液晶显示驱动程序设计指引
![LCD液晶显示驱动程序设计指引](https://img.taocdn.com/s3/m/fc17004b0166f5335a8102d276a20029bc646365.png)
美的集团制冷事业本部企业标准QJ/MK03.056-2004 LCD液晶显示驱动程序设计指引1适用范围《LCD液晶显示驱动程序设计指引》主要对采用液晶驱动芯片HD1621(或此系列芯片)进行LCD 液晶的驱动方法进行了分析,说明了驱动芯片的功能、软件编制方法和注意事项,并提供了程序范例,为以后的程序设计者提供类似的开发参考。
2引用资料范例程序采用日本NEC公司的RA78K0S系列汇编语言编写,具体技术资料参照78K0S系列八位单片机UPD78F9177芯片的相关资料。
液晶驱动芯片参考资料:具体见HT1621DATASHEET。
3定义汇编语言:是用于编写微处理器软件的最基本编程语言。
汇编程序包:是一组程序的总称,用于把汇编语言的源程序文件转换成机器代码的程序,通常包括汇编程序﹑连接程序﹑目标码转换程序和其它库管理程序﹑表转换程序等。
LCD:液晶显示器简称。
4HT162X驱动芯片资料介绍4.1概述HT162X系列芯片是由HOTEK公司开发生产的多功能LCD 驱动器芯片,HT162X 的软件配置特性使其适合于各种LCD 的应用包括LCD 模块和显示子系统,主控器与HT162X通信只需要3 到4 条线。
由于采用了电容型偏置电压充电泵使得HT1620 的操作电流非常的小。
HT162X 系列包括多款产品适合不同的应用,目前广泛应用于各种液晶驱动控制上。
4.2芯片特性➢操作电压2.4V~3.3V➢LCD 电压3.6V~4.9V可调➢可选择1/2 或1/3 偏置1/2, 1/3 或1/4 占空比➢内部时基频率源➢片内电容型偏置充电泵➢读/写地址自动增加➢3线(或4线)串行接口➢软件配置特性➢两个可选的蜂鸣器频率2KHz 或4KHz4.3HT162X系列芯片选型表片内振荡器-√√-√√√晶体振荡器√√-√√√√5HT1621芯片说明HT1621为32*4位LCD驱动器,共有四种子型号,分别是HT1621-48SSO、HT1621B-48SSOP/DIP、HT1621D-28SKDIP,我们现在使用的为HT1621B-48SSOP,以下就以此芯片为例进行说明。
STM32液晶屏驱动程序
![STM32液晶屏驱动程序](https://img.taocdn.com/s3/m/23a4598e02d276a200292ea3.png)
附录2整个设计全部源程序:/*以下是32x64点阵LED电子显示屏的源程序,采用C语言编写,在Keil μVisionV2.38a(C51.Exe V7.06)以及MedWin3.0版环境下均测试通过。
*/ #include <AT89x51.H>unsigned int zimo,xx=0; //zimo是字模计数器,xx为分屏显示的时候的字数。
unsigned char yid,h; //yid为移动计数器,h为行段计数器unsigned char code hanzi[]; //汉字字模unsigned char BUFF[18],BUFF2[18]; //左移显示的缓存void qing(void); void xianshi(void);void fen(void); void zuo(void);void in_data(void); //调整数据void rxd_data(void); //左移发送数据void out_rxd(unsigned char *d); //分屏、上移发送数据char code sw[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00}; /*8行段码*//***********主程序******************/void main(void){ unsigned char ee;SCON=0;P1=0;yid=0;zimo=0;while(1){ fen(); //分屏显示for(ee=30;ee>0;ee--)//清屏幕3秒{qing();}zuo(); //左移显示for(ee=30;ee>0;ee--){qing();}}}/**********清屏幕*******************/void qing (void){ unsigned char zz,xx=0x0ff;for (zz=33;zz>0;zz--){out_rxd(&xx);}P1=0xff; P1=0; //锁存为高,74HC595锁存信号P2=0; //清74LS138的使能端}/**********分屏显示***********/void fen(void){ do{ xianshi(); }while(xx++<=5); //调用单屏显示xx=0;}/************单屏显示*************/void xianshi(void){ unsigned char ii,jj; unsigned int kk,aa;for (kk=500;kk>0;kk--) //每屏显示500次{for(ii=1;ii<16;ii+=2) //每个汉字分8行扫描{for (jj=0;jj<8;jj++) //每次要发送8个汉字的2个字节,发送8次{ aa=(xx*8+jj)*32+ii;out_rxd(&hanzi[aa]); //从串口输出第1个字的第1字节。
液晶1602 C语言驱动程序
![液晶1602 C语言驱动程序](https://img.taocdn.com/s3/m/84a58d28e2bd960590c6774a.png)
delaytime(10);
}
}
//清屏
void HC1602fullclear()
{
HC1602WriteCmd(0x01);
delaytime(10);
}
/*--------------------------------------------------------------------
{
uint i;
while(n--)
for(i=0;i<200;i++);
}
uint HC1602busy()
{
uchar i;
SysCtlPeripheralEnable(GPIO_PORTA_BASE );
GPIOPinTypeGPIOInput(GPIO_PORTA_BASE , 0xff);
LCD_ESysCtlPeripheralEnable(GPIO_PORTA_BASE );
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE , 0xff);
return busyflag;
}
void HC1602WriteCmd(uchar uldata) //写命令
函数功能: 在1602液晶显示屏上显示一连串的字符串
输入说明: startline:显示起始行 startrow :显示的起始列
uldata:要显示的字符
返回 值 :
说 明:
--------------------------------------------------------------------*/
12232液晶模块12232液晶显示驱动程序
![12232液晶模块12232液晶显示驱动程序](https://img.taocdn.com/s3/m/0a9b04a6f524ccbff1218486.png)
12232液晶显示驱动程序【全屏显示】#include#include#include#include#define uchar unsigned char#define data 1#define comm 0#define f_page 0xb8#d#define f_line 0x00 efine f_row 0xc0sbit rst=P3^0;sbit e1 =P2^0;sbit e2 =P2^1;sbit rw =P3^3;sbit a0 =P3^4;sbit bf =P1^7;void wr_lcd (uchar choe1,uchar choe2,uchar data_comm,uchar content);/*choe1为1,控制左半屏,choe2为1,控制右半屏*/void chk_busy (uchar choe1,uchar choe2);void delay (unsigned int us);void delay1 (unsigned int ms);//void init_lcd (void);void disphz (uchar code *chn);void dispzf (uchar code *chn);void disptu (uchar code *img);void wrlattice (uchar data1,uchar data2);uchar code tab1[]={/*-- 文字: 中 --*/0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00, 0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00, /*-- 文字: 科 --*/0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00, 0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00, /*-- 文字: 国 --*/0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00, 0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00, /*-- 文字: 技 --*/0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00, 0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00, /*-- 文字: 肇 --*/0x80,0x60,0x1C,0x95,0x96,0x94,0x9C,0xC8,0xA4,0xAF,0x94,0x94,0x2C,0x44,0x44,0x00, 0x20,0x22,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2F,0x22,0x22,0x20,0x00, /*-- 文字: 有 --*/0x00,0x04,0x84,0x44,0xE4,0x34,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00, 0x02,0x01,0x00,0x00,0xFF,0x09,0x09,0x09,0x29,0x49,0xC9,0x7F,0x00,0x00,0x00,0x00, /*-- 文字: 庆 --*/0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0xC5,0x7E,0xC4,0x44,0x44,0x44,0x44,0x44,0x00, 0x40,0x30,0x0F,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x18,0x30,0x60,0x20,0x00, /*-- 文字: 限 --*/0xFE,0x02,0x32,0x4E,0x82,0x00,0xFE,0x4A,0xCA,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00, 0xFF,0x00,0x02,0x04,0x03,0x00,0xFF,0x40,0x20,0x03,0x0C,0x12,0x21,0x60,0x20,0x00, /*-- 文字: 金 --*/0x40,0x40,0x20,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x50,0x20,0x60,0x20,0x00, 0x40,0x40,0x42,0x42,0x4A,0x72,0x42,0x7F,0x42,0x62,0x5A,0x42,0x42,0x40,0x40,0x00, /*-- 文字: 公 --*/0x00,0x00,0x80,0x40,0x30,0x0E,0x84,0x00,0x00,0x0E,0x10,0x60,0xC0,0x80,0x80,0x00, 0x00,0x01,0x20,0x70,0x28,0x24,0x23,0x31,0x10,0x10,0x14,0x78,0x30,0x01,0x00,0x00, /*-- 文字: 鹏 --*/0x00,0xFE,0x12,0xFE,0x00,0xFE,0x12,0xFE,0x00,0xFC,0x0E,0x35,0x44,0x7C,0x00,0x00, 0x20,0x1F,0x21,0x7F,0x20,0x1F,0x41,0x7F,0x08,0x09,0x09,0x29,0x49,0x21,0x1F,0x00, /*-- 文字: 司 --*/0x00,0x10,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0x02,0xFE,0x00,0x00, 0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,0x20,0x40,0x3F,0x00,0x00 };uchar code tab2[]={/*-- 文字: 8 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, /*-- 文字: G --*/0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00, /*-- 文字: 6 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: o --*/0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00, /*-- 文字: - --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, /*-- 文字: l --*/0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, /*-- 文字: 7 --*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, /*-- 文字: d --*/0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,/*-- 文字: 5 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: e --*/0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00, /*-- 文字: 8 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, /*-- 文字: n --*/0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20, /*-- 文字: - --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, /*-- 文字: P --*/0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00, /*-- 文字: 2 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, /*-- 文字: a --*/0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20, /*-- 文字: 2 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, /*-- 文字: l --*/0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, /*-- 文字: 2 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, /*-- 文字: m --*/0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F, /*-- 文字: 3 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 1 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, /*-- 文字: L --*/0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00, /*-- 文字: 9 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, /*-- 文字: C --*/0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00, /*-- 文字: 6 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: M --*/0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00 };uchar code tab3[]={/*-- 调入了一幅图像:F:\梁\其它\HOCO12232.bmp --*//*-- 宽度x高度=122x32 --*/0x00,0x00,0x00,0x70,0xF8,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xF0,0xE0, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x48,0xD4,0xB4,0x62,0xC2,0x82,0x03,0x02,0x02, 0x02,0x84,0xC4,0xE0,0xA0,0xE0,0x60,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xB0,0xF8,0xF0,0xF0,0xF8,0xFC,0x60,0x60,0x30, 0x18,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xD8,0x58,0x58,0x58,0x58, 0x58,0xD8,0xD8,0x98,0xB0,0x30,0x70,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07, 0x07,0x07,0x02,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFC,0xFC,0xFC, 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x04, 0x0D,0x1B,0x36,0x6D,0xDB,0xF6,0xED,0xFB,0xFE,0xFE,0xFF,0x7F,0x1F,0x07,0x01,0x00, 0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFE,0xFE, 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xE0,0xC0,0xC0,0xF8,0xFE,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x3E,0xF8,0x01,0x37, 0x0C,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x60,0xFF,0xC7,0x03,0x03,0x03,0x03,0xE1, 0xFF,0x3F,0x0F,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x0F,0x3F,0x7F,0xFF,0xEF, 0xBF,0x7F,0xFF,0xC7,0x07,0x1F,0xFE,0xF8,0xB0,0x60,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x10,0x20,0x40,0x40,0x80,0x83, 0xFF,0xFF,0xFF,0xFF,0x83,0x40,0x40,0x20,0x10,0x08,0x04,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x7F,0xFF, 0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0x3F,0x3F,0x0F,0x61,0x3F,0x1F,0x2F,0x3F, 0x1F,0x0F,0x00,0x0F,0x07,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1E,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x70,0x3C,0x1F,0x07,0x03,0x01,0x01,0x00,0x00, 0x01,0x07,0x07,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0xEC,0x00, 0x7C,0x44,0x7C,0x00,0x7C,0x40,0x40,0x00,0x7C,0x44,0x38,0x00,0x7C,0x14,0x1C,0x00, 0x7C,0x40,0x40,0x00,0x78,0x24,0x78,0x00,0x7C,0x18,0x18,0x7C,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x10,0x04,0x07,0x00,0x01,0x00,0x00,0x00,0x01, 0x05,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*------------------------------------------*/void wr_lcd (uchar choe1,uchar choe2,uchar data_comm,uchar content){chk_busy (choe1,choe2);if(data_comm){a0=1; //datarw=0; //write}else{a0=0; //commandrw=0; //write}if(choe1==1){P1=content; //output data or comme1=1;;e1=0;}if(choe2==1){P1=content; //output data or comme2=1;;e2=0;}}void chk_busy (uchar choe1,uchar choe2) {if(choe1==1){a0=0;rw=1;e1=1;while(bf==1)delay(2);e1=0;}if(choe2==1){a0=0;rw=1;e2=1;while(bf==1)delay(2);e2=0;}}void delay (unsigned int us) //delay time {while(us--);}void delay1 (unsigned int ms) {unsigned int i,j;for(i=0;i。
(完整word版)LCD1602的单片机驱动详解
![(完整word版)LCD1602的单片机驱动详解](https://img.taocdn.com/s3/m/088132298bd63186bdebbc35.png)
LCD1602的单片机驱动详解一.接口LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片.刚开始接触它的大多是单片机的初学者。
由于对它的不了解,不能随心所欲地对它进行驱动。
经过一段时间的学习,我对它的驱动有了一点点心得,今天把它记录在这里,以备以后查阅。
与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里花点时间是值得的。
一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。
我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚.如图1所示:图1再来一张它的背面的,如图2所示:图2它的16条引脚定义如下:引脚号符号引脚说明引脚号符号引脚说明1VSS电源地9D2数据端口2VDD电源正极10D3数据端口3VO偏压信号11D4数据端口4RS命令/数据12D5数据端口5RW读/写13D6数据端口6E使能14D7数据端口7D0数据端口15A背光正极8D1数据端口16K背光负极对这个表的说明:1。
VSS接电源地。
2. VDD接+5V.3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。
或同样阻值的RM065/RM063蓝白可调电阻。
见图3。
图34。
RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当RS为高电平时,选择数据。
5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据.如果不需要进行读取操作,可以直接将其接VSS。
6. E,执行命令的使能引脚,接单片机的一个I/O。
LCD驱动程序开发指南
![LCD驱动程序开发指南](https://img.taocdn.com/s3/m/17b6d83b657d27284b73f242336c1eb91a37331e.png)
LCD驱动程序开发指南LCD驱动开发指引1、LCD驱动概述LCD驱动程序调试,是整个⼿机研发过程中⾮常重要的⼀个环节,在每个新的机型开发的初期,最先都要调试LCD驱动程序,我们俗称“点屏”。
“点屏”的调试包括两个部分,⼀是点亮LCD的背光,⼆是调试LCD显⽰。
背光驱动调试的⽅法与技巧,会在背光⽂档中叙述,暂不在这篇⽂档⾥讨论,本⽂将重点讨论LCD的电路原理、驱动程序分析、LCD驱动调试经验总结和具体驱动调试案例的分析。
2、LCD原理及电路分析相关概念:LCD:全称是Liquid Crystal Display 液晶显⽰屏LCM:全称是Liquid Crystal Module指的是液晶显术模块,包括液晶屏及液晶的外围FPC电路和结构件。
LCD的FPC电路:指LCM模块中的液晶外围电路,这部分电路由LCD模组⼚家按照我们对LCD的接⼝要求进⾏设计的。
在LCD驱动调试中,看FPC电路图也是很重要的⼀个环节。
LCD外围电路:我们通常也简称为LCD电路,指的是baseband端的LCD接⼝电路部分,这部分电路由我们⾃⾏设计。
LCD模组⼚家:指信利,天马,京东⽅这些⼚家。
他们将LCD制作成可以供我们⽣产使⽤的LCM模组。
2.1LCD芯⽚介绍⽬前⼿机使⽤的⼤部分显⽰器件都是LCD(Liguid Crystal Display)器件,⽬前康佳使⽤的LCM模块由信利、京东⽅、天马、凌达这⼏家⼚商供货。
但是LCM⽣产⼚家对我们调试驱动并没有任何关系,我们需要了解的是LCM所使⽤的IC型号。
因为,我们实际上是对LCD的IC进⾏编程,间接控制LCD⾯板,常⽤的IC有HD66773、S6B33B2/ S6B33B6、HD66777等。
LCD驱动的编程,除了要关注IC的型号,还要关注LCD FPC的电路设计,LCD外围电路设计,基带芯⽚的LCD接⼝单元,背光IC的控制等⼏个⽅⾯,当然也包括软件的上层程序。
下⾯我们就先了解⼀下LCD IC的内部结构,这是编程要关注的最主要⽅⾯。
液晶显示的驱动程序(共6页)
![液晶显示的驱动程序(共6页)](https://img.taocdn.com/s3/m/9347bd5ab94ae45c3b3567ec102de2bd9605ded4.png)
通常我们用的液晶显示都是4*16 的字符/汉字显示:这里介绍(jièshào)4*16 的液晶字符显示驱动程序!//ms 延时void lcd_DelayMs (uint ms){uchar i;while (ms){for (i = 0; i < 254; i++);ms--;}}//串行数据(shùjù)输入一字节void LCD_SendByte(uchar s_data){uchar i;SID=0;SCLK=0;for(i=0;i<8;i++){SID=(bit)(s_data & 0x80);delay(1);SCLK=1;delay(1);s_data<<=1;delay(1);SCLK=0;delay(1);}}//命令(mìng lìng)输入void LCD_SendComm(uchar comm_data){delay(1);LCD_SendByte(0xF8 & 0xFF);//send 1 1 1 1 1 RW=0 RS=0 0 delay(1);LCD_SendByte(comm_data & 0xF0);delay(1);LCD_SendByte((comm_data & 0x0F)<<4);delay(80);} //send D7 D6 D5 D4 0 0 0 0 //send D3 D2 D1 D0 0 0 0 0//数据(shùjù)输入void LCD_SendData(uchar send_data) {LCD_SendByte(0xFA & 0xFF); delay(1); LCD_SendByte(send_data & 0xF0); // 1 1 1 1 1 RW=0 RS=1 0//send D7 D6 D5 D4 0 0 0 0delay(1);LCD_SendByte((send_data & 0x0F)<<4);delay(80);}//send D3 D2 D1 D0 0 0 0 0//设定(shè dìnɡ)光标位置void Set_Cursor(uchar X, Y){if (X == 0){X = 0x80;}else if (X == 1){X = 0x90;}else if (X == 2){X = 0x88;}else if (X == 3){X = 0x98;}Y = X + Y;LCD_SendComm(Y);}//清除(qīngchú)屏幕void lcd_Clear(void){LCD_SendComm(SClear);lcd_DelayMs(30);LCD_SendComm(SOrigin);delay(150);}//显示(xiǎnshì)字符串X:行Y:列void lcd_DispString(uchar X, Y, uchar *msg ){Set_Cursor(X, Y);while (*msg != '\0'){LCD_SendData(*msg++);}}//坐标(zuòbiāo)写入void wrPosition(void){LCD_SendComm(SFunSetE);LCD_SendComm(lcdPosY);LCD_SendComm(lcdPosX);LCD_SendComm(SFunSetB);}//函数功能:全屏显示(xiǎnshì)图形//bmpCls=清除(qīngchú)图形屏幕选项(OFF 为不清屏,即显示图形,ON 为清屏)void lcd_DispPhoto (uchar *bmp, uchar bmpCls){lcdPosX = 0x80;halfScr = 2;for (;halfScr != 0; halfScr--){lcdPosY = 0x80;halfLineCnt = 32;for (;halfLineCnt != 0; halfLineCnt--){basicBlock = 16;wrPosition ();for (; basicBlock != 0; basicBlock--){if (bmpCls == OFF){LCD_SendData (*bmp++);}else if (bmpCls == ON){LCD_SendData (0x00);}}lcdPosY++;}lcdPosX = 0x88;}LCD_SendComm(SFunDrawOn);LCD_SendComm(SFunSetB);}//---------------------------------------------------------//函数(hánshù)原形:void lcd_ConvertChar (uchar CX, CY, width) //函数功能(gōngnéng) :字符反白显示//输入(shūrù)参数://返回值://---------------------------------------------------------void lcd_ConvertChar (uchar CX, CY, width){lcd_DispPhoto(OFF,ON);lcdPosY = 0x80;if (CX == 0){CX = 0x80;halfLineCnt = 16;}else if (CX == 1){CX = 0x80;halfLineCnt = 32;}else if (CX == 2){CX = 0x88;halfLineCnt = 16;}else if (CX == 3){CX = 0x88;halfLineCnt = 32;}lcdPosX = CX + CY;for (; halfLineCnt != 0; halfLineCnt--){basicBlock = width;wrPosition();for (;basicBlock != 0; basicBlock--){if (halfLineCnt > 16){LCD_SendData(0x00);}else{LCD_SendData (0xff);}}lcdPosY++;}LCD_SendComm(SFunDrawOn);LCD_SendComm(SFunSetB);}//---------------------------------------------------------//函数(hánshù)原形:void lcd_LineChoose (uchar line) //函数功能(gōngnéng) :选中某行反白显示//输入(shūrù)参数://返回值://---------------------------------------------------------void lcd_LineChoose (uchar line){if (line<4){lcd_ConvertChar(line,0,16);Set_Cursor(line,7);}}//初始化void LCD_init(void){SCS=0;lcd_DelayMs(30);SCS=1;SCS=1;SCLK=0;lcd_DelayMs(40);LCD_SendComm(SFunSetE); 定(扩充(kuòchōng)指令) delay(300);LCD_SendComm(SFunSetB); 据,基本指令集delay(300); //功能设置,一次送8 位数据,功能设//功能设置(shèzhì),一次送8 位数LCD_SendComm(SDispOn); off,游标位置offdelay(300);LCD_SendComm(SClear);//0000,1100 整体(zhěngtǐ)显示,游标//0000,0001 清DDRAMdelay(300);lcd_DelayMs(1);LCD_SendComm(SEntryMode); lcd_DelayMs(1);LCD_SendComm(SOrigin);//0000,0010 DDRAM 地址(dìzhǐ)归位//1000,0000 设定(shè dìnɡ)DDRAM 7 位地址000 ,0000 到地址计数器AClcd_DelayMs(1);//LCD_SendComm(0x04); //点设定,显示字符/光标从左到右移位,DDRAM 地址加一lcd_DelayMs(1);// LCD_SendComm(0x0f);示位反白闪动lcd_DelayMs(5);}//显示设定,开显示,显示光标,当前显(1)通常我们用的液晶显示都是4*16 的字符/汉字显示:这里介绍4*16 的液晶字符显示驱动程序(2) //ms 延时void lcd_DelayMs (uint ms){uchar i(3) //send 1 1 1 1 1 RW=0 RS=0 0delay(1)(4) // 1 1 1 1 1 RW=0 RS=1 0delay(1)(5) }}lcdPosY++。
128x64 LCD液晶显示屏接口定义和驱动程序
![128x64 LCD液晶显示屏接口定义和驱动程序](https://img.taocdn.com/s3/m/c86072c68bd63186bcebbcac.png)
DB7 X=0 DB0 ∫ PAGE1 DB7 X=1 ∷ ∷ ∷ ∷ DB0 ∫ PAGE6 DB7 X=7 DB0 ∫ PAGE7 DB7 X=8 4.设置列地址 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L H 列地址(0-63) 功能: DD RAM 的列地址存储在 Y 地址计数器中.读写数据对列地址有影响.在对 DD RAM 进行读写操作后.Y 地址自动加一. 5.状态检测 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 H L BF L ON/OFF RST L L L L 功能:读忙信号标志位(BF).复位标志位(RST)以及显示状态位(ON/OFF). BF=H:内部正在执行操作, BF=L:空闲状态. RST=H:正处于复位初始化状态, RST=L:正常状态. ON/OFF=H:表示显示关闭, ON/OFF=L:表示显示开. 6.写显示数据 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L H D7 D6 D5 D4 D3 D2 D1 D0 功能:写数据到 DD RAM.DD RAM 是存储图形显示数据的.写指令执行后 Y 地址计数器自动 加 1.D7-D0 位数据为 1 表示显示.数据为 0 表示不显示.写数据到 DD RAM 前.要先执行[设置 页地址"及[设置列地址"命令. 7.读显示数据 CODE: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 H H D7 D6 D5 D4 D3 D2 D1 D0 功能:从 DD RAM 读数据.读指令执行后 Y 地址计数器自动加 1.从 DD RAM 读数据前要先执 行[设置页地址" 及[设置列地址"命令. 六.接口时序 1.写操作时序 时序 1 4. 读操作时序 *************************************** ********************* 串行连接操作程序
240320触摸屏液晶ILI9325驱动程序
![240320触摸屏液晶ILI9325驱动程序](https://img.taocdn.com/s3/m/b0a824b3dd3383c4bb4cd2ed.png)
/*********************************************************************** ILI9325 TFT彩屏驱动程序*********************************************************************** 文件名: ILI9325.c* 描述:* 公司: 爱晶电子* 作者日期注释*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 王伟民2010/3/20 原始文件********************************************************************/#include "stc.h"//#include <stdio.h>#include "ILI9325.h"#include "delay.h"//=============================================================//TFT初始化//功能:该函数用于初始化TFT彩屏模块。
//入口参数: 无//出口参数: 无void ILI9325_initial(void){TFT_CS=1;delayms(5);TFT_RST=0;delayms(5);TFT_RST=1;delayms(50);//可以适当调整延时,保障稳定显示write_cmd_data(0x0001,0x0100); //源扫描设置SS=0, 输出的移动方向是从S1到S720 //(源扫描设置SS=1, 输出的移动方向是从S720到S1)//SM=0,逐行扫描(SM=1,隔行扫描)write_cmd_data(0x0002,0x0700); //B/C=1、EOR=1:行倒置(B/C=0:帧/场倒置)write_cmd_data(0x0003,0x1030); //AM=0,地址在水平方向自动加1//I/D[1:0] = 11:水平垂直方向均增加//BGR=1:采用BGR格式//TRI=0、DFM=*:8位机、两次数据传送write_cmd_data(0x0004,0x0000); //比例缩放设置:不缩放//显示控制write_cmd_data(0x0008,0x0207); //设置后边沿和前沿write_cmd_data(0x0009,0x0000);//设置非显示区时间间隔ISC[3:0] write_cmd_data(0x000A,0x0000); //帧标记功能write_cmd_data(0x000C,0x0000);//RGB显示接口控制1write_cmd_data(0x000D,0x0000);//帧标记位置write_cmd_data(0x000F,0x0000);//RGB显示接口控制2//电源配置write_cmd_data(0x0010,0x0000);write_cmd_data(0x0011,0x0007);write_cmd_data(0x0012,0x0000);write_cmd_data(0x0013,0x0000);//vghwrite_cmd_data(0x0010,0x1290);write_cmd_data(0x0011,0x0227);//delayms(100);//vregioutwrite_cmd_data(0x0012,0x001d); //0x001b//delayms(100);//vom amplitudewrite_cmd_data(0x0013,0x1500);//delayms(100);//vom Hwrite_cmd_data(0x0029,0x0018);write_cmd_data(0x002B,0x000D);//伽马校正write_cmd_data(0x0030,0x0004);write_cmd_data(0x0031,0x0307);write_cmd_data(0x0032,0x0002);//0006write_cmd_data(0x0035,0x0206);write_cmd_data(0x0036,0x0408);write_cmd_data(0x0037,0x0507);write_cmd_data(0x0038,0x0204);//0200write_cmd_data(0x0039,0x0707);write_cmd_data(0x003C,0x0405);//0504write_cmd_data(0x003D,0x0F02);//窗口设置write_cmd_data(0x0050,0x0000);//水平起始位置write_cmd_data(0x0051,0x00EF);//水平终止位置write_cmd_data(0x0052,0x0000);//垂直起始位置write_cmd_data(0x0053,0x013F);//垂直终止位置write_cmd_data(0x0060,0xA700);//门扫描设置,GS=1:从G320扫描到G1,320线write_cmd_data(0x0061,0x0001);write_cmd_data(0x006A,0x0000);//write_cmd_data(0x0080,0x0000);write_cmd_data(0x0081,0x0000);write_cmd_data(0x0082,0x0000);write_cmd_data(0x0083,0x0000);write_cmd_data(0x0084,0x0000);write_cmd_data(0x0085,0x0000);//write_cmd_data(0x0090,0x0010);write_cmd_data(0x0092,0x0600);write_cmd_data(0x0093,0x0003);write_cmd_data(0x0095,0x0110);write_cmd_data(0x0097,0x0000);write_cmd_data(0x0098,0x0000);write_cmd_data(0x0007,0x0133);//write_cmd_data(0x0022);}//=============================================================//写命令//功能:写一个命令到TFT控制器。
液晶显示的驱动程序
![液晶显示的驱动程序](https://img.taocdn.com/s3/m/a7017c7055270722192ef769.png)
//ms延时
void lcd_DelayMs (uint ms)
{
uchar i;
while (ms)
{
for (i = 0; i < 254; i++);
ms--;
}
}
//串行数据输入一字节
void LCD_SendByte(uchar s_data)
delay(300);
LCD_SendComm(SFunSetB); //功能设置,一次送8位数据,基本指令集
delay(300);
LCD_SendComm(SDispOn); //0000,1100整体显示,游标off,游标位置off
delay(300);
LCD_SendComm(SClear); //0000,0001清DDRAM
//函数原形:void lcd_LineChoose (uchar line)
//函数功能:选中某行反白显示
//输入参数:
//返回值:
//---------------------------------------------------------
void lcd_LineChoose (uchar line)
delay(80);
}
//数据输入
void LCD_SendData(uchar send_data)
{
LCD_SendByte(0xFA & 0xFF); // 1 1 1 1 1 RW=0 RS=1 0
delay(1);
LCD_SendByte(send_data & 0xF0); //send D7 D6 D5 D4 0 0 0 0
1.44寸tftlcd驱动程序详解
![1.44寸tftlcd驱动程序详解](https://img.taocdn.com/s3/m/7004e910cec789eb172ded630b1c59eef8c79a6e.png)
1.44寸tftlcd驱动程序详解1.44寸TFT LCD(TFT液晶显示屏)是一种小型彩色液晶屏,通常应用于嵌入式系统和消费电子产品中。
为了使其正常显示图像,需要编写相应的驱动程序。
下面是对1.44寸TFT LCD驱动程序的详细解析:1. 建立通信:首先,需要确定与TFT LCD之间的通信接口,例如SPI (串行外设接口),I2C(串行总线接口)或并行接口等。
根据选定的接口,配置相应的引脚和通信参数,以确保正确的数据传输。
2. 初始化LCD控制器:接下来,需要初始化LCD控制器。
这包括设置控制器的工作模式、像素格式、扫描方向等。
此外,还需设置LCD的分辨率和颜色模式,以确定显示的像素数和色彩深度。
3. 像素数据传输:在驱动程序中,需要实现像素数据的传输和写入。
根据TFT LCD的工作原理,像素数据一般以行为单位进行传输。
通过逐行扫描,将图像数据按照指定的颜色格式和像素排列方式写入LCD的显示缓冲区。
4. 刷新显示:驱动程序需要定期刷新LCD的显示,以确保图像持续显示并且没有残留。
可以使用定时器中断或其他方式来触发刷新操作。
在刷新过程中,将显示缓冲区的数据传输到实际的LCD面板上,使其显示出正确的图像。
5. 特殊功能:根据不同的TFT LCD型号和应用需求,可能还需要实现一些特殊功能。
例如,调节LCD的亮度、对比度和背光等。
这些功能可以通过操作LCD控制器的寄存器来实现。
6. 错误处理:在驱动程序中,还需要添加适当的错误处理机制。
这可以包括检测和处理通信错误、数据传输错误以及其他异常情况。
通过合理的错误处理,可以提高驱动程序的健壮性和可靠性。
综上所述,编写1.44寸TFT LCD驱动程序需要建立通信接口、初始化LCD控制器、像素数据传输、刷新显示、实现特殊功能以及添加错误处理。
这样的驱动程序可以确保TFT LCD正常工作并显示出准确的图像。
驱动程序的编写需要根据具体的硬件规格和驱动芯片的特性进行调整和优化,以实现最佳的性能和用户体验。
LCD1602液晶屏驱动程序
![LCD1602液晶屏驱动程序](https://img.taocdn.com/s3/m/eaebdb3283c4bb4cf7ecd143.png)
//top module:LCD_1602 module LCD_1602 ( ////////////////////Clock Input//////////////////// CLOCK_50, // 50 MHz ////////////////////LCD Module 16X2//////////////// LCD_ON, // LCD Power ON/OFF LCD_BLON, // LCD Back Light ON/OFF LCD_RW, // LCD Read/Write Select, 0 = Write, 1 = Read
PDF 文件使用 "pdfFactory" 试用版本创建
// Line 1 LCD_LINE1+0: LUT_DATA<=9'h120; LCD_LINE1+1: LUT_DATA<=9'h121; LCD_LINE1+2: LUT_DATA<=9'h122; LCD_LINE1+3: LUT_DATA<=9'h123; LCD_LINE1+4: LUT_DATA<=9'h124; LCD_LINE1+5: LUT_DATA<=9'h125; LCD_LINE1+6: LUT_DATA<=9'h126; LCD_LINE1+7: LUT_DATA<=9'h127; LCD_LINE1+8: LUT_DATA<=9'h128; LCD_LINE1+9: LUT_DATA<=9'h129; LCD_LINE1+10:LUT_DATA<=9'h12a; LCD_LINE1+11:LUT_DATA<=9'h12b; LCD_LINE1+12:LUT_DATA<=9'h12c; LCD_LINE1+13:LUT_DATA<=9'h12d; LCD_LINE1+14:LUT_DATA<=9'h12e; LCD_LINE1+15:LUT_DATA<=9'h12f; //Change Line LCD_CH_LINE: LUT_DATA<=9'h0C0; //Line 2 LCD_LINE2+0: LUT_DATA<=9'h130; LCD_LINE2+1: LUT_DATA<=9'h131; LCD_LINE2+2: LUT_DATA<=9'h132; LCD_LINE2+3: LUT_DATA<=9'h133; LCD_LINE2+4: LUT_DATA<=9'h134; LCD_LINE2+5: LUT_DATA<=9'h135; LCD_LINE2+6: LUT_DATA<=9'h136; LCD_LINE2+7: LUT_DATA<=9'h137; LCD_LINE2+8: LUT_DATA<=9'h138; LCD_LINE2+9: LUT_DATA<=9'h139; LCD_LINE2+10:LUT_DATA<=9'h13a; LCD_LINE2+11:LUT_DATA<=9'h13b; LCD_LINE2+12:LUT_DATA<=9'h13c; LCD_LINE2+13:LUT_DATA<=9'h13d; LCD_LINE2+14:LUT_DATA<=9'h13e; LCD_LINE2+15:LUT_DATA<=9'h13f; default: LUT_DATA<=9'h000; endcase end LCD_Controller u0 ( //Host Side .iDATA(mLCD_DATA), .iRS(mLCD_RS),
常用液晶显示模块驱动程序设计方案
![常用液晶显示模块驱动程序设计方案](https://img.taocdn.com/s3/m/ef7968f55fbfc77da269b1cf.png)
常用液晶显示模块驱动程序设计1常用液晶显示模块驱动程序设计引言第1章绪论1.1 液晶显示器件概述1.1.1液晶显示器件在显示技术中的地位1.1.2液晶显示器件的优异性能及发展前景1.2 论文选题的意义1.3 本文的主要工作第2章液晶显示基本原理及应用基础2.1 液晶显示基本知识2.2 液晶显示原理2.3 液晶显示器件的优点2.4 液晶显示驱动原理2.4.1 静态驱动方法简述2.4.2 动态驱动方法简述第3章液晶显示模块3.1 液晶显示模块的分类3.1.1 数显液晶显示模块3.1.2 点阵字符型液晶显示模块3.1.3 点阵图形液晶显示模块3.2 液晶显示控制器的原理3.2.1 设计特性3.3 液晶显示控制器的应用第4章段式液晶显示模块的原理及应用4.1 段式液晶显示模块LCM061A简介4.1.1 段式液晶显示模块LCM061A的基本功能4.1.2 段式液晶显示模块LCM061A的引脚说明4.1.3 段式液晶显示模块LCM061A指令集…4.2 段式液晶显示模块LCM061A接口方案及论证4.3 段式液晶显示模块LCM061A应用程序设计4.3.1功能程序模块详解4.3.2程序设计流程图第5章字符型液晶显示模块的原理及应用5.1 字符型液晶显示模块基本特点5.2 字符型液晶显示控制及驱动器HD447805.2.1 HD44780的特点5.2.2 HD44780的硬件工作原理5.2.3 HD44780的指令集5.3 基于HD44780字符型液晶显示器LCM1602的原理及应用5.3.1 字符型液晶显示器LCM1602的原理5.3.2 字符型液晶显示器LCM1602接口方案及论证5.4 字符型液晶显示器LCM1602应用程序设计5.4.1 程序设计流程图5.4.2 功能程序模块详解第6章图形式液晶显示模块的原理及应用6.1 图形式液晶显示模块的基本特点6.2 图形式液晶显示控制及驱动器HD612026.2.1 HD61202的特点6.2.2 HD61202硬件工作原理6.2.3 HD61202的硬件工作原理6.2.4 HD61202的指令集6.3 基于HD61202图形式液晶显示器LGM12864应用6.3.1 图形式液晶显示器LGM12864原理6.3.2 图形式液晶显示器LGM12864接口方案及论证6.4 图形式液晶显示器LG12864应用程序设计6.4.1 功能程序模块详解6.4.2 程序设计流程图第7章仿真总结致谢参考文献附录A HD44780的内部字符集附录B程序清单附录C 芯片引脚图【摘要】由于液晶显示模块特殊的连接方式和所需的专用设备并非人人了解,因此虽然它已应用广泛,但用户在使用、装配时感到困难。
液晶电视,各单元工作流程
![液晶电视,各单元工作流程](https://img.taocdn.com/s3/m/31652633dcccda38376baf1ffc4ffe473368fdc8.png)
液晶电视,各单元工作流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!液晶电视单元工作流程:1. 信号源输入:用户使用遥控器或其他控制方式选择电视输入信号源,如天线、HDMI、USB等。
液晶显示电冰箱温控器源程序共9页word资料
![液晶显示电冰箱温控器源程序共9页word资料](https://img.taocdn.com/s3/m/927d8031cf84b9d528ea7ada.png)
液晶显示电冰箱温控器源程序#include <AT89X51.H> //器件配置文件#include <intrins.h>sbit LCM_RS=P3^3; //引脚定义sbit LCM_RW=P3^4; //引脚定义sbit LCM_EN=P3^5; //引脚定义sbit OUT=P3^6; //控制继电器sbit TSOR=P3^7; //温度测试端#define Busy 0x80 //常量定义#define uchar unsigned char#define uint unsigned int#define DATAPORT P1#define reset() {WDT=0x1e;WDT=0xe1;}//看门狗启动/复位宏定义sfr WDT=0xa6;//看门狗寄存器定义bit ON_OFF;bit outflag;uchar temp1,temp2;uchar cnt;uchar deda,sec; //时间变量char min,hour;char set,T;uchar data buff[10];uchar ReadStatusLCM(void);//读数据到MCU子函数声明uchar code str0[]={"--- : : --- "};//待显字符串uchar code str1[]={"SET: C SA: . C"};uchar code str2[]={" "};//待显空字符串//====================函数声明======================= void fun0(void);void fun1(void);void fun2(void);void fun3(void);void set_adj(void);void inc_key(void);void dec_key(void);void key(void);void gettempTS(void);void initTS(void);uchar readBTS(void);void writeBTS(uchar byte);void resetTS(void);bit readTS(void);void write1TS(void);void write0TS(void);void delay15us(void);void delay60us(void);//********延时K*1mS,12.000MHz*********void delay(uint k)//函数名为delay的延时子函数。
单片机,LCD.C液晶驱动程序
![单片机,LCD.C液晶驱动程序](https://img.taocdn.com/s3/m/91c6c0d3b9f3f90f76c61bc9.png)
附录二LCD.C液晶驱动程序#include"REG51F.h"#include"intrins.h"#include"USEH1.h"#include"lcd.h"#include"HZcode.h"bit busy_bit=1;//函数声明============================== void nop(void);bit CheckBusy(void); //状态检查//写显示数据//dat:显示数据void WriteByte(uchar dat);//向LCD发送命令//command :命令SendCommandToLCD(uchar command);//函数定义============================== void nop(void){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}//状态检查bit CheckBusy(void){uchar state=0;P1=0xFF;//空读操作RW=1;DI=0;EN=1;state=P1;EN=0;P1=0xFF;//再读才有效RW=1;DI=0;EN=1;state=P1;EN=0;busy_bit=(bit)(state>>7); return(busy_bit);}//写显示数据//dat:显示数据void WriteByte(uchar dat) {while(CheckBusy());DI=1;RW=0;LCD_P=dat;EN=1;EN=0;}/*-------------------------------------------------------------*/ //向LCD发送命令//command :命令SendCommandToLCD(uchar command){while(CheckBusy());RW=0;DI=0;LCD_P=command;EN=1;EN=0;}/*-------------------------------------------------------------*/ //设定行地址(页)--X 0-7void SetLine(uchar line){line &= 0x07; // 0<=line<=7line |= 0xb8; //1011 1xxxSendCommandToLCD(line);}//设定列地址--Y 0-63void SetColumn(uchar column){column &= 0x3f; // 0=<column<=63column |= 0x40; //01xx xxxxSendCommandToLCD(column);}//设定显示开始行--XXvoid SetStartLine(uchar startline) //0--63{//startline &= 0x07;startline |= 0xc0; //1100 0000SendCommandToLCD(startline);}//开关显示void SetOnOff(uchar onoff){onoff|=0x3e; //0011 111xSendCommandToLCD(onoff);}/*-----------------------------------------------------------*/ //选择屏幕//screen: 0-全屏,1-左屏,2-右屏void SelectScreen(uchar screen){ //显示器:负有效 CS1: 0--右; CS2: 0--左switch(screen){case 0:CS1=0;//全屏nop();CS2=0;nop();break;case 1:CS1=1;//左屏nop();CS2=0;nop();break;case 2:CS1=0;//右屏nop();CS2=1;nop();break;default:break;}}/*------------------------------------------------------------*/ //清屏//screen: 0-全屏,1-左屏,2-右void ClearScreen(uchar screen){uchar i,j;SelectScreen(screen);for(i=0;i<8;i++){SetLine(i);for(j=0;j<64;j++){SetColumn(j);WriteByte(0x00);}}}/*-------------------------------------------------------------*/ //显示8*8点阵//lin:行(0-7), column: 列(0-127)//address : 字模区首地址void Show8x8(uchar lin,uchar column,uchar *address){uchar i;//if(column>128) {return;}if(column<64){SelectScreen(1); //如果列数<64则从第一屏上开始写SetLine(lin);SetColumn(column);for(i=0;i<8;i++){if(column+i<64){WriteByte(*(address+i));}else{SelectScreen(2);SetLine(lin);SetColumn(column-64+i);WriteByte(*(address+i));}}}else{SelectScreen(2); //否则从第二屏上开始写column-=64; //防止越界SetLine(lin);SetColumn(column);for(i=0;i<8;i++){if(column+i<64){WriteByte(*(address+i));}else{SelectScreen(1);SetLine(lin);SetColumn(column-64+i);WriteByte(*(address+i));}}}}/*-------------------------------------------------------------*/ //显示汉字16*16void ShowChina(uchar lin,uchar column,uchar num){uchar *address;//if(lin>7 || column>127){return;}address = &HZcode[num][0];Show8x8(lin,column,address);Show8x8(lin,column+8,address+8);Show8x8(lin+1,column,address+16);Show8x8(lin+1,column+8,address+24);}/*------------------------------------------------------------*/void InitLCD(void) //初始化LCD{uchar i=2000; //延时while(i--);SetOnOff(1); //开显示ClearScreen(1);//清屏ClearScreen(2);SetStartLine(0); //开始行:0}/*-------------------------------------------------------------*//*------------------------------------------------------------*///显示图片//lin:行(0-7), column: 列(0-127)//high:高度, width:宽度(要为8的倍数)//address : 图片区首地址void ShowPicture(uchar lin, uchar column, uchar high, uchar width, uchar *address) {uchar i, j;//if(column>128) {return;}if(column<64){for(j=0;j<high;j+=8){SelectScreen(1); //如果列数<64则从第一屏上开始写SetLine(lin);SetColumn(column);for(i=0;i<width;i++){if(i+column>127)break;if(column+i<64){WriteByte(*(address+i));}else{SelectScreen(2);SetLine(lin);SetColumn(column-64+i);WriteByte(*(address+i));}}lin+=1;address+=width;}}else{column-=64; //防止越界for(j=0;j<high;j+=8){SelectScreen(2); //否则从第二屏上开始写 SetLine(lin);SetColumn(column);for(i=0;i<width;i++){if(i+column>64)break;if(column+i<64){WriteByte(*(address+i)); }else{SelectScreen(1);SetLine(lin);SetColumn(column-64+i); WriteByte(*(address+i)); }}lin+=1;address+=width;}}}。