液晶显示程序.doc

合集下载

12864液晶显示程序51驱动

12864液晶显示程序51驱动

#include <reg52.h>#include <intrins.h>sbit LCD_RS =P0^0; //L:COMMAND; H:DATA sbit LCD_RW =P0^1; //L:WRITE; H:READ sbit LCD_E =P0^2; //INPUT ENABLEsbit LCD_CS1 =P0^3; //L有效sbit LCD_RES =P0^4; //L有效#define data_bus P2#define control_bus P0#define uchar unsigned char#define uint unsigned int//=====延时N微秒==============void delay_nus(uint n){while(n--);return;}//=====延时N毫秒==============void delay_nms(uint n){int i;for(i=0;i<n;i++)delay_nus(123);}//=====忙检测=================void check_busy(void){uchar read_data=0xff;data_bus=0xff;LCD_RS=0;LCD_RW=1; //读命令LCD_CS1=0; //片使能while((read_data&0x80)==0x80){LCD_E=1;_nop_();_nop_();read_data=data_bus;LCD_E=0;}LCD_E=0;LCD_CS1=1; //片禁能}//=====写命令到寄存器========= void send_cmd(uchar cmd) small{check_busy();LCD_RS=0; //写的是命令LCD_RW=0; //写命令LCD_CS1=0; //片使能data_bus=cmd;LCD_E=1; //使能_nop_();_nop_();LCD_E=0;_nop_();_nop_();LCD_CS1=1; //片禁能}//=====写数据到DDRAM========= void send_dat(uchar dat) small{check_busy();LCD_RS=1; //写的是数据LCD_RW=0; //写数据LCD_CS1=0; //片使能data_bus=dat;LCD_E=1;_nop_();_nop_();LCD_E=0;_nop_();_nop_();LCD_CS1=1; //片禁能}//=======初始化============== void lcd_initial(void) small{LCD_RES=0;delay_nms(50);LCD_RES=1;LCD_E=0;delay_nms(50);send_cmd(0xA0);send_cmd(0xC8);send_cmd(0xA2);send_cmd(0x2C);send_cmd(0x2E);send_cmd(0x2F);send_cmd(0x25);send_cmd(0x81);send_cmd(0x14);send_cmd(0xAF);send_cmd(0xE0);send_cmd(0x40);}//=======写列地址==============void Set_Colume_Address(unsigned char dat){unsigned char tmp;tmp=dat>>4;send_cmd(0x10|tmp); //送列地址高三位tmp=0x0f&dat;send_cmd(tmp); //送列地址低四位}code unsigned char number[][16] = {/*-- 文字: 0 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*-- 文字: 3 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 6 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 7 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*-- 文字: 8 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*-- 文字: 9 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*-- 文字: : --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, /*-- 文字: - --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01}; code unsigned char Hz[][32] = {/*-- 文字: 中--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/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,/*-- 文字: 鼎--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF8,0x00,0x00,0x7E,0x52,0x66,0x4A,0x52,0x7E,0x00,0x00,0xF8,0x00,0x00, 0x00,0x84,0x65,0x1D,0x05,0x05,0xFF,0x00,0x00,0xFF,0x05,0x05,0x05,0xFD,0x00,0x00,/*-- 文字: 技--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/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,/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0x10,0x10,0x10,0x90,0x50,0xFF,0x50,0x90,0x12,0x14,0x10,0x10,0x10,0x00, 0x10,0x10,0x08,0x04,0x02,0x01,0x00,0x7F,0x00,0x00,0x01,0x06,0x0C,0x18,0x08,0x00 };/****显示汉字的程序****/void DisplayHz(unsigned int Page,unsigned int Col,unsigned char Hz[],unsigned int zilie) {unsigned int PageCnt,ColCnt;for(PageCnt = Page;PageCnt < Page+2;PageCnt ++){send_cmd(0xb0|PageCnt); //page addressSet_Colume_Address(Col);for(ColCnt = 0;ColCnt < zilie;ColCnt ++){send_dat(Hz[(PageCnt-Page)*zilie + ColCnt]);}}}//=====主程序===================void main (void){unsigned char month=0,nian=10,yue=1,tian=1,shi=0,fen=0,miao=0,i=0,j=0; unsigned char months[12]={31,28,31,30,31,30,31,31,30,31,30,31};lcd_initial();send_cmd(0xa6);for(i=0;i<8;i++) //清屏{send_cmd(0xb0|i);Set_Colume_Address(0);for(j=0;j<128;j++)send_dat(0);}while(1){if(++miao>59){miao=0;if(++fen>59){fen=0;if(++shi>23){shi=0;if(++tian>months[month]){tian=0;if(++yue>11){yue=1;nian++;}}}}}DisplayHz(0,0,number[nian/10],8);DisplayHz(0,16,number[nian%10],8);DisplayHz(0,32,number[11],8);DisplayHz(0,48,number[yue/10],8);DisplayHz(0,64,number[yue%10],8);DisplayHz(0,80,number[11],8);DisplayHz(0,96,number[tian/10],8);DisplayHz(0,112,number[tian%10],8);DisplayHz(3,0,number[shi/10],8);DisplayHz(3,16,number[shi%10],8);DisplayHz(3,32,number[10],8);DisplayHz(3,48,number[fen/10],8);DisplayHz(3,64,number[fen%10],8);DisplayHz(3,80,number[10],8);DisplayHz(3,96,number[miao/10],8);DisplayHz(3,112,number[miao%10],8);DisplayHz(6,14,Hz[0],16);DisplayHz(6,42,Hz[1],16);DisplayHz(6,70,Hz[2],16);DisplayHz(6,98,Hz[3],16);delay_nms(6000);}}。

12864液晶显示器(ST7920)显示程序(并口)

12864液晶显示器(ST7920)显示程序(并口)

12864液晶显示器(ST7920)显示程序(并口) 附字模软件作者:纪小年16 七月2009 时间:下午10:25 and have 10 条评论前两天写了一个ST7920控制12864显示的串口程序,今天瞎逛的时候发现了这个超强悍的并口程序,转载一下。

来源:CnChina做了比较详细的注释,看不懂的可以问我。

下面的图片中12864所显示的logo就是我用这个程序得到的。

附程序:/******************************************************************** **********Copyright 2007All rights reserved.文件名: .c模块名称:st7920 并行方式驱动12864液晶驱动功能概要:st7920显示驱动取代版本:0.0.1修改人:pulan完成日期:2007.07.08升级说明:createCPU: stc89c58 主频:11.0592M液晶型号:128*64 生产厂家:驱动芯片:st7920********************************************************************* *********/#include#define uint unsigned int#define uchar unsigned char#define x1 0x80 //1000 0000#define x2 0x88 //1000 1000#define y 0x80 //1000 0000#define comm 0 //定义传送指令代码为0#define dat 1 //定义传送数据代码为1sbit RS = P2^0; //H=数据; L=指令;sbit RW = P2^1; //H=读操作; L=写操作;sbit E = P2^3; //使能端sbit PSB= P2^4; //H=并口; L=串口;sbit RST= P2^2; //复位信号低电平有效sbit busy=P0^7; //LCD忙信号void wr_lcd (uchar dat_comm,uchar content);void chk_busy (void);void delay (uint us);uchar code tab1[]={"本系列中文模块内""任意位置反白显示""置二级字库,可在""使用更方便更灵活"};uchar code tab31[]={"金鹏科技有限公司""Golden Palm TECH"};uchar code tab32[]={/*-- 调入了一幅图像:F:\梁\画图\HOCO12832.bmp --*//*-- 宽度x高度=128x32 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00 ,0x00,0x00,0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03 ,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F ,0xFF,0xC0,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C ,0x01,0xE0,0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF ,0xFC,0x60,0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE ,0x0F,0x30,0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF ,0xF1,0x90,0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF ,0xFC,0x90,0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF ,0xFC,0xD0,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF ,0xFE,0x50,0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF ,0xFE,0x90,0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF ,0xFE,0x80,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF ,0xFA,0x00,0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF ,0xFA,0x00,0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF ,0xBA,0x00,0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF ,0xB8,0x00,0x00,0xC1,0xC0,0x3F,0xFC,0x00,0x01,0x01,0xE0,0x40,0x00,0xFF,0xFF,0xDF ,0xB0,0x00,0x00,0x81,0xC0,0x3F,0xCE,0x00,0x00,0x81,0xE0,0x80,0x00,0x7F,0xFF,0xDF ,0xA0,0x00,0x00,0x81,0x80,0x1D,0xCF,0x00,0x00,0x41,0xE1,0x00,0x00,0x3F,0xFF,0x9B ,0x00,0x00,0x01,0x83,0x80,0x1F,0xC7,0x80,0x00,0x21,0xE2,0x00,0x00,0x1F,0xFD,0xB6 ,0x00,0x00,0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20 ,0x00,0x00,0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00 ,0x00,0x00,0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00 ,0x00,0x00,0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00 ,0x00,0x00,0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00 ,0x00,0x00,0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x77,0x76,0x47,0x54,0x80,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00};uchar code tab5[]={/*-- 调入了一幅图像:F:\梁\画图\COCK.bmp --*//*-- 宽度x高度=128x64 --*/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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x0F,0xFF,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x43,0x01,0x80,0x00,0x7F,0xFF,0xF0,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xFF,0x07,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0xFC,0x1E,0x00,0x1F,0xFF,0xFF,0xFF,0x80,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xBF,0xFF,0xFC,0x00,0x7F,0xFC,0x00,0x7F,0xC0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x00,0xFF,0xC0,0x00,0x0F,0xE0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFC,0x01,0xF0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xDF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0xF0,0x00 ,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x38,0x00 ,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xF0,0x03,0xF8,0x38,0x00 ,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x3F,0xFF,0xFF,0xC0,0x7C,0x18,0x00 ,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xF0,0x00,0x3F,0xFF,0xFF,0xF8,0x1E,0x08,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x7F,0xFF,0xFF,0xFE,0x0F,0x08,0x00 ,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,0x87,0x08,0x00 ,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x83,0x88,0x00 ,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xC3,0x88,0x00 ,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00 ,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF1,0x88,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF3,0x08,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xF2,0x10,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xF0,0x20,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x7F,0x20,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x7F,0x20,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x7E,0x20,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x3E,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFF,0x3C,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFE,0x38,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x38,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x30,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x7C,0x20,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x1E,0x78,0x00,0x40,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x1E,0xF0,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xDA,0x3C,0xE0,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF2,0x30,0x80,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF1,0x20,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x40,0x04,0xD8,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x0F,0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x40,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,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};/******************************************************************** *********************** 函数名称:init_lcd* 功能描述:初始化LCD********************************************************************* *********************/void init_lcd (void){RST = 1;PSB = 1;wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(comm,0x01); //0000 0001 清屏——将DDRAM填满"20H",并且设定DDRAM的地址计数器为"00H"wr_lcd(comm,0x06); //0000 0110 进入点设定——指定在数据的读取与写入时,设定游标的移动方向wr_lcd(comm,0x0c); //0000 1100 游标或显示移位控制——开显示,关游标}/******************************************************************** *********************** 函数名称:chn_disp* 功能描述:显示汉字或字符********************************************************************* *********************/void chn_disp(uchar code *chn){uchar i,j; //i为横坐标,j为纵坐标wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(comm,0x80); //1000 0000 设定DDRAM地址——0000000for(j=0;j<4;j++) //写四行数据{for(i=0;i<16;i++)wr_lcd(dat,chn[j*16+i]);}}/******************************************************************** *********************** 函数名称:chn_disp1* 功能描述:上半屏显示汉字或字符********************************************************************* *********************/void chn_disp1(uchar code *chn){uchar i,j;wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(comm,0x80); //1000 0000 设定第一行的DDRAM 地址——0x80j=0; //第一行for(i=0;i<16;i++)wr_lcd(dat,chn[j*16+i]);wr_lcd(comm,0x90); //1001 0000 设定第二行的DDRAM 地址——0x90j=1; //第二行for(i=0;i<16;i++)wr_lcd(dat,chn[j*16+i]);}/******************************************************************** *********************** 函数名称:img_disp* 功能描述:显示图形********************************************************************* *********************/void img_disp(uchar code *img){uchar i,j;for(j=0;j<32;j++) //绘制上半屏{for(i=0;i<8;i++){wr_lcd(comm,0x34); //0011 0100 扩充功能设定——8位数据扩充指令操作绘图开wr_lcd(comm,y+j); //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0wr_lcd(comm,x1+i); //1000 0xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(dat,img[j*16+i*2]);wr_lcd(dat,img[j*16+i*2+1]);}}for(j=32;j<64;j++) //绘制下半屏{for(i=0;i<8;i++){wr_lcd(comm,0x34); //0011 0100 扩充功能设定——8位数据扩充指令操作绘图开wr_lcd(comm,y+j-32); //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0wr_lcd(comm,x2+i); //1000 1xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0wr_lcd(comm,0x30); //0011 0000 扩充功能设定——8位数据基本指令操作wr_lcd(dat,img[j*16+i*2]);wr_lcd(dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36); //0011 0110 扩充功能设定——8位数据扩充指令操作绘图关}/******************************************************************** *********************** 函数名称:img_disp1* 功能描述:下半屏显示图形********************************************************************* *********************/void img_disp1(uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd(comm,0x34);wr_lcd(comm,y+j);wr_lcd(comm,x2+i);wr_lcd(comm,0x30);wr_lcd(dat,img[j*16+i*2]);wr_lcd(dat,img[j*16+i*2+1]);}}wr_lcd(comm,0x36);}/******************************************************************** *********************** 函数名称:lat_disp* 功能描述:显示点阵********************************************************************* *********************/void lat_disp(uchar data1,uchar data2){uchar i,j,k,x;x=x1; //1000 0000for(k=0;k<2;k++) //第一次循环x=1000 0000 第二次循环x=1000 1000{for(j=0;j<16;j++){for(i=0;i<8;i++){wr_lcd(comm,0x34); //0011 0100 扩充功能设定——8位数据扩充指令操作绘图开wr_lcd(comm,y+j*2);wr_lcd(comm,x+i);wr_lcd(comm,0x30);wr_lcd(dat,data1);wr_lcd(dat,data1);}for(i=0;i<8;i++){wr_lcd(comm,0x34);wr_lcd(comm,y+j*2+1);wr_lcd(comm,x+i);wr_lcd(comm,0x30);wr_lcd(dat,data2);wr_lcd(dat,data2);}}x=x2;}wr_lcd(comm,0x36);}/******************************************************************** *********************** 函数名称:con_disp* 功能描述:当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl ********************************************************************* *********************/void con_disp(uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl){uchar i,j;for(j=0;j< pre> 。

单片机控制LCD液晶显示器(含程序)

单片机控制LCD液晶显示器(含程序)

液晶显示器一.实验目的:1.了解全点阵图形LCD的结构和原理掌握在MSP430上如何使用外设。

2.了解LCD显示器的工作原理、种类(笔段型、点阵字符型、点阵图形)及主要性能指标。

3.掌握图形点阵LCD的编程使用方法;理解LCD显示模块命令的种类、功能及使用方法。

4.了解LCD字符生成软件的使用方法(见附录)。

二.实验内容:1.在LCD上显示Hello和中文字“南京工业大学”。

2.通过键盘控制Hello或者中文字符在LCD上左右、上下移动。

3.学会使用字符生成软件来实现任意字符代码的生成和显示。

4.其他另外可以实现的目标:使字符在按键没有松动的情况下连续移动;实现字符的循环移动,即当字符串移动到边界时仍可以移动,显示不完的部分从另一边显示出来。

三.实验原理:1.图形点阵式液晶原理液晶是一种具有规则性分子排列的有机化合物,它既不是液体也不是固体,而是介于固态和液态之间的物质。

液晶具有电光效应和偏光特性,这是它能用于显示的主要原因。

常用的液晶显示器可分成3类,分别是扭曲向列型(Twisted Nematic)、超扭曲向列型(Super TN)和彩色薄膜型。

字符点阵式属于扭曲向列型LCD。

典型的字符点阵式液晶显示器是由控制器、驱动器、字符发生器ROM、字符发生器RAM和液晶屏组成,字符由5*7 点阵或5*10点阵组成。

一般结果如图一所示:图一 128x64 点阵图形液晶模块方框示意图此次实验所用的LCD型号是RT12864CT。

12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128*64全点阵液晶显示器组成。

可完成图形显示,也可以显示8*4个(16*16)汉字。

管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD +5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/ R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏)信号16 CS2 H/L H:选择芯片(左半屏)信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED+ - LED背光板电源20 LED- - LED背光板电源表1:12864LCD的引脚说明128x64 点阵图形液晶模块的内部结构可分为三个部分:LCD 控制器,LCD 驱动器,LCD 显示装置。

LCD原理及显示程序

LCD原理及显示程序

在日常生活中,我们对液晶显示器并不陌生。

液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。

在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED 数码管、液晶显示器。

发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。

在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。

因此,液晶显示器画质高且不会闪烁。

数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。

液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。

除了黑白显示外,液晶显示器还有多灰度有彩色显示等。

如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。

③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。

液晶显示器的程序设计简洁范本

液晶显示器的程序设计简洁范本

液晶显示器的程序设计简洁范本
```cpp
#include <LiquidCrystal.h>
// 定义LCD Pin
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setu
//初始化LCD
lcd.begin(16, 2);
//显示欢迎信息
lcd.print("LCD Program");
void loo
//滚动显示消息
lcd.scrollDisplayLeft(;
//延迟一段时间
delay(1000);
```
这是一个基本的液晶显示器程序,使用LiquidCrystal库来控制液晶
显示器。

在setup函数中,我们初始化了液晶显示器,并显示了欢迎信息。

在loop函数中,我们使用scrollDisplayLeft函数来滚动显示LCD上的
内容,之后使用delay函数延迟一段时间,以便观察滚动效果。

这只是一个简单的范本,液晶显示器的程序设计还可以根据实际需求
进行扩展和修改。

例如,我们可以通过增加按钮控制来实现菜单选择功能,或者通过使用传感器来动态更新显示内容等。

总结起来,液晶显示器的程序设计需要了解液晶显示器的硬件接口和
使用方法,并与所使用的开发板或单片机进行合适的软硬件连接。

通过使
用合适的库函数,可以轻松地实现各种液晶显示器的功能和效果。

12232液晶汉字图形显示程序

12232液晶汉字图形显示程序

12232液晶汉字图形显示程序时间:2006-08-08 来源: 作者: 点击:4879 字体大小:【大中小】硬件:TG12232B (122*32)模拟口线接线方式连接线图:--------------------------------------------------||DB0-----P0.0 | DB4-----P0.4 | RW-------P1.1 | A0--------P1.0 ||DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 | V0接1K电阻到GND ||DB2-----P0.2 | DB6-----P0.6 | E1-------P1.3 ||DB3-----P0.3 | DB7-----P0.7 | E2-------P1.2 |---------------------------------------------------[注:AT89x52使用22.1184M或11.0592M晶振,实测使用22.1184M或11.0592都可以] 编译平台:Keil uV2 7.08//可能看起来有点乱,不过效果还是不错的,显示图形总的来说比显示汉字要简单,当然显示汉字也不难。

希望此程序能给你一些帮助。

====================================================== =======*/#include <AT89X52.H>#define uchar unsigned char#define uint unsigned int#define E1 P1_3 //块1 左边#define E2 P1_2 //块2 右边#define RW P1_1#define A0 P1_0 //A0为1时是数据,0时为指令数据#define DATA P0 //数据extern unsigned char code Bmpt1[];extern unsigned char code Bmpt2[];extern unsigned char code Bmpt3[];extern unsigned char code Bmpt4[]; extern unsigned char code Bmpt5[]; extern unsigned char code Bmpt6[]; extern unsigned char code Bmpt7[]; extern unsigned char code Bmptc[]; extern unsigned char code bmp001[]; extern unsigned char code Bmp08[]; extern unsigned char code Bmp07[]; extern unsigned char code Bmp06[]; extern unsigned char code Bmp05[]; extern unsigned char code Bmp04[]; extern unsigned char code Bmp03[]; extern unsigned char code Bmp02[]; extern unsigned char code Bmp01[]; extern unsigned char code Bmp012[]; extern unsigned char code Bmp003[]; extern unsigned char code Bmp002[];//延时void delay(unsigned int i){unsigned char k=200;while(i>0){i--;}while(k>1)k--;}//左页//发送数据void OUTMD(unsigned char i){A0=1; //写数据//delay(5);E1=1;DATA=i;//delay(5);E1=0;}//左页//发送命令void OUTMI(unsigned char i) {A0=0; //写指令//delay(5);E1=1;//delay(10);DATA=i;//delay(5);E1=0;}//右页//发送数据void OUTSD(unsigned char i) {A0=1; //写数据//delay(5);E2=1;//delay(10);DATA=i;//delay(5);E2=0;}//右页//发送命令void OUTSI(unsigned char i) {A0=0; //写指令E2=1;//delay(10);DATA=i;//delay(5);E2=0;}//初始化void lcdini(void){RW=0;OUTMI(0XE2);OUTSI(0XE2);//复位OUTMI(0XAE);OUTSI(0XAE);//POWER SAVEOUTMI(0XA4);OUTSI(0XA4);//动态驱动OUTMI(0XA9);OUTSI(0XA9);//1/32占空比OUTMI(0XA0);OUTSI(0XA0);//时钟线输出OUTMI(0XEE);OUTSI(0XEE);//写模式OUTMI(0X00);OUTMI(0XC0);OUTSI(0X00);OUTSI(0XC0);OUTMI(0XAF);OUTSI(0XAF);}/*函数说明:同时设置主从显示页为0-3页。

LCD液晶显示屏(介绍及程序GOOD)

LCD液晶显示屏(介绍及程序GOOD)

第一节:了解LCD液晶显示屏作者:尘封往事文章来源:本站原创点击数:2097 更新时间:2005-11-14 10:43:40一:字符型点阵式LCD液晶显示屏:LCD的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者是电脑笔记本上的液晶显示器,都使用了LCD。

在一般的办公设备上也很常见,如传真机,复印机,以及一些娱乐器材玩具等也常常见到LCD的足迹。

本站要介绍的LCD为字符型点阵式LCD模块(liquid Crystal Display Module)简称LCM,或者是字符型LCD。

字符型液晶显示模块是一种专门用于显示字母,数字,符号等的点阵式液晶显示模块。

在显示器件上的电极图型设计,它是由若干个5*7或5*11等点阵符位组成。

每一个点阵字符位都可以显示一个字符。

点阵字符位之间有一空点距的间隔起到了字符间距和行距的作用。

目前市面上常用的有16字*1行,16字*2行,20字*2行和40字*2行等的字符模块组。

这些LCM虽然显示字数各不相同,但是都具有相同的输入输出界面。

上图为1602LCD在本站2004学习套件上显示一个字母A的运行图片本章将以16*2字符型液晶显示模块RT-1602C为例,详细介绍字符型晶显示模块的应用技术。

一般字符LCD模块的控制器为日本日立公司的HD44780及其替代集成电路,驱动器为HD44100及其替代的集成电路以下将会略做介绍。

一般初学者由字符型LCD入手比较简单,学完之后,再进一步控制图案型LCD模块。

图1.1所示为16*2地的外观,表1.2为LCM的接脚及功能。

二、1602的外形尺寸三、1602的接口信号说明:编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 Data I/O2 VDD 电源正极10 D3 Data I/O3 VL 液晶显示偏压信号11 D4 Data I/O4 RS 数据/命令选择端(H/L )12 D5 Data I/O5 R/W 读/写选择端(H/L)13 D6 Data I/O6 E 使能信号14 D7 Data I/O7 D0 Data I/O 15 BLA 背光源正极8 D1 Data I/O 16 BLK 背光源负极表1.4:液晶显示模块RT-1602C的接脚及功能第二节:LCD液晶显示屏的内部结构作者:尘封往事文章来源:本站原创点击数:1722 更新时间:2005-11-14 10:51:20液晶显示模块WM-C1602N的内部结构可以分成三部份:一为LCD控制器,二为LCD驱动器,三为LCD显示装置,如图示2.1所示:地址计数器AC用户自定义的字符发生器CGRAMCGRAM为可自编数据区DDRAM为显示缓冲区;内藏的字符发生存储器(CGROM)图2.1:LCM内部方块图目前大多数的LCD液晶显示器的控制器都有采用一颗型号为HD44780的集成电路作控制器。

LCD(液晶显示器)工艺流程

LCD(液晶显示器)工艺流程

工艺流程一、LCD 显示基本结构和原理: 一般TN型液晶显示器结构如图所示。

1、偏光片:偏光片有一个固定的偏光轴.偏光片的作用是只允许振动方向与其偏光轴方向相同的光通过,而振动方向与偏光轴垂直的光将被其吸收.这样,当自然光通过液晶盒的入射偏光片(称为起偏器)后,只剩下振动方向与起偏器偏光轴相同的光,即成为线性偏振光。

2、ITO 玻璃:在平整的玻璃基板上镀了一层氧化铟锡层。

3、液晶:具有类似晶体的各向异性的液态物质。

4、取向层:液晶盒中玻璃片内侧的整个显示区覆盖着一层有机物聚酰亚胺取向薄层,这个取向层经用毛绒布定向摩擦,在薄层上会形成数纳米宽的细沟槽,从而会使长棒型的液晶分子沿沟槽平行排列.而上下两片玻璃的取向层是相互垂直的。

故在液晶层中间的液晶分子是逐渐扭曲的。

扭曲向列相液晶显示的工作原理 如下图:排列盒无外加电压()排列盒有外加电压()上图表示了在正交偏光片之间设置TN 排列液晶盒时的电光效应,在这种情况下,自然光经过偏光片(检偏)后出射垂直振动方向的偏振光,经过90度扭曲时,偏振方向亦顺着液晶旋转了90度。

故无外加电压时光能透过,图5-2—2(a),而在施加一定电压时,由于液晶分子发生了偏转,分子长轴方向与电场方向一致,光的旋光性消失,光被遮断,图5—2-2(b)。

如果把电极制作成图形,即实现了显示。

但如果在平行偏光片之间设置TN排列液晶盒,则光的透过与遮断关系就恰好与上述情形相反。

这种TN效应已成为目前正在广泛普及的TN型液晶显示元件的工作原理并获得实际应用,可以用于实现白色背景上黑色图案或者黑色背景上白色图案的显示。

二、工艺流程简介:液晶显示器主要由ITO导电玻璃、液晶、偏光片、封接材料(边框胶)、导电胶、取向层、衬垫料等组成。

液晶显示器制造工艺流程就是这些材料的加工和组合过程。

液晶显示器制造全部过程大体分为40多道工序,其中实际TN—LCD制程有20多道工序。

实际STN—LCD制程有30多道工序。

LCD显示程序

LCD显示程序

;************************************************************************** ;************************************************************** TEMPER_L EQU 36H ;从DS18B20中读回高位,低位暂存区TEMPER_H EQU 35H ;TEMPER_NUM EQU 60H;温度值存储TEMPER_GE EQU 61HTEMPER_SHI EQU 62HTEMPER_SAVE EQU 63HFLAG1 BIT 00HFLAG2 BIT 01HRS BIT p2.0;液晶控制接口RW BIT p2.1E BIT p2.2DQ BIT p3.5;单总线口ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#70HLCALL GET_TEMPERLCALL TEMPER_COVLCALL LCDDISPlcall d100mslcall d100msLJMP MAINNOP;**************************************************;读出转换后的温度值;**************************************************GET_TEMPER:SETB DQ ; 定时入口BCD: LCALL INIT_1820JB FLAG1,S22LJMP BCD ; 若DS18B20不存在则返回S22: LCALL DELAY1MOV A,#0CCH ; 跳过ROM匹配------0CC命令LCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820LCALL D100MSCBA:LCALL INIT_1820JB FLAG1,ABCLJMP CBAABC:LCALL DELAY1MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200 ;READ_1820RET;**************************************************************;读DS18B20的程序,从DS18B20中读出一个字节的数据;**************************************************************READ_1820:MOV R2,#8RE1:CLR CNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE1RET;****************************************************** ;写DS18B20的程序;****************************************************** WRITE_1820:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23SETB DQNOPDJNZ R2,WR1SETB DQRET;****************************************************;读DS18B20的程序,从DS18B20中读出两个字节的温度数据;****************************************************READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) RE00:MOV R2,#8RE01:CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;;****************************************************;将从DS18B20中读出的温度数据进行转换;;****************************************************TEMPER_COV:MOV A,#0F0HANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值SWAP AMOV TEMPER_NUM,A ;得到低四位MOV A,TEMPER_LJNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值INC TEMPER_NUMTEMPER_COV1:MOV A,TEMPER_HANL A,#07HSWAP AORL A,TEMPER_NUM ;得到高四位,再与低四位相或得到值MOV TEMPER_NUM,A ; 保存变换后的温度数据LCALL BIN_BCDRET;;****************************************************;将16进制的温度数据转换成压缩BCD码;;****************************************************BIN_BCD:MOV A,TEMPER_NUMMOV B,#10DIV ABMOV TEMPER_SHI,AMOV TEMPER_GE,BRET;****************************************************;DS18B20初始化程序;;****************************************************INIT_1820:SETB DQNOPCLR DQMOV R0,#250TSR1:DJNZ R0,TSR1 ; 延时520usSETB DQMOV R0,#25H ;96US-25HTSR2:DJNZ R0,TSR2JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在LJMP TSR4 ; 延时TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在LJMP TSR5TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在LJMP TSR7TSR5:MOV R0,#06BH ;200USTSR6:DJNZ R0,TSR6 ; 延时TSR7:SETB DQ ;拉高总线RET;*************************************************;数码显示程序;*************************************************;*************************************************;液晶显示程序;************************************************* LCDDISP:mov p1,#01h;清屏call enrwmov p1,#38h;设为8位,5*7字型两行call enrwmov p1,#0Chcall enrwmov p1,#06hcall enrwmov p1,#80hcall enrwmov dptr,#yjtabcall rwrammov p1,#0C0hcall enrwmov dptr,#yjtab1call rwramW_TEM:mov p1,#0CChcall enrwMOV DPTR,#ASCIIMOV A,TEMPER_SHIMOVC A,@A+DPTRMOV P1,Asetb rsclr rwclr ecall D500ussetb eMOV DPTR,#ASCIIMOV A,TEMPER_GEMOVC A,@A+DPTRMOV P1,Asetb rsclr rwclr ecall D500ussetb eRETenrw:clr rsclr rwclr ecall D500ussetb eretrwram:mov r1,#00ha1: mov a,r1movc a,@a+dptrcall rwram2inc r1cjne a,#00h,a1retrwram2:mov p1,asetb rsclr rwclr ecall D500ussetb eret;**************R*********************************** ;延时子程序;*************************************************D500us:MOV R6,#250;延时500usDJNZ R6,$RETDELAY1:MOV R7,#20HDJNZ R7,$RETD100MS: MOV R6,#200D2: MOV R5,#250DJNZ R5,$DJNZ R6,D2RETyjtab: db ' XRF MCS-51 ',00hyjtab1:db 'temperature:**`C',00hASCII: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H end只是LCD1602的代码;多功能51单片机开发板;LCD1602测试程序RS EQU P2.0RW EQU P2.1E EQU P2.2LDATA EQU P1ORG 0000HAJMP MAINORG 0030HMAIN: MOV R0,#00H ;R0:每行显示字符的个数MOV R1,#80H ;寄存器地址MOV A,#38H ;设置显示(16×2)ACALL WIRMOV A,#0EH ;开显示,显示光标,光标不闪烁ACALL WIRMOV A,#06H ;整屏显示不移动ACALL WIRMOV A,#01H ;显示清屏ACALL WIRMOV DPTR,#LCDLOOP0: MOV A,R1 ;写地址ACALL WIRINC R1 ;地址加一CJNE R1,#90H,TT ;判断第一行写完没有MOV R1,#0C0H ;若写完,R1=第二行地址TT: MOV A,R0MOVC A,@A+DPTRACALL WDRINC R0 ;计数R0加1LCALL DELAY1CJNE R0,#20H,LOOP0 ;R1不等于32则继续RE: AJMP REWIR: ACALL BUSY ;写指令寄存器子程序CLR E ;初始化CLR RSCLR RWSETB EMOV LDATA,ACLR ERETWDR: ACALL BUSY ;写数据寄存器子程序CLR ESETB RSCLR RWSETB EMOV LDATA,ACLR ERETBUSY: PUSH ACC ;检测忙信号子程序ISBUSY:CLR ECLR RSSETB RWSETB EMOV A,LDATAJB ACC.7,ISBUSY ;ACC.7=1,说明忙POP ACCACALL DELAY1RETDELAY1:MOV R6,#5 ;延时子程序D0: MOV R7,#248DJNZ R7,$DJNZ R6,D0RETDELAY2:MOV R5,#2D1: MOV R3,#245D2: MOV R4,#245DJNZ R4,$DJNZ R3,D2DJNZ R5,D1RETLCD:DB ' MCS-51 TEST 'DB ' Xu Rui Feng 'END。

LCD液晶显示程序

LCD液晶显示程序

//功能:LCD液晶显示程序,采用8位数据接口#include <iom16v.h>#include <macros.h> //库函数头文件,代码中引用了_nop()函数// 定义控制信号端口#define E 2#define RW 1#define RS 0//sbit RS=0xB0; //P3.0 sbit RS=P3^0;//sbit RW=0xB1; //P3.1//sbit E= 0xB2; //P3.2// 声明调用函数void lcd_w_cmd(unsigned char com); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数void delay1(); //软件实现延时函数,5个机器周期void gong(void);void main() //主函数{unsigned char lcd[]="yin hai chang";unsigned char i;PORTC=0xff; // 送全1到P0口DDRC=0xff;PORTB=0xff; // 送全1到P0口DDRB=0xff;int1(); // 初始化LCDdelay(255);lcd_w_cmd(0x80); // 设置显示位置delay(255);for(i=0;i<13;i++) // 显示字符串{lcd_w_dat(lcd[i]);delay(200);}gong();lcd_w_cmd(0x8f);lcd_w_dat(0x00);while(1); // 原地踏步//函数名:delay//函数功能:采用软件实现可控延时//形式参数:延时时间控制参数存入变量t中//返回值:无void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<50;j++);}//函数名:delay1//函数功能:采用软件实现延时,5个机器周期//形式参数:无//返回值:无void delay1(){_NOP();_NOP();_NOP();}//函数名:int1//函数功能:lcd初始化//形式参数:无//返回值:无void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0f); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}//函数名:lcd_r_start//函数功能:读状态字//形式参数:无//返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;PORTB=PINB|(1<<RW); //RW=1; //RW=1,RS=0,读LCD状态delay1();PORTB=PINB&(~(1<<RS)); //RS=0;delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();s=PINC; //从LCD的数据口读状态delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=0;delay1();return(s); //返回读取的LCD状态字}//函数名:lcd_w_cmd//函数功能:写命令字//形式参数:命令字已存入com单元中//返回值:无void lcd_w_cmd(unsigned char com){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW));//RW=0;delay1();PORTB=PINB&(~(1<<RS));//RS=0; // RW=0,RS=0,写LCD命令字delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();PORTC=com; //将com中的命令字写入LCD数据口delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=1;delay(255);}//函数名:lcd_w_dat//函数功能:写数据//形式参数:数据已存入dat单元中//返回值:无void lcd_w_dat(unsigned char dat)unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW)); //RW=0;delay1();PORTB=PINB|(1<<RS); //RS=1; // RW=1,RS=0,写数据delay1();PORTB=PINB|(1<<E); //E=1; // E端时序delay1();PORTC=dat; // 将dat中的显示数据写入LCD数据口delay1();PORTB=PINB&(~(1<<E)); //E=0;delay1();// RW=1;delay(255);}void gong(void){lcd_w_cmd(0x40);lcd_w_dat(0x1f);lcd_w_cmd(0x41);lcd_w_dat(0x1f);lcd_w_cmd(0x42);lcd_w_dat(0x04);lcd_w_cmd(0x43);lcd_w_dat(0x04);lcd_w_cmd(0x44);lcd_w_dat(0x04);lcd_w_cmd(0x45);lcd_w_dat(0x1f);lcd_w_cmd(0x46);lcd_w_dat(0x1f);lcd_w_cmd(0x47);lcd_w_dat(0x00);}。

LCD液晶显示程序

LCD液晶显示程序

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<intrins.h>#include<math.h>#include<stdio.h>#include<absacc.h>#include<ctype.h>#include<stdlib.h>sbit RS = P2^4; //定义端口sbit RW = P2^5;sbit EN = P2^6;sbit P0_0 = P0^0;sbit P0_1 = P0^1;sbit P0_2 = P0^2;sbit P0_3 = P0^3;sbit P0_4 = P0^4;sbit P0_5 = P0^5;sbit P0_6 = P0^6;sbit P0_7 = P0^7;sbit P1_0 = P1^0;sbit P1_1 = P1^1;sbit P1_2 = P1^2;sbit P1_3 = P1^3;sbit P1_4 = P1^4;sbit P1_5 = P1^5;sbit P1_6 = P1^6;sbit P1_7 = P1^7;sbit P2_0 = P2^0;sbit P2_1 = P2^1;sbit P2_2 = P2^2;sbit P2_3 = P2^3;sbit P2_4 = P2^4;sbit P2_5 = P2^5;sbit P2_6 = P2^6;sbit P2_7 = P2^7;sbit P3_0 = P3^0;sbit P3_1 = P3^1;sbit P3_2 = P3^2;sbit P3_3 = P3^3;sbit P3_4 = P3^4;sbit P3_5 = P3^5;sbit P3_6 = P3^6;sbit P3_7 = P3^7;sbit B_0 = B^0;sbit B_1 = B^1;sbit B_2 = B^2;sbit B_3 = B^3;sbit B_4 = B^4;sbit B_5 = B^5;sbit B_6 = B^6;sbit B_7 = B^7;#define RS_CLR RS=0#define RS_SET RS=1#define RW_CLR RW=0#define RW_SET RW=1#define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0unsigned char code C[]={'0','1','2','3','4','5','6','7','8','9'};/*------------------------------------------------uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------判忙函数------------------------------------------------*/ bit LCD_Check_Busy(void){DataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);}/*------------------------------------------------写入命令函数------------------------------------------------*/ void LCD_Write_Com(unsigned char com) {while(LCD_Check_Busy()); //忙则等待RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;}/*------------------------------------------------写入数据函数------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) {while(LCD_Check_Busy()); //忙则等待RS_SET;RW_CLR;EN_SET;DataPort= Data;_nop_();EN_CLR;}/*------------------------------------------------清屏函数------------------------------------------------*/void LCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*------------------------------------------------写入字符串函数------------------------------------------------*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {if (y == 0){LCD_Write_Com(0x80 + x); //表示第一行}else{LCD_Write_Com(0xC0 + x); //表示第二行}while (*s){LCD_Write_Data( *s);s ++;}}/*------------------------------------------------写入字符函数------------------------------------------------*/void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}LCD_Write_Data( Data);}/*------------------------------------------------读入角度函数------------------------------------------------*/float READ_Angle(void){int i;float m;float angle;for(i=7;i=0;i--)B_0=P1_6;m=(B-1024)/819;angle=asin(m);return(angle);}/*------------------------------------------------初始化函数------------------------------------------------*/void LCD_Init(void){LCD_Write_Com(0x38); /*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08); /*显示关闭*/LCD_Write_Com(0x01); /*显示清屏*/LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5);LCD_Write_Com(0x0C); /*显示开及光标设置*/ }/*------------------------------------------------LCD显示函数------------------------------------------------*/void LCD_Display(unsigned i){ float angle;int m,n,c,d,e,an;angle=READ_Angle();an=(int)angle*1000;m=an%10;LCD_Write_Char(8,i,C[m]);an=an/10;n=an%10;LCD_Write_Char(7,i,C[n]);an=an/10;c=an%10;LCD_Write_Char(6,i,C[c]);an=an/10;d=an%10;LCD_Write_Char(4,i,C[d]);e=an/10;LCD_Write_Char(3,i,C[e]);LCD_Write_Char(5,i,'.');}/*------------------------------------------------主函数------------------------------------------------*/ void main(void){LCD_Init();LCD_Clear();//清屏while (1){LCD_Write_String(1,0,"X:");LCD_Write_String(1,1,"Y:");while(1);}}。

51单片机LCD1602液晶显示程序

51单片机LCD1602液晶显示程序

LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/******************************************************************************
*
*函数名 * 函数功能
: 初始化 LCD 屏 :无 :无
*******************************************************************************
/
#ifndef
LCD1602_4PINS
void LcdInit()
//LCD 初始化子程序
{ LcdWriteCom(0x38); //开显示
//以下程序都是在 VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是 STC89C52RC,但是在所有的 51 52 单片机上都是通用的。51 只是一个学习的基础 平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111 代表第一个程序。//2222222222222222222222222 代表第二个程序, 以此类推
for(a=1;a>0;a--); } }
//误差 0us
}
/******************************************************************************
*
*函数名 * 函数功能
: LcdWriteCom : 向 LCD 写入一个字节的命令
LCD1602_E = 0;

液晶显示的驱动程序(共6页)

液晶显示的驱动程序(共6页)

通常我们用的液晶显示都是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++。

液晶显示的驱动程序

液晶显示的驱动程序
通常我们用的液晶显示都是4*16的字符/汉字显示:这里介绍4*16的液晶字符显示驱动程序!
//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

TFT液晶显示时钟程序

TFT液晶显示时钟程序

TFT液晶显示时钟程序说明:该程序文件中包含三个.c文件和三个.h文件,方便读者理解程序的层次性和关联性。

该程序的功能是利用51单片机实现逻辑控制,在液晶显示屏上显示动态时钟。

1. shizhong.c(实际上是主程序):#include "REG51.H"#include "gui.h"unsigned char count;#define key P1sbit K=P2^0;unsigned char a;unsigned char b;unsigned char c;unsigned char d;unsigned char e;unsigned char f;unsigned char g;unsigned char sw;unsigned char h1=0;unsigned char h2=0;unsigned char h3=0;unsigned int q;void Keyboard(){unsigned int k;key=0xf0;if(key!=0xf0){for(q=0;q<800;q++);if(key!=0xf0){key=0x0f;switch(key){case(0x0e): k=0; break;case(0x0d): k=4; break;case(0x0b): k=8; break;case(0x07): k=12; break;}key=0xf0;switch(key){case(0xe0): k=k; break;case(0xd0): k=k+1; break;case(0xb0): k=k+2; break;case(0x70): k=k+3; break;}while(key!=0xf0);switch(k){case 0: f++; P0=0x01; if(f==3) {f=0;} break;case 1: e++; P0=0x02;if(f<2){if(e==10) {e=0;}} if(f==2){if(e==4){e=0;}} break;case 2: d++; P0=0x04;if(d==6) {d=0;} break;case 3: c++; P0=0x08;if(c==10) {c=0;} break;case 4: b++; P0=0x10;if(b==6) {b=0;} break;case 5: a++; P0=0x20;if(a==10) {a=0;} break;case 6: sw=0;break;case 7: sw=1; break;}}}}void jishu(){K=1;if(K==0){for(q=0;q<800;q++);if(K==0){h1++;if(h1==10){h1=0;h2++;if(h2==10){h2=0;h3++;}}}}GUI_WriteASCII(0, 50, h3, RED, WHITE);GUI_WriteASCII(16, 50, h2, RED, WHITE);GUI_WriteASCII(32, 50, h1, RED, WHITE); }void main (void){TFT_Init();TFT_ClearScreen(BLACK);EA=1;ET1=1;TMOD=0x10;TH1=15536/256;TL1=15536%256;TR1=1;a=0;b=0;c=0;d=0;e=0;f=0;g=10;count=0;sw=1;GUI_WriteASCII(0, 50, 0, RED, WHITE);GUI_WriteASCII(16, 50, 0, RED, WHITE);GUI_WriteASCII(32, 50, 0, RED, WHITE);while(1){while(sw){TR1=1;jishu();if(count>=20){count=0;a++;if(a==10){a=0;b++;{b=0;c++;if(c==10){c=0;d++;if(d==6){d=0;e++;if(f<2&&e==10){e=0;f++;}if(f==2&&e==4){f=0;e=0;}}}}}GUI_WriteASCII(0, 0, f, RED, WHITE);GUI_WriteASCII(16, 0, e, RED, WHITE);GUI_WriteASCII(32, 0, g, RED, WHITE);GUI_WriteASCII(48, 0, d, RED, WHITE);GUI_WriteASCII(64, 0, c, RED, WHITE);GUI_WriteASCII(80, 0, g, RED, WHITE);GUI_WriteASCII(96, 0, b, RED, WHITE);GUI_WriteASCII(112,0, a, RED, WHITE);}Keyboard();}Keyboard();GUI_WriteASCII(0, 0, f, RED, WHITE);GUI_WriteASCII(16, 0, e, RED, WHITE);GUI_WriteASCII(32, 0, g, RED, WHITE);GUI_WriteASCII(48, 0, d, RED, WHITE);GUI_WriteASCII(64, 0, c, RED, WHITE);GUI_WriteASCII(80, 0, g, RED, WHITE);GUI_WriteASCII(96, 0, b, RED, WHITE);GUI_WriteASCII(112,0, a, RED, WHITE);TR1=0;}}void Time1(void) interrupt 3{count++;TH1=15536/256;TL1=15536%256;}2. gui.c:#include"gui.h"#include"charcode.h"#ifdef USE_ASCIIvoid GUI_WriteASCII(uchar x, uchar y, uchar p, uint wordColor, uint backColor) {uchar j, wordByte,wordNum;uint color;wordNum = p;TFT_SetWindow(x,y,x+15, y+23);for (wordByte=0; wordByte<48; wordByte++){color = ASCII16x24[wordNum][wordByte];for (j=0; j<8; j++){if ((color&0x80) == 0x80){TFT_WriteData(wordColor);}else{TFT_WriteData(backColor);}color <<= 1;}}}#endif3. driver.c :#include "driver.h"/************************************************************************** ***函数名:TFT_WriteCmd*输入:cmd*输出:*功能:写命令。

12864-液晶显示-c语言程序

12864-液晶显示-c语言程序
delay(100); //大于100uS的延时程序
TransferData(0x36,0); //Extended Function Set:RE=1: extended instruction set
delay(37); ////大于37uS的延时程序
TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1)
uchar code IC_DAT[]={
" HOT-51 "
" "
"单片机开发板"
"东流电子"
};
uchar code IC_DAT2[]={
"白日依山尽,"//0x80
"欲穷千里目,"//0x90
"黄河入海流。"//0x88
"更上一层楼。"//0x98
};
/********************************************************************
delay(37); ////大于37uS的延时程序
TransferData(0x08,0); //Display on Control
delay(100); //大于100uS的延时程序
TransferData(0x10,0); //Cursor Display Control光标设置
delay(100); //大于100uS的延时程序
void display_grapic(void);
void delayms(uint n);
void DisplayLine(uchar line1,uchar line2);

单片机液晶显示程序

单片机液晶显示程序

单片机液晶显示程序硬件电路:51最小系统,没有采用总线方式,直接的I/O形式,包括矩阵键盘,1602液晶,一个数码管,LED4个,蜂鸣器等.//单片机液晶秒表计算器完整修改版本可以实现两种功能的切换,其他功能自行对照代码研究。

4*4矩阵键盘,第一排前三列是实现小时\分钟\秒的加.第二排前三列是实现小时\分钟\秒的减.当然还可以通过设置矩阵键盘的键值,来实现加\减\乘\除四则运算,由数码管显示参与运算的数字以及最终的运算结果#include<reg51.h>#include<stdio.h>#include<stdlib.h>#include<intrins.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define wc 0x8fff#define wd 0xdfff#define rc 0xbfffvoid displayListChar(unsigned char X, unsigned char Y, uchar DData);uchar dispbuf[]={''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'','':''};uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};uchar second;uchar temp1;uchar minute;uchar hour;uint tcnt,g;uchar suanfa;bit flag2;bit flag1=1;//////控制计算器还是液晶调整的状态灯uint i=0,f,m,g,s,t;// for里的计数值,用于循环// 用来标记按了什么,如+,-.*,或是/sbit P2_0=P2^0;// 定义P2.0口用来,当计算值超过15时,P2.0所对应的灯闪几下sbit P2_1=P2^1;// 定义P2.1口用来,当除数为0时,P2.1所对应的灯闪几下sbit P2_2=P2^2;sbit P2_3=P2^3;uint num[4]={0}; //用于记录外面输入的数字uint Tablenum;sbit P3_4=P3^4;sbit P3_5=P3^5;void jieguo(void);void Settime(uchar verify);uchar kbscan(void);///键盘扫描void Show_Time(void);////显示时间void Settime(uchar verify);//verify 在这里为调整的意思uint transfor( uchar key1);void delay400ms(void) ;void delay200ms(void);void delay5ms(void);void delay_1s(void);void dlms(void);void dlms1(void){uint g=20000;while(--g); //延时100mS钟}void clr(void){i=0;suanfa=0;Tablenum=0;for(f=0;f<4;f++){num[f]=0;}P2_0=1;P2_1=1;P2_2=1;P2_3=0;P3_4=0;P3_5=1;P0=0xc0;P3_5=0;}//***************************************以下单片机液晶显示********************************** ******************void waitLcd() //just wait until 液晶不忙为止{char temp;bit flag=1;while(flag==1){temp=XBYTE[rc];if (temp>>7==0) flag=0;P1=temp;}P1=0xff;}//just wait until 液晶不忙为止void WriteCommand_Lcd(bit isCheck,char c){if (isCheck==1) waitLcd();XBYTE[wc]=c;}void writedata(char c){waitLcd();XBYTE[wd]=c;}void LcdInit(){delay5ms();delay5ms();delay5ms();WriteCommand_Lcd(0,0x38); //三次显示模式设置,不检测忙信号delay5ms();WriteCommand_Lcd(0,0x38);delay5ms();WriteCommand_Lcd(0,0x38);delay5ms();WriteCommand_Lcd(1,0x38); //显示模式设置,开始要求每次检测忙信号,8位2行5*7 WriteCommand_Lcd(1,0x08); //关闭显示WriteCommand_Lcd(1,0x01); //清显示WriteCommand_Lcd(1,0x06); // 文字不动,光标右移WriteCommand_Lcd(1,0x0C); // 显示开及光标设置}void displayListChar(unsigned char X, unsigned char Y, uchar DData){Y &= 0x1;X &= 0xF;if (X <= 0xF){Y &= 0x1;X &= 0xF;if (Y) X = 0x40;X = 0x80;WriteCommand_Lcd(0,X);writedata(dispbuf[DData]);}}//****************************************以上单片机液晶显示驱动***************************** ************************//*************************************************//**********************************以下显示时间********************************************* ********void Show_Time(void){displayListChar(0,0,hour/10);displayListChar(1,0,hour%10);displayListChar(2,0,10);displayListChar(3,0,minute/10);displayListChar(4,0,minute%10);displayListChar(5,0,10);displayListChar(6,0,second/10);displayListChar(7,0,second%10);}//**********************************以上显示时间********************************************* ********void main(void){TMOD=0x02; //置自动重装载模式TH0=0x06; //设初值TL0=0x06; //设初值TR0=1; //开始计数ET0=1; //开定时器/计数器EA=1; //中断开delay400ms();//启动等待,等LCM讲入工作状态LcdInit(); //LCM初始化P3_4=0;P2_0=1;P2_1=1;P2_2=0;P2_3=1;P3_5=1;P0=0xc0;P3_5=0;while(1){uchar key;key=kbscan();dlms();// 0(11100111 0xe7)///*****************************以下是单片机液晶显示两种状态的切换******************** //***************************************************if(key==0xe7){dlms();flag1=~flag1;key=0x00;if(flag1==1){P2_0=1;P2_1=1;P2_2=0;///液晶状态灯P2_3=1;}if(flag1==0){P2_0=1;P2_1=1;P2_2=1;P2_3=0;///计算器状态灯}dlms1();}///*****************************以上是单片机液晶显示两种状态的切换。

液晶显示屏生产流程

液晶显示屏生产流程

液晶显示屏生产流程(总37页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March曾经爆发过的面板门事件,足以解释用户对于[url=lcd/]液晶显示器[/url]所采用液晶面板类型的重视,不仅如此,液晶显示器重要的技术提升,如LED背光,超广视角,都与面板有着直接的关系。

而占一台液晶显示器80%成本的液晶面板,足以说明它才是整台显示器的核心部分,它的好坏,可以说直接决定了一台液晶显示器品质是否优秀。

如此来看,民用的液晶显示器的生产只是一个组装的过程,将液晶面板、主控电路、外壳等部分进行主装,基本上不会有太过于复杂的技术问题。

难道这是说,液晶显示器其实是技术含量不好的产品吗?其实不然,液晶面板的生产制造过程非常繁复,至少需要300道流程工艺,全程需在无尘的环境、精密的技术工艺下进行。

液晶面板的大体结构其实并不是很复杂,笔者将其分为液晶板与背光系统两部分。

液晶面板的LED背光系统背光系统包括背光板、背光源(CCFL或LED)、扩散板(用于将光线分布均匀)、扩散片等等。

由于液晶不会发光,因此需要借助其他光源来照亮,背光系统的作用就在于此,但目前所用的CCFL灯管或LED背光,都不具备面光源的特性,因此需要导光板、扩散片之类的组件,使线状或点状光源的光均匀到整个面,目的是为了让液晶面板整个面上不同点的发光强度相同,但实际要做到理想状态非常困难,只能是尽量减少亮度的不均匀性,这对背光系统的设计与做工有很大的考验。

液晶板在未通电情况下呈半透明状态可弯曲的柔性印刷板起到信号传输的作用,并且通过异向性导电胶与印刷电路板(蓝色PCB板的部分)压和,使两者连接想通液晶板从外到里分别是水平偏光片、彩色滤光片、液晶、TFT玻璃、垂直偏光片,此外在液晶面板边上还有驱动IC与印刷电路板,主要用于控制液晶板内的液晶分子转动与显示信号的传输。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<reg52.h>
#include<absacc.h>
//#define LCDP P0
sbit DIR=P2^0;
sbit RS=P1^2;
sbit RW=P1^1;
sbit EN=P1^0;
unsigned char i;
char line1[]="LCM test program";
char line2[]="everingthing is ok";
char line3[]="中文lcm测试程序";
char line4[]="一切正常欢迎使用";
/************************************************ **************以下是检查忙碌函数函数************* ************************************************/ void check_BF()
{
unsigned char x=0x80;
while(x&0x80)
{
RS=0;RW=1;//LCM读取指令模式
EN=1;//启用液晶显示器
x=P0;
EN=0;
for(i=0;i<10;i++);//完成
}
}
/************************************************ ****************以下是写入指令函数*************** ************************************************/ void write_inst(unsigned char inst)
{
RS=0;RW=0;//LCM写入指令模式
EN=1;//启用液晶显示器
P0=inst;
EN=0;
check_BF();//完成
}
/************************************************ ****************以下是数据写入函数*************** ************************************************/ void write_char(unsigned char character)
{
RS=1;RW=0;//LCM写入数据模式
EN=1;//启用液晶显示器
P0=character;
EN=0;
check_BF();;//完成
}
/************************************************
*****************以下是延迟函数******************
************************************************/
void delay_1ms(unsigned int xx)
{
unsigned int ii,jj;
for(ii=00;ii<xx;ii++)
for(jj=1;jj<120;jj++);
}
/************************************************
****************以下是初始设定函数***************
************************************************/
void init_LCM(void)
{
write_inst(0x30);//设定功能
write_inst(0x30);//设定功能
write_inst(0x30);//设定功能
write_inst(0x38);//设定两列
write_inst(0x08);//关闭显示功能
write_inst(0x01);//清屏
write_inst(0x06);//设定输入模式
write_inst(0x0e);//开启显示功能
}
void main()
{
unsigned char iii;
init_LCM();
DIR=0;
while(1)
{
/****************************************************************************** ***/
write_inst(0x80);//指定到第一列的位置
for(iii=0;iii<16;iii++);
write_char(line1[iii]);//显示16个字
/****************************************************************************** ***/
write_inst(0x90);//指定到第二列的位置
for(iii=0;iii<16;iii++);
write_char(line2[iii]);//显示16个字
delay_1ms(2000);//延时2s
/****************************************************************************** ***/
write_inst(0x80);//指定到第一列的位置
for(iii=0;iii<16;iii++);
write_char(line3[iii]);//显示16个字
}
/****************************************************************************** ***/
write_inst(0x90);//指定到第二列的位置
for(iii=0;iii<16;iii++);
write_char(line4[iii]);//显示16个字
delay_1ms(2000);//延时2s
}。

相关文档
最新文档