




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大赛训练期间程序总结报告(一)-显示类 一、显示类:(LED、数码管、LCD)对于显示类的单片机外设,总结起来常用的不过就是:LED(发光二极管)、数码管(由发光二极管组成),LCD(液晶显示屏),它们又分为两大类:一是:即时显示器件。送入数据信号就能马上显示出效果,如:LED和数码管。 二是:有存储功能的显示器件。这类器件送入数据信号不能马上显示(在其内部存在具有存储功能的芯片),而是要等待用户送入一定的操作指令,才能按用户的需求显示数据。由于LCD存在较多的控制接口、相关的存储器件和相关的指令,加之显示操作还要进行寻址,故其操作更复杂,但其能满足用户更多特殊的要求,所以其广泛地应用于日常生活和工业控制中。1、 LDE 跑马灯:对于LED相关的特性及工作原理,我相信各位非常了解,在此我就不再累赘,下面我就直接给出相关的代码:/* 实验目的:学习和掌握发光二极管驱动 */* 程序功能:D2D9依次点亮,点亮间隔为 500ms,然后D9D2依次点亮,点亮间隔为500ms,然后D2D9 闪烁5次(500ms亮,500ms灭)如此循环 */ 包含文件#include STC12C56.H#include STC12C56IO.H#include / 函数申明void Delay_500ms(void);/ 主函数void main(void)uchar i;LED_PWM = 0;while(1)P2 = 0xff;/ D1D8全部熄灭Delay_500ms();/ 延时500msD2 = 0;/ 点亮D2Delay_500ms();/ 延时500msD3 = 0;Delay_500ms();D4 = 0;Delay_500ms();D5 = 0;Delay_500ms();D6 = 0;Delay_500ms();D7 = 0;Delay_500ms();D8 = 0;/ 点亮D8Delay_500ms();/ 延时500msD9 = 0;/ 点亮D9Delay_500ms();/ 延时500msP2 = 0xff;/ D1D8全部熄灭Delay_500ms();/ 延时500msD9 = 0;/ 点亮D9Delay_500ms();/ 延时500msD8 = 0;/ 点亮D8Delay_500ms();/ 延时500msD7 = 0;Delay_500ms();D6 = 0;Delay_500ms();D5 = 0;Delay_500ms();D4 = 0;Delay_500ms();D3 = 0;Delay_500ms();D2 = 0;/ 点亮D2Delay_500ms();/ 延时500msfor(i=0; i5; i+)/ 闪烁5次P2 = 0xff;/ D2D9全部熄灭Delay_500ms();/ 延时500msP2 = 0;/ D2D9全部点亮Delay_500ms();/ 延时500ms/ 延时500msvoid Delay_500ms()/ 12.000MHzunsigned char i, j, k;i = 23;j = 205;k = 120;dodowhile (-k); while (-j); while (-i);对于上序程序进行一个小结:单片的IO口与LED的负极直接相连,程序直接通过控制单片机IO的电平输出直接来控制LED的亮灭,然后综合延时,以达到跑马灯的效果。2、 数码管显示类: 数码管在51单片机设计中是应用最广泛的显示外设之一,一般用于数字显示(如:显示日期、时间、测控到环境的温度、湿度、光照强度,电机(含轴器件)的转速等等),因此也是广泛地应用于日常生活和工业控制。在接下来的大部分项目中我们将直接接触到数码管的应用。对于数码管的结构我提醒的是:A、 一定要注意我们所用数码管是阴极数码管还是阳极数码管。B、 如果是多位的8段数码管,那么一定要分清楚数码管的数据端及控制端(位选端,电源端),然后要辨别出数码管的每一端口与单片机的那个管脚相连,各实现什么功能。C、 由于不同数码管的结构可能存在一定的差异,所以这里我就不详细的给出数码管的字模,以免在程序设计的时候出现错误,不过当你对数码管的结构相当了解后,再用相关的求数码管数模的软件,就能快速而准确的求出来。LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。 A、静态显示驱动: 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动,或者使用如74HC138的3-8译码器进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O占用多,如驱动5个数码管静态显示则需要5840根I/O口来驱动,要知道我们使用的SCT12C5208AD单片机可用的所有端口才28个呢。故实际应用时必须增加驱动器进行驱动,增加了硬体电路的复杂性。 B、动态显示驱动: 数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp 的同名端连在一起,另外为每个数码管的公共极增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。 最后来个小的总结:A、静态显示LED接口:(1) 连接方法 各数码管的公共极固定接有效电平,各数码管的字形控制端分别由各自的控制信号控制。 (2)优点 LED显示亮度温度,容易调节,编程容易,工作时占用CPU时间短。 (3)缺点 若直接用单片机输出各位数码管的字形信号时,占用单片机的I/O口线较多。一般仅适用于 显示位数较少的应用场合。 B、动态显示LED接口 (1)连接方法 各位数码管的字形控制端对应地并在一起,由一组I/O端口进行控制,各位的公共极相互独 立,分别由不同的I/O控制信号控制。 (2)优点 节省I/O端口线 (3)缺点 显示亮度不够稳定,影响因素较多;编程较复杂,占用CPU时间较多。 (注:由于静态显示相对很简单,所以训练代码中只涉及到了动态显示)这里需要指出的是我们在训练所使用的数码管是共阳极的数码管。下面在来看看我们训练项目中所涉及的一些代码:2.1.1 4位共阳8段数码管动态显示/* 实验目的:学习和掌握8段共阳极数码管的动态驱动 */* 程序功能:8段数码管显示1,2,3,4,延时1秒后 显示5,6,7,8,延时1秒后显示8,9 */ 包含文件#include STC12C56.H#include STC12C56IO.H#include / 定义全局变量uchar FIR_Number;uchar SEC_Number;uchar THI_Number;uchar FOU_Number;/ 8段数码管(共阳极)0,1,2,3,4,5,6,7,8,9的字模/ 数字0的字模为0x0a,依次类推code uchar Segments = 0x0a,0xfa,0x4c,0x68,0xb8,0x29,0x09,0x7a,0x08,0x28,0xff;/说明:下边所用到的DIG1_CS 、DIG2_CS、DIG3_CS、DIG4_CS为数码管的位选端,控/制数码管的显示/ 选择第1个数码管 void SEL_FIR() DIG1_CS = 0;DIG2_CS = 1;DIG3_CS = 1;DIG4_CS = 1/ 选择第2个数码管 void SEL_SEC(void)DIG1_CS = 1;DIG2_CS = 0;DIG3_CS = 1;DIG4_CS = 1;/ 选择第3个数码管 void SEL_THI(void)DIG1_CS = 1;DIG2_CS = 1;DIG3_CS = 0;DIG4_CS = 1;/ 选择第4个数码管 void SEL_FOU(void)DIG1_CS = 1;DIG2_CS = 1;DIG3_CS = 1;DIG4_CS = 0;/ 延时1msvoid Delay_1ms()/ 12.000MHzunsigned char i, j; _nop_(); _nop_();i = 12;j = 168;dowhile (-j); while (-i);/ 八段数码管显示数据 void SEG_Display(void)P2 = 0xff; /显示前对P2口(与数码管的数据位相连)先让所有的数码管都不显示。SEL_FIR();/ 选第一个数码管P2 = SegmentsFIR_Number;/ 第一个数据Delay_1ms();/ 延时1msSEL_SEC(); / 选第二个数码管P2 = SegmentsSEC_Number;Delay_1ms();SEL_THI();P2 = SegmentsTHI_Number;Delay_1ms();SEL_FOU();P2 = SegmentsFOU_Number;Delay_1ms();/ 主函数void main(void)uint i;LED_PWM = 0; /清脉冲调制端口P3.5,在这里实际不起很大作用,对运行没的影响/循环的显示1,2,3,4,延时1秒后 显示5,6,7,8,延时1秒后显示8,9while(1) FIR_Number = 0;SEC_Number = 1;THI_Number = 2;FOU_Number = 3;for(i=0;i100;i+)SEG_Display();/ 显示0,1,2,3FIR_Number = 4;SEC_Number = 5;THI_Number = 6;FOU_Number = 7;for(i=0;i100;i+)SEG_Display();/ 显示6,7,8,9FIR_Number = 8;SEC_Number = 9;THI_Number = 10;FOU_Number = 10;for(i=0;i100;i+)SEG_Display();/ 显示6,7,8,9点评:实际每个数码管都接受到了数据,这里动态的控制数码管的显示主要是靠数码管的位选端进行控制。对于数码管的驱动硬件电路其实是数码管的P2的8个IO口都充当了数据端,直接来向数码管的数据端输送数据,这点我们可以在我们的原理图资料中详细的分析出来! -20XX年10月16日晚2.2.2 8位共阴8段数码管138动态显示这个小项目不是通过单片机的IO口直接与数码管的管脚相连来驱动数码显示的,而是借用了一个型号为74HC138的38译码器,这里我简单的将器管脚排列图及真值表给出,其它详细信息可以参考我提供的相关芯片资料。由于我们训练所提供的板子上没有该单元模块,故在此给出相关的驱动电路图:驱动电路连接说明:在上图的电路中P2口是数码管的数据输入端,直接控制数码管的数字显示,通过P1.0、P1.1和P3.7口控制38译码器的数据输入端,通过单片机的这三个端口可以产生000111(二进制数)共8种情况,然后通过38译码器译码在数据输出端Y0Y7(分别与8位数码管的每个为选相连),来控制数码管的循环显示。至于译码器与数码管为何如此相连,再此就不再赘言。下面给出控制该数码显示的代码:3、 /* 实验目的:1.学习和掌握8段共阴极数码管的动态驱动 4、 2.学习和掌握74HC138的3-8译码功能 */5、6、 /* 程序功能:8段数码管显示1,2,3,4,5,6, 7, 7、 延时2秒后,显示8,9,A,B,C,D,E,8、 F,如此循环 */ 9、10、 / 包含文件11、 #include reg51.H12、 #include 13、14、 #define uchar unsigned char15、 #define uint unsigned int16、 /定义8段数码管对应的I/O口 定义为高电平17、 #define SEG_A 0x8018、 #define SEG_F 0x4019、 #define SEG_B 0x2020、 #define SEG_G 0x1021、 #define SEG_C 0x0822、 #define SEG_DP 0x0423、 #define SEG_D 0x0224、 #define SEG_E 0x0125、 /定义38译码器数据输入端、使能端与单片机的连接关系26、 sbit HC138_A = P10;27、 sbit HC138_B = P11;28、 sbit HC138_C = P37;29、 sbit HC138_E1_E2 = P34;30、31、 / 定义全局变量,分别表示第几个数码管。32、 uchar FIR_Number;33、 uchar SEC_Number;34、 uchar THI_Number;35、 uchar FOU_Number;36、 uchar FIV_Number;37、 uchar SIX_Number;38、 uchar SEV_Number;39、 uchar EIG_Number;40、 / 定义8段数码管的字模41、 code uchar Segments =42、 /*43、 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F, / 044、 SEG_B|SEG_C, / 145、 SEG_A|SEG_B|SEG_D|SEG_E|SEG_G, / 246、 SEG_A|SEG_B|SEG_C|SEG_D|SEG_G, / 347、 SEG_B|SEG_C|SEG_F|SEG_G, / 448、 SEG_A|SEG_C|SEG_D|SEG_F|SEG_G, / 549、 SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G, / 650、 SEG_A|SEG_B|SEG_C, / 751、 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G,/ 852、 SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G, / 953、 SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G, / A54、 SEG_C|SEG_D|SEG_E|SEG_F|SEG_G, / B55、 SEG_A|SEG_D|SEG_E|SEG_F, / C56、 SEG_B|SEG_C|SEG_D|SEG_E|SEG_G, / D57、 SEG_A|SEG_D|SEG_E|SEG_F|SEG_G, / E58、 SEG_A|SEG_E|SEG_F|SEG_G, / F59、 */60、 0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,61、 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x7162、 ;63、 /通过单片机输出的数据到38译码器,然后由38译码器解码对数码管位选进行控制;64、 / 选择第1个数码管 65、 void SEL_FIR(void)66、 67、 HC138_A = 0;68、 HC138_B = 0;69、 HC138_C = 0;70、 71、 / 选择第2个数码管 72、 void SEL_SEC(void)73、 74、 HC138_A = 1;75、 HC138_B = 0;76、 HC138_C = 0;77、 78、 / 选择第3个数码管 79、 void SEL_THI(void)80、 81、 HC138_A = 0;82、 HC138_B = 1;83、 HC138_C = 0;84、 85、 / 选择第4个数码管 86、 void SEL_FOU(void)87、 88、 HC138_A = 1;89、 HC138_B = 1;90、 HC138_C = 0;91、 92、 / 选择第5个数码管 93、 void SEL_FIV(void)94、 95、 HC138_A = 0;96、 HC138_B = 0;97、 HC138_C = 1;98、 99、 / 选择第6个数码管 100、 void SEL_SIX(void)101、 102、 HC138_A = 1;103、 HC138_B = 0;104、 HC138_C = 1;105、 106、 / 选择第7个数码管 107、 void SEL_SEV(void)108、 109、 HC138_A = 0;110、 HC138_B = 1;111、 HC138_C = 1;/ Y6112、 113、 / 选择第8个数码管 114、 void SEL_EIG(void)115、 116、 HC138_A = 1;117、 HC138_B = 1;118、 HC138_C = 1;/ Y7119、 120、 / 延时800us 121、 void Delay_800us()122、 123、 uint n = 50000;124、 uint i = 1000;125、 for( ;i 0; i-)126、 127、 for( ; n 0;n-);128、 129、 130、 / 八段数码管显示数据 131、 void SEG_Display(void)132、 133、 P2 = 0x00;/ 熄灭上一个数码管显示数据134、 SEL_FIR();/ 选择第1个数码管有效135、 P2 = SegmentsFIR_Number;/ 显示想相应的数据136、 Delay_800us();/ 延时1毫秒137、138、 P2 = 0x00;/ 熄灭上一个数码管显示数据139、 SEL_SEC(); 140、 P2 = SegmentsSEC_Number;141、 Delay_800us();142、143、 P2 = 0x00;/ 熄灭上一个数码管显示数据144、 SEL_THI();145、 P2 = SegmentsTHI_Number;146、 Delay_800us();147、148、 P2 = 0x00;/ 熄灭上一个数码管显示数据149、 SEL_FOU();150、 P2 = SegmentsFOU_Number;151、 Delay_800us();152、153、 P2 = 0x00;/ 熄灭上一个数码管显示数据154、 SEL_FIV();155、 P2 = SegmentsFIV_Number;156、 Delay_800us();157、158、 P2 = 0x00;/ 熄灭上一个数码管显示数据159、 SEL_SIX();160、 P2 = SegmentsSIX_Number;161、 Delay_800us();162、163、 P2 = 0x00;/ 熄灭上一个数码管显示数据164、 SEL_SEV();165、 P2 = SegmentsSEV_Number;166、 Delay_800us();167、168、 P2 = 0x00;/ 熄灭上一个数码管显示数据169、 SEL_EIG();170、 P2 = SegmentsEIG_Number;171、 Delay_800us();172、 173、 / 主函数 174、 void main(void)175、 176、 uint i;177、 /LED_PWM = 0;178、 HC138_E1_E2 = 0;/ E1和E2使能端清0,允许138显示179、 while(1)180、 181、 for(i=0;i100;i+)182、 183、 FIR_Number = 0;184、 SEC_Number = 1;185、 THI_Number = 2;186、 FOU_Number = 3;187、 FIV_Number = 4;188、 SIX_Number = 5;189、 SEV_Number = 6;190、 EIG_Number = 7;191、 SEG_Display();/显示0,1,2,3,4,5,6,7192、 /193、 /for(i=0;i然后数据会送到内部的输出寄存器-输出。当SCLR(10引脚)为高电平,OE(13引脚)为低电平时,数据在SCK(SHCP 上升沿进入移位寄存器,在LCK(STCP上升沿输出到并行端口。接着我们具体来看下代码: /* 实验目的:1.学习和掌握8段共阳极数码管的动态驱动 2.学习和掌握74HC595的串并转换功能 */* 程序功能:8段数码管显示1,2,3,4,5,6, 7, 延时2秒后,显示8,9,A,B,C,D,E,F,如此循环 */ 包含文件/#include STC12C56.H/#include STC12C56IO.H#includereg51.h#include #define uchar unsigned char#define uint unsigned int / 宏定义延时1s #define Delay_1us _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_()/ 8段数码管位选74595 并口I/O定义/ QHQG QF QE QD QC QA QB#define SEL_EIG 0x80#define SEL_SEV 0x40#define SEL_SIX 0x20#define SEL_FIV 0x10#define SEL_FOU 0x08#define SEL_THI 0x04#define SEL_SEC 0x02#define SEL_FIR 0x01/ 8段数码管段选74595 并口I/O定义#define SEG_A 0xfe#define SEG_G 0xfd#define SEG_DP 0xfb#define SEG_D 0xf7#define SEG_E 0xef#define SEG_B 0xdf#define SEG_C 0xbf#define SEG_F 0x7f/ 74HC595串口I/O口定义sbit DIN = P10; /单片机数据输出口sbit E_595 = P11;sbit SCK = P12;/ 全局变量定义uchar FIR_Number;uchar SEC_Number;uchar THI_Number;uchar FOU_Number;uchar FIV_Number;uchar SIX_Number;uchar SEV_Number;uchar EIG_Number;/ 8段数码管(共阳极)0,1,2,3,4,5,6,7,8,9的字模code uchar Segments =/*SEG_A&SEG_B&SEG_C&SEG_D&SEG_E&SEG_F, / 0 SEG_B&SEG_C, / 1 SEG_A&SEG_B&SEG_D&SEG_E&SEG_G, / 2 SEG_A&SEG_B&SEG_C&SEG_D&SEG_G, / 3 SEG_B&SEG_C&SEG_F&SEG_G, / 4 SEG_A&SEG_C&SEG_D&SEG_F&SEG_G, / 5 SEG_A&SEG_C&SEG_D&SEG_E&SEG_F&SEG_G, / 6 SEG_A&SEG_B&SEG_C, / 7 SEG_A&SEG_B&SEG_C&SEG_D&SEG_E&SEG_F&SEG_G,/ 8 SEG_A&SEG_B&SEG_C&SEG_D&SEG_F&SEG_G, / 9 SEG_A&SEG_B&SEG_C&SEG_E&SEG_F&SEG_G, / A SEG_C&SEG_D&SEG_E&SEG_F&SEG_G, / B SEG_A&SEG_D&SEG_E&SEG_F, / C SEG_B&SEG_C&SEG_D&SEG_E&SEG_G, / D SEG_A&SEG_D&SEG_E&SEG_F&SEG_G, / E SEG_A&SEG_E&SEG_F&SEG_G, / F*/0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/ 串行数据输出到595并口void Output_595(uchar DIS_NUM1, uchar DIS_NUM2)uchar i;/ 输出8位段码 这里给数码管输数据相当于串行通信;for(i=0; i8; i+) DIN = (bit)(DIS_NUM1 & 0x80);/将最高位,也就是送入P1.0的数据判断DIS_NUM1 = 0x01;/将送入的数据的每一位都移到最高位SCK = 0; Delay_1us; Delay_1us;SCK = 1;/ 输出8位位选for(i=0; i8; i+) DIN = (bit)(DIS_NUM2 & 0x80);DIS_NUM2 = 0x01;SCK = 0; Delay_1us; Delay_1us;SCK = 1; Delay_1us; Delay_1us;E_595 = 0;/ 拉低锁存器控制端Delay_1us; Delay_1us;E_595 = 1;/ 上升沿,将数据输出到锁存器Delay_1us; Delay_1us;E_595 = 0;/ 拉低锁存器控制端Delay_1us; Delay_1us;/ 延时1msvoid Delay_1ms()/ 12.000MHzunsigned char i, j;_nop_();_nop_();i = 12;j = 168;dowhile (-j); while (-i);/ 主函数void main(void)uchar SEG_SEL = 0;uchar SEG_NUM = 0;uint i;/LED_PWM = 0;while(1)for(i=0; i139; i+)SEG_SEL = SEL_FIR;SEG_NUM = Segments0;Output_595(SEG_NUM, SEG_SEL);/ 第1个数码管显示0Delay_1ms();SEG_SEL = SEL_SEC;SEG_NUM = Segments1;Output_595(SEG_NUM, SEG_SEL);/ 第2个数码管显示1Delay_1ms();SEG_SEL = SEL_THI;SEG_NUM = Segments2;Output_595(SEG_NUM, SEG_SEL);/ 第3个数码管显示2Delay_1ms();SEG_SEL = SEL_FOU;SEG_NUM = Segments3;Output_595(SEG_NUM, SEG_SEL);/ 第4个数码管显示3Delay_1ms();SEG_SEL = SEL_FIV;SEG_NUM = Segments4;Output_595(SEG_NUM, SEG_SEL);/ 第5个数码管显示4Delay_1ms();SEG_SEL = SEL_SIX;SEG_NUM = Segments5;Output_595(SEG_NUM, SEG_SEL);/ 第6个数码管显示5Delay_1ms();SEG_SEL = SEL_SEV;SEG_NUM = Segments6;Output_595(SEG_NUM, SEG_SEL);/ 第7个数码管显示6Delay_1ms();SEG_SEL = SEL_EIG;SEG_NUM = Segments7;Output_595(SEG_NUM, SEG_SEL);/ 第8个数码管显示7Delay_1ms();for(i=0; i139; i+)SEG_SEL = SEL_FIR;SEG_NUM = Segments8;Output_595(SEG_NUM, SEG_SEL);/ 第1个数码管显示8Delay_1ms();SEG_SEL = SEL_SEC;SEG_NUM = Segments9;Output_595(SEG_NUM, SEG_SEL);/ 第2个数码管显示9Delay_1ms();SEG_SEL = SEL_THI;SEG_NUM = Segments0x0A;Output_595(SEG_NUM, SEG_SEL);/ 第3个数码管显示ADelay_1ms();SEG_SEL = SEL_FOU;SEG_NUM = Segments0x0B;Output_595(SEG_NUM, SEG_SEL);/ 第4个数码管显示BDelay_1ms();SEG_SEL = SEL_FIV;SEG_NUM = Segments0x0C;Output_595(SEG_NUM, SEG_SEL);/ 第5个数码管显示CDelay_1ms();SEG_SEL = SEL_SIX;SEG_NUM = Segments0x0D;Output_595(SEG_NUM, SEG_SEL);/ 第6个数码管显示DDelay_1ms();SEG_SEL = SEL_SEV;SEG_NUM = Segments0x0E;Output_595(SEG_NUM, SEG_SEL);/ 第7个数码管显示EDelay_1ms();SEG_SEL = SEL_EIG;SEG_NUM = Segments0x0F;Output_595(SEG_NUM, SEG_SEL);/ 第8个数码管显示FDelay_1ms();点评: 本小项目的难以理解的地方就是单片机如何将要显示的数据及要位选的那段数码管送入到数码管,理解了这一点,本程序基本就没什么问题。这里单片机的段选数据及他的位选数据都是通过P1.0口送出的(串行方式),再借用74HC595移位存储寄存器来达到程序所表现出来的效果。23 LCD显示类谈到LCD就必须涉及到液晶,液晶是一种高分子材料,因为其特殊的物理、化学、光学特性,在发现之后就广泛的应用与轻薄型显示上。LCD就是我们通常所说的液晶显示器,其工作原理是:以电流刺激液晶分子产生点、线、面并配合背部灯管产生画面。各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名。具体例子我将在下面去涉及。我们在做单片机开发的小项目中常用的通用型LCD有LCD1602、LCD12864、LCD12232等。其中类似于1602这类命名的液晶如0801、0802、1601为字符型液晶,即只能显示:ASCII码字符,如数字、大小写字母,各种符号等。类似于12864这类液晶,如LCD12232、LCD19264、LCD192128等属于图型液晶对于液晶的优缺点,这里我也来一点小的总结:优点:体积小(符合电子产品的智能化、微型化的发展方向)、功耗低、操作相对于传统的显示屏简单。缺点:使用的温度范围很窄。通用型液晶正常工作的温度范围为055度,存储温度范围为-20 +60度之间。2.31 LCD1602 至于LCD1602的相关资料详细其查看我给出的参考资料文档。 LCD1602与单片机的连接关系,详细的参考给出的原理图。在看相关的代码前我们先要弄清楚两个问题:一、通常使用的1602液晶为+5V的电压驱动,带背光。可显示两行,每行16个字符,不能显示汉字,内置128个字符的ASCII字符集字库,只有并行接口。二、当用单片机控制LCD1602,对其写入数据/指令时,LCD的使能控制端E在高脉冲下,LCD才进行一个响应。那么高脉冲与高电平有什么区别?这个太简单我就不叙述了。要知道这个没搞清楚就无法进行代码的编写哦!我还是简单的叙述下单片机如何来产生一个高脉冲:先对要产生脉冲的那个管脚赋一个低电平,然后延时一段时间,在要对LCD进行写操作(数据/指令)时,再向单片机该管脚送一个高电平,这样就可以产生一个高脉冲,以使LCD进行响应。下面在程序中将会看到这一点操作。接下来看看相关的控制代码:/* 实验目的:学习和掌握LCD1602字符型液晶显示器的驱动 */* 程序功能:LCD1602字符型液晶显示器分两行显示: A ,B,C,D,E,F,G,H,I,J,K,M,N,O, P;1,2,3,4,5,6,7,8,9,10,11,12 */ / 包含文件#include STC12C56.H#include STC12C56IO.H#include / 宏定义延时1us #define DELAY_1US _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()/ 定义显示字符code uchar Display_NUM_1 = ABCDEFGH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 失智老人照护上海城建职业76课件
- 宿舍楼卫生间与洗衣设施设计方案
- 建筑工程项目楼宇结构安全监测方案
- 水的基本知识培训总结
- 药师培训基础知识47课件
- 原发性高血压82课件
- 中医药现代献检索医学信息检索78课件
- 二零二五年度门窗工程知识产权保护合同
- 二零二五年度土地整治与勘察设计合同
- 二零二五年度文化项目居间合同范本格式
- 《中华人民共和国学前教育法》知识培训
- 2024年北京邮电大学人员招聘笔试真题
- T/CFPA 017-2023消防员防护辅助装备阻燃防静电内衣
- 价值导向引领:CRM策略的深度剖析与创新实践
- 鼓胀中医护理
- 设备整厂出售合同协议
- 2025-2030中国高k和ALD和和CVD金属前体行业市场发展趋势与前景展望战略研究报告
- 2025年4月12日衢州事业单位及市直遴选(选调)笔试真题及答案解析
- 占用林地补偿协议书
- 大体积混凝土施工培训讲义
- 压力性损伤课件
评论
0/150
提交评论