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字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。

lcd显示屏各参数说明

lcd显示屏各参数说明
和16.2色面板的LCD摆在一起,一定会让你有一个全新的认识,再说,如果16.7色面板和16.2面板没有区别,那为何有些国际大厂,偏要把自己16.2色面板的产品,标称为16.7色面板呢?毫无疑问在色彩等方面,广角产品的效果是TN屏所不能妣的,但是不是广角屏在所有的方面都是优于TN屏呢?其实也不是这样的,如果用于游戏,那TN屏的效果会更好些,因为广角屏在速度方面是不如TN屏的,所以我认为还是要接需而购,看你自己的需要而选择,这才是一个正确的方法。
一。LCD的面板有多少种?
有人总是问偶:TN屏好还是TFT屏好?初初听到这问题,偶觉得在这个方面,确实有加强宣传的必要,面对着形形色色的LCD产品,他们所采用的技术都不同,成本和效果也有所不同,但一些基本的概念还是必须清楚的.
TFT(ThinFilmTransistor)是指薄膜晶体管,意即每个液晶像素点都是由集成在像素点后面的薄膜晶体管来驱动,从而可以做到高速度、高亮度、高对比度显示屏幕信息,是目前最好的LCD彩色显示设备,现在所有的LCD都是使用TFT屏,TN屏只是其中的一种,还有VA屏,IPS屏。首先我们从面板开始,市场上现在热门的面板,面板类型大致可分为VA、IPS和TN三类,它们因各自所采用的材料和结构的差异,其特点也不尽相同。
PVA则是三星独家推出的一种面板类型,它在富士通MVA面板的基础上有了进一步的发展和提高,是一种图像垂直调整技术,该技术直接改变液晶单元结构,让显示效能大幅提升可以获得优于MVA的亮度输出和对比度,早期的PVA响应时间和MVA一样都是25ms。去年三星在PVA基础上又延出改进型S-PVA,可视角度可达170度,配合加压芯片,S-PVA的响应时间已经提高到灰阶水平,而对比度超过700:1。
/diy/7449208.html

基于51单片机的数字LCD显示

基于51单片机的数字LCD显示

基于51单片机的数字LCD显示摘要:基于89 C51单片机的数字显示标题硬件实现和软件设计,阐述了它的工作原理。

介绍了研制过程中遇到的问题和解决办法。

通过实验和运行,那头性能可靠,满足设计指标参数,LCD显示具有广阔的市场前景,然后是成熟和普及。

在显示领域,LED显示装置系列微电子技术、计算机技术和信息处理于一体,以其色彩鲜艳、动态范围、高亮度、清晰度高,低电压操作,能耗低、使用寿命长、耐冲击、色彩艳丽、工作可靠、稳定的优势,成为新一代的显示媒体,目前,LED显示屏已被广泛应用于大型广场,商业广告、信息传播、新闻发布、证券交易,能满足不同环境的需要。

由单片机外围电路系统,显示电路、单片机、最小的系统构成。

该系统的安装是容易的检测、软件功能完善、工作可靠、精度高的优点。

论述了单片机控制的液晶数字显示系统,阐述了软件的基本原理,实现您的系统使用的设计及模拟和系统的应用领域。

关键词: 单片机AT89C51、液晶数字显示, 凯尔软件ⅰBased on 51 SCM LCD digital displayAbstract Based on the 89 C51 SCM's digital display header hardware realization and the software design, expounds its principle of work. Introduces the developing process of the multiplier encounter problems and solving methods. Through the test and operation, that the header reliable performance, to meet the design index parameters, and has a broad market prospect, and then the mature and popularity. As in the display field, LED display set series microelectronics technology, computer technology and information processing in the integral whole, with its colourful, dynamic range, high brightness, high-definition, low voltage operation, low consumption, long service life, impact resistance, gorgeous colour and stable and reliable work, become the advantage of a new generation of show media, at present, the LED display has been widely used in large square, commercial advertising, information dissemination, press conference, securities trading, can satisfy the need of different environment. By single-chip microcomputer system, peripheral circuit and single-chip microcomputer and show circuit smallest system formed. This system is easy to install detection, software function is perfect, reliable operation, the advantages of high accuracy.This paper discusses the single-chip microcomputer control by the LCD digital display system, and expounds the basic principle of the Keil software to realize the system using design and simulation and the system applied fields.Keywords: single-chip microcomputer AT89C51, LCD digital display, Keil softwareii目录引言 (1)第一章初识系统 (2)1.1设计过程及工艺要求 (2)1.2设计的重点与难点 (2)第二章系统的设计 (3)2.1系统设计 (3)2.2芯片AT89C51介绍 (3)2.3 AT89S51单片机特性 (6)2.4 LCD显示屏介绍 (6)2.4.1 LCD的定义及作用 (6)2.4.2 LCD显示器的工作原理及主要参数 (6)2.4.3 LCD的分类 (10)2.4.4 LCD的特点 (10)第三章系统调试 (11)3.1 硬件的设计 (11)3.2原理分析 (13)3.3程序的调试与运行 (14)3.3.1 HEX文件的生成 (14)3.3.2 调试与仿真 (14)结论 (15)致谢 (16)参考文献 (17)iii引言目前,控制仪表经常使用的显示面板主要有LCD和LED两种类型,其中LCD比较美观,省电,显示方式灵活,但是价格比较昂贵,最重要的是它的醒目程度较低,可视角度也比较小;而LED数码管虽然功耗较大,但它亮度高,用作工业现场指示时更醒目,而且价格低。

LCD数字显示体温计

LCD数字显示体温计

青 岛 职 业 技 术 学 院毕 业 设 计(论 文)题 目 __________________________________指导教师__________________________辅导教师__________________________学生姓名_______________ ________学生学号__________________________院(部) 专业 班______年 ___月 ___日LCD 数字显示体温计2010 10 29_摘要LCD数字体温计电路的设计研究开发对涉及到的相关技术理论和方法进行了深入的研究讨论给出了电路的详细设计过程并结合实际工作方面的经验给出了工程设计上的一些指导思想和原则.在各种传感器的温度变换曲线中存在着一个共同的问题即输出特性与温度的变化呈现非线性关系这一问题是温度测量误差的一个主要来源另一个造成测量误差的主要原因是测量系统的不稳定性在本课题的研究中对这两个问题作了着重分析和研究.LCD数字显示体温计系统采用AT89C51为控制器件,单线数字温度传感器DS18B20采集温度,LCD液晶显示,增设有高低报警和实时时钟及数据记录功能。

关键词:单片机;温度传感器;液晶显示;目录引言 (3)一案论证与比较 (4)二硬件系统设计 (6)2.1电路设计 (7)2.2 时钟处理电路 (7)2.3 温度检测电路 (8)2.4显示电路 (9)三软件设计 (9)结束语 (11)参考文献 (12)致谢 (13)引言在现代化生产过程控制中,执行机构起着十分重要的作用,它是自动控制系统中不可缺少的组成部分。

现有的国产大流量电动执行机构存在着控制手段落后、机械传动机构多、结构复杂、定位精度低、可靠性差等问题。

而且执行机构的全程运行速度取决于其电机的输出轴转速和其内部减速齿轮的减速比,一旦出厂,这一速度固定不可调整,其通用性较弱。

整个机构缺乏完善的保护和故障诊断措施以及必要的通信手段,系统的安全性较差,不便与计算机联网。

lcd显示数字

lcd显示数字

/************************************************************************* // void Num2frame(u32 value,u8 Dot)// 主显示区显示数字// value 是数字000000-999999;// lengh 是显示数据的位数// dot 从高位开始数取值范围是1\2\3\4\5//************************************************************************* void Num2frame(INT32U value,INT8U Dot){INT32U TempNum;INT32U tempvalue= value;INT8U bbit,i;INT16U halfh_char=0xf0;INT16U halfl_char=0x0f; //取高半字节、低半字节INT16U TableNumTemp[6]={0,0,0,0,0,0}; //将各个位取出存在这里INT8U Lengh = 0;myframe[8] = 0;myframe[9] = 0;myframe[11] = 0;myframe[12] = 0;myframe[13] = 0;myframe[14] = 0;myframe[15] = 0;myframe[16] = 0;myframe[19] = 0;myframe[20] = 0;myframe[21] = 0;myframe[22] = 0;if (value > 999999) //如果超出范围,以最大值计算{value = 999999;tempvalue= value;}for (i = 0; i <= 5; i++){TempNum =tempvalue%10;tempvalue /= 10;TableNumTemp[5-i] = tablenum[TempNum];}tempvalue= value; //下面根据数据长度和小数点位置计算要显示的位数if (tempvalue == 0){Lengh = 1;}else{for (Lengh = 0; tempvalue > 0; Lengh++){tempvalue /= 10;}}if ((Lengh <= (6-Dot)) && (Dot != 0)){Lengh = (6-Dot) + 1;}for (bbit = 6-Lengh; bbit <=5; bbit++) //将整数拆成位数组{switch (bbit){case 0: case 1:myframe[22-(bbit<<1)] |= ((TableNumTemp[bbit] & halfh_char)>>4);myframe[21-(bbit<<1)] |= TableNumTemp[bbit] & halfl_char;break;case 2: case 3:case 4:myframe[16-((bbit-2)<<1)] |= ((TableNumTemp[bbit] & halfh_char)>>4);myframe[15-((bbit-2)<<1)] |= TableNumTemp[bbit] & halfl_char;break;case 5:myframe[9] |= ((TableNumTemp[bbit] & halfh_char)>>4);myframe[8] |= TableNumTemp[bbit] & halfl_char;break;default:break;}}switch(Dot){case 1: case 2:myframe[23-(Dot<<1)] |= 0x08;break;case 3: case 4: case 5:myframe[21-(Dot<<1)] |= 0x08;break;default:break;}}*************************************************************************// void BitNum2frame(u32 value,u8 place)// 主显示区显示单个数字// value 是数字0-12;// place 从高位开始数取值范围是1\2\3\4\5\6//************************************************************************* void BitNum2frame(INT8U value,INT8U place){INT32U tempvalue= value;INT16U halfh_char=0xf0;INT16U halfl_char=0x0f; //取高半字节、低半字节INT16U TableNumTemp=0; //将各个位取出存在这里INT8U templace= place-1;//if (value > 12) //如果超出范围,不显示//{// value = 10;// tempvalue= value;//}TableNumTemp= tablenum[tempvalue];switch (templace){case 0: case 1:myframe[22-(templace<<1)] = 0;myframe[22-(templace<<1)] |= ((TableNumTemp & halfh_char)>>4);myframe[21-(templace<<1)] &= 0x8;myframe[21-(templace<<1)] |= TableNumTemp & halfl_char;break;case 2: case 3:case 4:myframe[16-((templace-2)<<1)] =0;myframe[16-((templace-2)<<1)] |= ((TableNumTemp & halfh_char)>>4);myframe[15-((templace-2)<<1)] &= 0x8;myframe[15-((templace-2)<<1)] |= TableNumTemp & halfl_char;break;case 5:myframe[9] = 0;myframe[9] |= ((TableNumTemp & halfh_char)>>4);myframe[8] &= 0x8;myframe[8] |= TableNumTemp & halfl_char;break;default:break;}}。

带有温度显示的数字钟(LCD12864显示)

带有温度显示的数字钟(LCD12864显示)

//**********************************
//液晶初始化
//**********************************
void init_lcd(void)
{
wr_i_lcd(0x06); /*光标的移动方向*/
wr_i_lcd(0x0c); /*开显示,关游标*/
}
//***********************************
//对液晶写数据
//content为要写入的数据
//***********************************
void wr_d_lcd(uchar content)
{
busy_lcd();
rs=1;
}
//***********************************
//填充液晶DDRAM全为空格
//**********************************
void clrram_lcd (void)
{
wr_i_lcd(0x30);
wr_i_lcd(0x01);
DS1302_CLK = 1;
DS1302_RST = 0;
}
//**************************************
//读取DS1302某地址的数据
//**************************************
uchar Read1302(uchar ucAddr)
DS1302_CLK = 1;
DS1302_RST = 0;

LCD显示功能原理

LCD显示功能原理

LCD显示功能原理1 英文字母和字符显示的实现1.1 LCD 模块显示一个点1.2显示英文字母和字符2 汉字显示的实现2.1 汉字的点阵码2.2中文文档的存储方式2.3中文字库的作用3 图像显示的实现3.1 BMP文件的大致组成3.2 读取BMP文件的思路用户如要点亮 LCD 屏上的某一个点时,实际上就是对该点所对应的显示RAM 区中的某一个位进行置 1 操作;所以就要确定该点所处的行地址、列地址。

1 英文字母和字符显示的实现1.1 LCD 模块显示一个点点阵 LCD的特点就是以点的形式呈现用户想要显示的图形,故点阵 LCD 又有称之为图形点阵 LCD;通常在编写一个 LCD模块的驱动程序时,最基本的功能是绘制一个具体指定点,只有在这样的功能的基础之上,才能通过各个点的组合,呈现出点阵的图形。

其实,绘制一个指定位置的点,也就是将显存当中的对应该点的数据位进行操作;在前面的LCD 显示RAM区映射介绍当中,可以得知显存当中的数据与LCD屏幕上的点的对应关系,这样就可以在程序当中通过简单的换算而有序的控制 LCD屏上的点的显示了。

1.2显示英文字母和字符在实际应用中,通常用一个数组保存字母和字符点阵。

以16×8点阵为例,用16×8个点阵表示一个字符,例如显示字符‘1’,象素需要显示的地方用*表示,否则为空白,这样,一个字符‘1’就显示出来。

把这个点阵用十六进制的形式表示出来,字符1所对应的点阵是:0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x1,0x18,0x18,0x18,0x7e,0x00,0x00,0x00,0x00,在把字符送LCD缓冲区显示的时候,由于在缓冲区中是用一个字节表示一个象素,而字库中的一个位表示一个象素,即字库中一个字节对应缓冲区的八个字节,所以在送入缓冲区之前必须对字库进行必要的调整。

具体方法是在显示一个象素之前,先把这个位右移到字节的最低位,然后屏蔽除此象素点的其它七位,再乘这个象素要显示的颜色,最后把调整后的数据送入对应的缓冲区。

通用型1602LCD自定义字符的显示

通用型1602LCD自定义字符的显示

通用型1602LCD自定义字符的显示【摘要】LCD1602主要用来显示数字、字母、图形以及少量自定义字符。

由于其显示控制简单,性价比高,广泛用于电子表、冰箱、空调、汽车电子仪表等装置。

本文主要研究一下如何在LCD1602显示自定义字符。

虽然技术含量不高,但是注意编程的细节还是很有必要去探讨一番。

【关键词】单片机;LCD1602;CGRAM1.引言液晶显示器的英文名是Liquid Crystal Display,简称LCD。

液晶显示器作为显示器件具有体积小、重量轻、功耗低,性价比高等优点,所以LCD日渐成为各种便携式电子产品的理想显示器,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个5X7或5X11点阵字符位组成,每个点阵字符位都可以显示一个字符。

每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能像12864一样显示图形,但是有时候很想要用图形表示,那么LCD1602提供了8个空间的自定义字符,如图1所示,显示的年月日,.C就是自定义字符。

2.通用型LCD1602操作方法LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

如图2所示,字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),从左到右分别是1引脚到16引脚在这里要说明的是:(1)要用1602型LCD显示字符必须解决3个问题:a.待显示字符ASCII 标准码产生;b.液晶显示模式的设置;c.字符显示位置的指定。

(2)若想在00H处显示数据的话,则必须将00H加上80H,即0x00H+0x80H,若要在01H处显示数据,也必须加0x80H,例如要将某字符显示在第2行第5列,则确定地址的指令代码应为80H+44H=C4H。

LCD液晶显示器的基本参数

LCD液晶显示器的基本参数
Hale Waihona Puke 2. 最佳分辨率(真实分辨率)
液晶显示器属于"数字"显示方式,其显示原理是直接把显卡输出 的模拟信号处理为带具体"地址"信息的显示信号,任何一个像素 的色彩和亮度信息都是跟屏幕上的像素点直接对应的,正是由于 这种显示原理,所以液晶显示器不能象CRT显示器那样支持多个 显示模式,,液晶显示器只有在显示跟该液晶显示板的分辨率完 全一样的画面时才能达到最佳效果.而在显示小于最佳分辨率的画 面时,液晶显示则采用两种方式来显示,一种是居中显示,比如 在显示800*600次分辨率时,显示器就只是以其中间那800*600 个像素来显示画面,周围则为阴影,这种方式由于信号分辨率是 一一对应,所以画面清晰,唯一遗憾就是画面太小.另外一种则是 扩大方式,就是将该800*600的画面通过计算方式扩大为 1024*768的分辨率来显示,由于此方式处理后的信号与像素并非 一一对应,虽然画面大,但是比较模糊.目前市面上的13寸,14寸, 15寸的液晶显示器的最佳分辨率都是1024*768.17寸的最佳分辨 率则是1280*1024。
3. 亮度和对比度
液晶显示器亮度以平方米烛光(cd/m2)或者nits为单位,(流明并不 是亮度单位,而是“光通量”的单位,等于一烛光的均匀点光源 在单位立体角内发出的光通量。它说明光能的强弱。平方烛光又 叫NIT流明,NIT一般用来标注LCD和CRT显示器的亮度。)市面上 的液晶显示器由于在背光灯的数量上比笔记本电脑的显示器要多, 所以亮度看起来明显比笔记本电脑的要亮.亮度普遍在250nits到 350nits之间,已经大大的超过CRT显示器了.需要注意的一点就是, 市面上的低档液晶显示器存在严重的亮度不均匀的现象,中心的 亮度和距离边框部分区域的亮度差别比较大.对比度是直接体现该 液晶显示器能否体现丰富的色阶的参数,对比度越高,还原的画 面层次感就越好,即使在观看亮度很高的照片时,黑暗部位的细 节也可以清晰体现,目前市面上的液晶显示器的对比度普遍在 250:1到500:1,高端的液晶显示器还远远不止这个数!可以达到 1500:1。

LCD显示数字体温计

LCD显示数字体温计
收稿 日期 :2 0 —0 一 l 06 4 1 基 金项 目:内江 师范 学院大 学生科研项 目 ( 5 D - 6 ) 0 NS - 0 8 作者 简介:杨年 犬 (9 3 ) 1 8 一 ,男,湖北恩施人 ,内江师 范学 院物理 学与 电子 信息 _ 程系2 0 级学 生 。 T O2
( 内江师范学院 物理 学与 电子信息工程 系,Sl 内江 6 1 1)  ̄J l 4 12
摘 要 :本 系统 采用A 8 c l T 9 5 为控制 器件, 单线数 字温度 传 感器DS 8 2 采 集温度 ,c lB 0 L D液 品显示. 设有 高 增
低温 报警和 实时 时钟及数 据记录功能。 单片机 ;温 度传 感器 ;液 晶显示 关键词 :单片机 :温度传 感器;液 晶显示
者加操作 。琴键开关S 2 1按下 , 以实现删除或者减功能 。 琴键开关S 3 上时, 可 1合 允许进行调节 。 琴键 开关S 4 1 合上时,启动 闹钟功能 。当温 度超过 设定的值时, 2 4 山P .脚输出报警信 号去驱动锋鸣器, 或者输 出闹钟报时信号 。温度传感器采用 单线数字温度传 感器D 1B 0 在A 8 C 1 S 8 2 , T 9 5 的控制下D IB 0 S S 2  ̄将温度 转换成数字信号, 过 串行通信方式 由单 总线 经P . 输入 ̄ A 8 C 1 通 35 IT 9 5 中后, 0 J 由P 口输出送LD C 显示 。整机
理器进行处理 。普通 的热敏 电阻可在有 限的工作温度范 围内呈现 出上佳 的稳定性 ,而在较 宽的温度范 围 内_作 时 则表 现 出 中 等水 平 的稳 定 性 。 T
方案3 :采用单线数 字温度传感器D 1B 0 S 8 2 ,它 具有微型化 、低功耗 、高性能 、抗干扰 能力 强、易 配 微 处 理 器 等 优 点 , 特 别 适 合 于 构 成 多 点 温 度 测 控 系 AT8 C5l 9

课程设计(论文)基于lcd液晶显示的多功能数字钟的设计(附pcb图及电路原理图)

课程设计(论文)基于lcd液晶显示的多功能数字钟的设计(附pcb图及电路原理图)

目录1前言 (1)2总体方案设计 (2)2.1设计内容 (2)2.2设计内容 (2)2.3方案论证 (3)2.4方案选择 (4)3单元模块设计 (5)3.1各单元模块功能介绍及电路设计 (5)3.1.1 温度采集电路 (5)3.1.2 DS1302时钟电路 (5)3.1.3 串行通信接口电路 (6)3.1.4 USB连接电路 (6)3.1.5 按键电路 (7)3.1.6液晶显示显示电路 (7)3.2特殊器件介绍 (7)3.2.1 STC89C52单片机芯片 (7)3.2.2 DS1302介绍 (8)3.2.3 温度传感器DS18B20 (9)3.2.4 液晶显示LCD1602 (9)4软件设计 (10)4.1软件选择 (10)4.2软件设计流程 (10)4.2.1 温度采集流程 (11)4.2.2 日期数据处理流程 (12)5系统的仿真及调试 (13)5.1系统仿真 (13)5.2硬件调试 (13)5.3软件调试 (14)6结论 (16)7总结与体会 (17)7.1设计小结 (17)7.2设计收获及改进 (17)7.3致谢 (17)8参考文献 (18)附录: (19)1前言单片机是指一个集成在一块芯片上的完整计算机系统。

尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。

同时集成诸如通讯接口、定时器,实时时钟等外围设备。

而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

单片机也被称为微控制器(Microcontroller),它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

单片机诞生于20世纪70年代末,经历了SCM、MCU、SOC三大阶段。

STC单片机完全兼容51单片机,并有其独到之处,其抗干扰性强,加密性强,超低功耗,可以远程升级,内部有专用复位电路,价格也较便宜,由于这些特点使得 STC 系列单片机的应用日趋广泛。

LCD数字时钟word精品文档6页

LCD数字时钟word精品文档6页

; LCD显示时钟,第一行显示设定日期" DATE XXXX-XX-XX " ,第二行显示设定时间" TIME XX-XX-XX " ,开始时两行并列逐字;显示日期和时间,然后定格,时钟继续运行。

祝亚森(0515074240),朱大三(0515074239)RS EQU P3.0 ;写入数据(1)或指令(0)选择端RW EQU P3.1 ;读(1)写(0)控制E EQU P3.2; ;使能LCD EQU P2 ;LCD数据口BF EQU P2.7 ;忙标志YEA1 EQU 30H ;日期储存地址YEA2 EQU 31HMON EQU 32HDAY EQU 33HHOU EQU 34H ;时间储存地址MIN EQU 35HSEC EQU 36HCOUNT EQU 3CB0H ;T0初值COUNT1 EQU 20 ;20*50us=1SSECCOUN EQU 10H ;存放20的地址LEDBUF EQU 40H ;显示数据首地址ORG 0000HLJMP MAINORG 000BH ;T0中断入口LJMP STIME ;调用定时器T0中断服务子程序MAIN: ;装入固定点显示字母或符号SETB PSW.5MOV LEDBUF, #12 ;DMOV LEDBUF+1, #13 ;AMOV LEDBUF+2, #14 ;TMOV LEDBUF+3, #15 ;EMOV LEDBUF+4, #16 ;空格MOV LEDBUF+9, #10 ;-MOV LEDBUF+12,#10 ;-MOV LEDBUF+15,#17 ;TMOV LEDBUF+16,#18 ;IMOV LEDBUF+17,#19 ;MMOV LEDBUF+18,#15 ;EMOV LEDBUF+19,#16 ;空格MOV LEDBUF+20,#16 ;空格MOV LEDBUF+23,#11 ;:MOV LEDBUF+26,#11 ;:MOV LEDBUF+29,#16 ;空格;---------LCD1602初始化-------------------MOV A, #00000001B ;发送清屏操作指令;CALL W_CMD ;调写入指令子程序MOV A, #00001111B ;发送显示开/关控制ACALL W_CMD ;指令,有光标,有闪烁MOV A, #00011100B ;发送光标移动指令ACALL W_CMD ;光标和字一起移动,光标自动右移MOV A, #00111100B ;发送功能设置指令CALL W_CMD ;8位DB,双行,5x7字符MOV DPTR, #TAB ;装入查表地址;---------LCD1602初始化结束---------------------;---------T0定时初始化--------------------------MOV YEA1,#20H ;设置日期初始值MOV YEA2,#08HMOV MON, #10HMOV DAY, #12HMOV HOU,#12H ;设置时间初始值MOV MIN,#59HMOV SEC,#50HMOV TMOD,#01H ;设置T0定时,模式1MOV TH0,#HIGH(COUNT) ;装入高4位初始值MOV TL0,#LOW(COUNT) ;装入低4位初始值SETB EA ;开中断SETB ET0 ;开T0中断允许位SETB TR0 ;开始定时MOV SECCOUN,#COUNT1 ;把数值20放到10H单元中;---------T0定时初始化结束------------------------MOVBUF1: ;日期"年"前两位处理MOV A,YEA1ANL A,#0F0H ;取高四位SW AP A ;高四位和低四位调换MOV LEDBUF+5,A ;把处理的数存放到相应地址中MOV A,YEA1ANL A,#0FH ;取低四位MOV LEDBUF+6,A ;把处理的数存放到相应地址中MOV A,YEA2 ;日期"年"后两位处理ANL A,#0F0HSW AP AMOV LEDBUF+7,AMOV A,YEA2ANL A,#0FHMOV LEDBUF+8,AMOV A,MON ;日期"月"处理ANL A,#0F0HSW AP AMOV LEDBUF+10,AMOV A,MONANL A,#0FHMOV LEDBUF+11,AMOV A,DAY ;日期"日"处理ANL A,#0F0HSW AP AMOV LEDBUF+13,AMOV A,DAYANL A,#0FHMOV LEDBUF+14,AMOV A,HOU ;时间"时"处理ANL A,#0F0HSW AP AMOV LEDBUF+21,AMOV A,HOUANL A,#0FHMOV LEDBUF+22,AMOV A,MIN ;时间"分"处理ANL A,#0F0HSW AP AMOV LEDBUF+24,AMOV A,MINANL A,#0FHMOV LEDBUF+25,AMOV A,SEC ;时间"秒"处理ANL A,#0F0HSW AP AMOV LEDBUF+27,AMOV A,SECANL A,#0FHMOV LEDBUF+28,AJMP2DIS:LCALL DISPLAYLCD ;调用显示子程序SJMP MOVBUF1;-------------定时器T0中断服务子程序----------STIME: MOV TH0,#HIGH(COUNT) ;重新装入高4位初始值MOV TL0,#LOW(COUNT) ;重新装入低4位初始值DJNZ SECCOUN,TIMEEND ;判断是否够1秒(20*50us=1S)MOV SECCOUN,#COUNT1 ;重新装入20PUSH ACC ;堆栈SECCHA: MOV A,SEC ;"秒"处理ADD A,#1 ;秒加1DA A ;十进制调整MOV SEC,ACJNE A,#60H,TIMEEND1 ;判断是否够60秒MOV SEC,#0 ;够60秒后,秒位清0MINCHA: MOV A,MIN ;"分"处理ADD A,#1DA AMOV MIN,ACJNE A,#60H,TIMEEND1MOV MIN,#0HOUCHA: MOV A,HOU ;"时"处理ADD A,#1DA AMOV HOU,ACJNE A,#24H,TIMEEND1MOV HOU,#0DAYCHA: MOV A,DAY ;"日"处理MOV A,#1DA AMOV DAY,ACJNE A,#24H,TIMEEND1MONCHA: MOV A,MON ;"月"处理MOV A,#1DA AMOV MON,ACJNE A,#12H,TIMEEND1YEA2CHA:MOV A,YEA2 ;"年"后两位处理MOV A,#1DA AMOV YEA2,ACJNE A,#99H,TIMEEND1YEA1CHA:MOV A,YEA1 ;"年"前两位处理MOV A,#1DA AMOV YEA1,ACJNE A,#99H,TIMEEND1TIMEEND1:POP ACC ;弹出堆栈TIMEEND:RETI;-------------定时器T0中断服务子程序结束-------------;------------------LCD1602显示子程序------------------DISPLAYLCD:MOV R0, #LEDBUF ;显示首地址MOV R1, #LEDBUF+15MOV R2, #0 ;显示第一个字MOV R3, #10000001B ;发送第一行DDRAM地址设置指令MOV R4, #11000001B ;发送第二行DDRAM地址设置指令LOOP1:MOV A,R3ACALL W_CMDMOV A, @R0MOVC A, @A+DPTR ;查表ACALL W_DA TA ;调用LCD显示字子程序INC R0 ;显示下一个字INC R3MOV A,R4ACALL W_CMDMOV A, @R1MOVC A, @A+DPTR ;查表ACALL W_DA TA ;调用LCD显示字子程序INC R1 ;显示下一个字INC R2 ;下一个数INC R4JNB PSW.5,TGCALL DELAYTG:CJNE R2, #15, LOOP1CLR PSW.5LOOP:MOV A, #00001100B ;发送显示开/关控制ACALL W_CMD ;指令,无光标,无闪烁LJMP EXIT ;跳出LCD1602显示子程序TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 2DH,3AH,44H,41H,54H,45H,20H,54H,49H,4DH W AIT:MOV LCD, #0FFH ;令P2作输入口使用CLR RSSETB RWCLR ENOPSETB EJB BF, WAIT ;判断LCD忙标志RETW_CMD: ;入口参数AACALL WAITMOV LCD, ACLR RSCLR RWSETB ENOPCLR ERETW_DA TA: ;入口参数AACALL WAITMOV LCD, ASETB RSCLR RWSETB ENOPCLR ERETEXIT:RET;------------------LCD1602显示子程序结束------------------ DELAY: MOV R6,#00H ;延时子程序MOV R7,#00HDELAY1: NOPDJNZ R7,DELAY1DJNZ R6,DELAY1RETEND图片看不清的可以放大,这个应该会的,不多说。

LCD2004 LCD1602显示自定义汉字详解

LCD2004 LCD1602显示自定义汉字详解

**********/
void main()
{
uint i;
uint count=0;
LcdInit();
IntConfiguration();
K3=1;
Delay10ms(); Delay(1); Delayms(1);
for(i=0;i<8;i++) {
LcdWriteCom(0x40+i); LcdWriteData(sheng[i]); //Delay(100); } LcdWriteCom(0x80); LcdWriteData(0x00);
//26 显示‘日’ //27 显示‘快’ //28 显示‘乐’
for(i=0;i<8;i++)
//29 显示’生‘
{ LcdWriteCom(0x40+i); LcdWriteData(sheng[i]); //Delay(100);
} LcdWriteCom(0xc0+8); LcdWriteData(0x00);
for(i=0;i<8;i++) {
LcdWriteCom(0x58+i); LcdWriteData(le[i]); //Delay(100); } LcdWriteCom(0x80+15); LcdWriteData(0x03);
//14 显示‘日’ //15 显示‘快’ //16 显示‘乐’
for(i=0;i<8;i++) {
LcdWriteCom(0x48+i); LcdWriteData(ri[i]); //Delay(100); } LcdWriteCom(0x80+5); LcdWriteData(0x01);

课程设计之LCD显示数字时钟设计

课程设计之LCD显示数字时钟设计

课程设计之LCD显示数字时钟设计一、课程目标知识目标:1. 学生能理解LCD显示数字时钟的基本原理,掌握电子元件的功能和使用方法。

2. 学生能描述数字时钟的组成,包括时钟芯片、LCD显示屏、电阻、电容等基本元件。

3. 学生能运用所学知识,分析并解释LCD显示数字时钟的电路图。

技能目标:1. 学生能通过实际操作,学会正确焊接电子元件,搭建LCD显示数字时钟电路。

2. 学生能运用编程软件,编写控制LCD显示数字时钟的程序。

3. 学生能通过调试,解决LCD显示数字时钟中的常见问题,确保其正常运行。

情感态度价值观目标:1. 学生在课程学习中,培养对电子制作的兴趣和热情,提高创新精神和动手能力。

2. 学生通过团队协作,培养沟通、交流和合作的能力,增强团队意识。

3. 学生在掌握电子技术知识的过程中,认识到科技对生活的影响,提高社会责任感和使命感。

课程性质:本课程为实践性较强的电子技术课程,结合理论知识与实践操作,培养学生动手能力和创新能力。

学生特点:学生处于高年级阶段,具备一定的电子技术基础,对实践操作有较高的兴趣和热情。

教学要求:教师需关注学生的个体差异,提供个性化的指导,鼓励学生积极参与实践,注重培养学生的实际操作能力和问题解决能力。

同时,关注学生的情感态度价值观的培养,提高学生的综合素质。

通过课程目标的分解,使学生在知识、技能和情感态度价值观方面取得具体的学习成果,为后续教学设计和评估提供依据。

二、教学内容1. 电子元件基础知识:介绍LCD显示屏、时钟芯片、电阻、电容等基本元件的工作原理和功能。

- 教材章节:第二章 电子元件基础- 内容列举:LCD显示屏原理、时钟芯片特性、电阻和电容的分类及应用。

2. 数字时钟原理与设计:分析数字时钟的组成、工作原理,讲解设计方法。

- 教材章节:第三章 数字电路设计- 内容列举:时钟芯片的接口电路、LCD显示接口电路、数字时钟整体设计。

3. 焊接技术:教授焊接工具的使用方法,指导学生进行电子元件的焊接。

外设篇18LCD彩色液晶屏显示汉字、英文、数字9325.

外设篇18LCD彩色液晶屏显示汉字、英文、数字9325.

#include "pbdata.h"//外设篇18.LCD彩色液晶屏显示汉字、英文、数字9325 void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void USART_Configuration(void);int fputc(int ch,FILE *f){ USART_SendData(USART1,(u8)ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);return ch;}int main(void){ u8 i=0;RCC_Configuration();//系统时钟初始化GPIO_Configuration();//端口初始化USART_Configuration();NVIC_Configuration();FSMC_Configuration();ILI9325_Init();delay_ms(1000);ILI_9325_CLEAR(WHITE);for(i=0;i<4;i++){ show_Font(30+i*50,50,i,RED,WHITE);}for(i=0;i<15;i++){ show_Str(10+i*15,100,i,RED,WHITE);}while(1){ delay_ms(200);TFT_Draw_Rectangle(10,150,230,160,RED);delay_ms(200);TFT_Draw_Rectangle(10,150,230,160,BLUE);delay_ms(200);TFT_Draw_Rectangle(10,150,230,160,GREEN);}}void RCC_Configuration(void){ SystemInit();//72mRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);}void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure;//LEDGPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TXGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RXGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);//FSMC 管脚初始化GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOD,&GPIO_InitStructure);GPIO_SetBits(GPIOD,GPIO_Pin_13);//打开背光GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//复位GPIO_Init(GPIOE,&GPIO_InitStructure);//启用fsmc复用功能复用上拉模式GPIO_InitStructure.GPIO_Pin =GPIO_Pin_14 //D0|GPIO_Pin_15 //D1|GPIO_Pin_0 //D2|GPIO_Pin_1 //D3|GPIO_Pin_8 //D13|GPIO_Pin_9 //D14|GPIO_Pin_10;//D15 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOD,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7 //D4|GPIO_Pin_8 //D5|GPIO_Pin_9 //D6|GPIO_Pin_10 //D7|GPIO_Pin_11 //D8|GPIO_Pin_12 //D9|GPIO_Pin_13 //D10|GPIO_Pin_14 //D11|GPIO_Pin_15;//D12 GPIO_Init(GPIOE,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11 //RS|GPIO_Pin_4 //nOE|GPIO_Pin_5; //nWE GPIO_Init(GPIOD,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7; //NE1GPIO_Init(GPIOD,&GPIO_InitStructure);}void NVIC_Configuration(void){ NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}void USART_Configuration(void){USART_InitTypeDef USART_InitStructure;USART_ART_BaudRate=9600;USART_ART_WordLength=USART_WordLength_8b;USART_ART_StopBits=USART_StopBits_1;USART_ART_Parity=USART_Parity_No;USART_ART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_ART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_InitStructure);USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);USART_Cmd(USART1,ENABLE);USART_ClearFlag(USART1,USART_FLAG_TC);}#include "pbdata.h"u8 dt=0;void RCC_HSE_Configuration(void) //HSE作为PLL时钟,PLL作为SYSCLK{ RCC_DeInit(); /*将外设RCC寄存器重设为缺省值*/RCC_HSEConfig(RCC_HSE_ON); /*设置外部高速晶振(HSE)HSE晶振打开(ON)*/ if(RCC_WaitForHSEStartUp() == SUCCESS) { /*等待HSE起振, SUCCESS:HSE晶振稳定且就绪*/RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置AHB时钟(HCLK)RCC_SYSCLK_Div1——AHB时钟= 系统时*/RCC_PCLK2Config(RCC_HCLK_Div1); /*设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟= HCLK*/RCC_PCLK1Config(RCC_HCLK_Div2); /*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟= HCLK / 2*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/*设置PLL时钟源及倍频系数*/ RCC_PLLCmd(ENABLE); /*使能PLL */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*检查指定的RCC标志位(PLL准备好标志)设置与否*/RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK)*/while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL作为系统时钟*/}}void delay(u32 nCount){ for(;nCount!=0;nCount--);}/**************************************************************************** * 名称:delay_us(u32 nus)* 功能:微秒延时函数* 入口参数:u32 nus* 出口参数:无* 说明:* 调用方法:无****************************************************************************/ void delay_us(u32 nus){ u32 temp;SysTick->LOAD = 9*nus;SysTick->VAL=0X00;//清空计数器SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源do{ temp=SysTick->CTRL;//读取当前倒计数值}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}/**************************************************************************** * 名称:delay_ms(u16 nms)* 功能:毫秒延时函数* 入口参数:u16 nms* 出口参数:无* 说明:* 调用方法:无****************************************************************************/ void delay_ms(u16 nms){ //注意delay_ms函数输入范围是1-1863//所以最大延时为1.8秒u32 temp;SysTick->LOAD = 9000*nms;SysTick->VAL=0X00;//清空计数器SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源do{ temp=SysTick->CTRL;//读取当前倒计数值}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}#include "stm32f10x_it.h"#include "stm32f10x_exti.h"#include "stm32f10x_rcc.h"#include "misc.h"#include "pbdata.h"void USART1_IRQHandler(void){ if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){ USART_SendData(USART1,USART_ReceiveData(USART1));while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);}}#include "pbdata.h"void FSMC_Configuration(void){ FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef p;p.FSMC_AddressSetupTime = 0x02;//地址建立时间p.FSMC_AddressHoldTime = 0x00;//地址保持时间p.FSMC_DataSetupTime = 0x05;//数据建立时间p.FSMC_BusTurnAroundDuration = 0x00;//总线恢复时间p.FSMC_CLKDivision = 0x00;//时钟分频p.FSMC_DataLatency = 0x00;//数据保持时间p.FSMC_AccessMode = FSMC_AccessMode_B;//NOR FLASH 的BANK1FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//数据线与地址线不复用FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//存储器类型NOR FLASHFSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;//数据宽度为16 位FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//使用异步写模式,禁止突发模式FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//本成员的配置只在突发模式下有效,等待信号极性为低FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;//禁止非对齐突发模式FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;//本成员配置仅在突发模式下有效。

lcd1602显示字符

lcd1602显示字符

Lcd1602管脚功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。

第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。

15脚背光正极,16脚背光负极。

汇编语言BUSY BIT P0.7LCD_RS BIT P2.0 ;LCD 控制管脚定义LCD_RW BIT P2.1LCD_EN BIT P2.2DATAPORT EQU P0 ;定义LCD的数据端口LCD_X EQU 30H ;LCD 地址变量BUSY_CHECK BIT 20H.0;**********************************************************ORG 0000HAJMP MAINORG 0050H;**********************************************************MAIN:MOV SP,#5FHMOV P0,#0FFHMOV P2,#0FFHACALL LCD_INIT ;LCD初始化MAIN1:MOV B,#00HMOV DPTR,#INFO1 ;指针指到信息1ACALL W_STRING1MOV B,#00HMOV DPTR,#INFO2 ;指针指到信息2ACALL W_STRING2MOV R5,#200 ;延时2秒ACALL DELAYACALL CLR_LINE1 ;清除LCD的第一行ACALL CLR_LINE2 ;清除LCD的第二行MOV B,#00HMOV DPTR,#INFO3 ;指针指到信息1ACALL W_STRING1MOV B,#00HMOV DPTR,#INFO4 ;指针指到信息2ACALL W_STRING2MOV R5,#200 ;延时2秒ACALL DELAYACALL CLR_LINE1 ;清除LCD的第一行ACALL CLR_LINE2 ;清除LCD的第二行AJMP MAIN1;**********************************************************INFO1: DB " WELCOME TO ",0 ;LCD 第一行显示消息INFO2: DB " ",0 ;LCD 第二行显示消息INFO3: DB " ME850 MCU ",0INFO4: DB "DEVELOPMENT KIT ",0;**********************************************************;检查LCD忙状态;busy为1时,忙,等待。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
Temp = digit8[i]
For(j=0 ;j<16; j++)
//此处显示16个bit,代码省略具体结果lcd编程手册
}
//----------------------------------
一般如果显示0~9,就要把所有的数字对应的数组都要,放到二维数组里面。下面给出一个
unsigned short digital_Array[10][8] = {
WriteDot(0,0,A1)
WriteDot(1,0,A2)
WriteDot(2,0,A3)
WriteDot(3,0,A4)
WriteDot(4,0,A5)
WriteDot(5,0,A1)
WriteDot(6,0,A2)
WriteDot(7,0,A3)
WriteDot(8,0,A4)
WriteDot(9,0,A5)
For(i=0 ;i<8; i++)
{
Temp = p[i]
For(j=0 ;j<16; j++){
//此处显示每个bit,代码省略,具体结合lcd编程手册
}
}
}
上图是一个16行,8列的数据,术语叫做1608字库。
看A这一列是16行,每个格子是1个bit,(注意没有填的都是0)那么A这列的值是0x000x00,(注意方向是从上到下,最高bit是在上面)
同理可得到B这一列的值是0x0E0x38
得到c这一列的值是0x110x44
得到D这一列的值是0x1084
得到E这一列的值是0x1084
{0x0000,0x0700,0x088C,0x1044,0x1044,0x0888,0x07F0,0x0000},/*"9" */
};
简单例子,
U8 str[10] = “012356789”;
U8 temp;
U16 * p;
For(i=0; i<10; i++)
{
P = digital_Array[str[i] – ‘0’];
{0x0000,0x07F0,0x0808,0x1004,0x1004,0x0808,0x07F0,0x0000},/*"0" */
{0x0000,0x0804,0x0804,0x1FFC,0x0004,0x0004,0x0000,0x0000},/*"1" */
{0x0000,0x0E0C,0x1014,0x1024,0x1044,0x1184,0x0E0C,0x0000},/*"2" */
明显,上面的图,如果不是色盲的话,看到的就是一个数字8。在编程的时候,
每个格子都对应lcd屏幕上的一个点。已经知道lcd从上到下扫描的,
假设要把数字8,显示在lcd屏幕的左上角(认为坐标是0,0)。那么就要先把第一列的值A1,A2,A3,…A16,把这16个bit的数据写到对应的坐标位置,如下面代码(注意y方向在变化)
…..
WriteDot(14,0,B14)
WriteDot(15,0,B15)
那么可以写成一个两层的for循环来实现。
先把图中的bit数据,弄成一个数组
U8 digit8 = {0x0000,0x0E38,0x1144,0x1084,0x1084,0x1144,0x0E38,0x0000};
For(i=0 ;i<8; i++)
{0x0000,0x0C18,0x1004,0x1104,0x1104,0x1288,0x0C70,0x0000},/*"3" */
{0x0000,0x00E0,0x0320,0x0424,0x0824,0x1FFC,0x0024,0x0000},/*"4" */
{0x0000,0x1F98,0x1084,0x1104,0x1104,0x1088,0x1070,0x0000},/*"5"列的值是0x0E38,
得到H这一列的值是0x0000
问:为什么要从上面第一开始算?
答:这个是编程序比较方便。一般都是认为屏幕的左上角是(0,0)点,
从左到右,X方向,逐渐增多。从上到下y方向,依次增大。
另外lcd扫描的特性,可以从Z字形开始扫描。常规的是,从上到下扫描,再从左到右扫描。以左上角为例,有两种方式,先向下扫描,到屏幕的底部的时候,再从左向右扫描。那么同理右上角,左下角,右下角也是每个都有2种扫描方式。4个角加起来,总共有8种扫描方式。根据常规(即符号正常人的思维和编程方便),所以都是选择第一个左上角的,先下扫描,再从左到右扫描。
WriteDot(10,0,A1)
WriteDot(11,0,A2)
WriteDot(12,0,A3)
WriteDot(13,0,A4)
WriteDot(14,0,A5)
WriteDot(15,0,A16)
然后再写第二列数据
WriteDot(0,0,B1)
WriteDot(1,0,B2)
WriteDot(2,0,B3)
{0x0000,0x07F0,0x0888,0x1104,0x1104,0x1888,0x0070,0x0000},/*"6" */
{0x0000,0x1C00,0x1000,0x10FC,0x1300,0x1C00,0x1000,0x0000},/*"7" */
{0x0000,0x0E38,0x1144,0x1084,0x1084,0x1144,0x0E38,0x0000},/*"8" */
相关文档
最新文档