版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一节单片机的用途单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统.这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务.单片机也被称为微控制器(Microcontroler),是因为它最早被用在工业控制领域。单片机由芯片内仅
2、有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对提及要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了
3、巨大的提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
4、160;单片机由于其不断完善的性能和其低廉的价格,收到了大家的拥戴,使其在仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域都发挥着不可替代的作用: 1.在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量.采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大.例如精密的测量设备(功率计,示波器
5、,各种分析仪). 2.在工业控制中的应用 用单片机可以构成形式多样的控制系统、数据采集系统.例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等. 3.在家用电器中的应用 可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在. 4.在计算机
6、网络和通信领域中的应用 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等. 5.单片机在医用设备领域中的应用 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等.
7、160; 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途.。接下来就让我们从C语言编程开始,一步一步学习单片机,相信有一天,大家能利用单片机做出自己独具特色的作品来。第二节C语言基本知识位运算是对二进制数据以位为单位(bit)进行的运算。C语言提供了六种位运算符。参加运算的操作数可以是char类型、int类型和long类型的变量或常量。实型是不能进行位运算的。一、基本运算符位运算符及其功能优先级如表一:表一:运算符名称优先级按位取反1(高)<<左移2>>右移2&按位与3按位异或4|按位或5(低)1、
8、按位取反():它的运算功能是对一个二进制数按位取反,即使每一位上的0变1,1变0。例: 101101=0100102、左移位(<<):它的运算功能是将一个二进制数的各位全部左移若干位,超过该数范围的高端舍去,低端补零。例:11101101<<2=101101003、右移位(>>)它的运算功能是将一个二进制数的各位全部右移若干位。右端低位移出部分舍去,高位部分补零。例:11101101>>2=00111011注意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则左边
9、移入0还是1,要取决于用的计算机系统。有的系统移入0,有的系统移入1。移入0的称为“逻辑右移”,即简单右移;移入1的称为“算术右移”。例如:不过,我们在单片机编程时,一般将变量都设置为无符号型的变量,如果大家在以后的编程过程中用到有符号型的变量,就要注意这一点。4、按位与(&)它的功能是将运算符两边的数,按照二进制位进行与运算,如果两个对应的运算位都是1,则结果位为1,否则为0。例:101101 & 0010100010005、按位异或()它的功能是将运算符两边的数,按照二进制位进行异或运算,如果两个对应的运算位的数不同,则该位结果为1,否则结果为0。例: 10110100 1
10、11111111010010116、按位或(|)它的功能是将运算符两边的数,按照二进制位进行或运算,如果两个对应的运算位都是0,则结果位为0,否则为1。例:101101 | 001010101111二、位自反赋值运算符位自反赋值运算符与赋值运算符和算术自反运算符是同级的,只高于逗号运算符,低于所有其他运算符。其结合性是自右向左。位自反赋值运算符共有五个,其运算符及作用如表二:表二:符号名称用途&=位与赋值a&=b等价于a=a&b|=位或赋值a|=b等价于a=a|b=位按位加赋值a=b等价于a=ab<<=位左移赋值a<<=b等价于a=a<&l
11、t;b>>=位右移赋值a>>=b等价于a=a>>bC语言的位运算的基本功能就给大家介绍到这里,位运算在对单片机的操作中起着举足轻重的作用,位运算还能实现许多特殊的功能如:保留原值(与相);)不用临时变量来交换两个值(可通过语句:(ab;ba;ab)来实现),大家可以自己查资料学习,这里就不给大家多作介绍了。三、二进制与十六进制的转换十六进制与二进制基本相同,二进制用“0和1”来表示,十六进制的表示形式为0Xmn:其中X可小写,在具体表示时,mn用“09”以及“AF”来替换。将一个二进制数转换为十六进制数的具体步骤如下:1、取四合一,向左每四位二进制取成一位,
12、如果向左取四位后,取到最高位时候,如果无法凑足四位,可以在最左边,即整数的最高位添0,凑足四位。 2、接着将这四位二进制按权相加,相加后结果如果是“1015”就依次用“AF”表示,如果相加结果是“09”,就用原数表示。3、按顺序进行排列,得到的数字就是我们所求的十六进制数。例:将二进制110101转换为十六进制的过程如下:1101à13à用D(d)表示;110à不足四位,添零à0110à6;最终结果:0x6d(0X6D或0X6d或0x6D) 由于在用C语言编写C语言程序时不涉及到小数,所以这里不多作介绍,大家有兴趣可以自己查资料学习。第三节ST
13、C12C5410性能介绍STC12C5410系列单片机是由宏晶科技生产的单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。其主要性能特点如下:1增强型1T流水线/精简指令集结构8051CPU。2工作电压:5.5V3.4V(5V单片机)/3.8V2.0V(3V单片机)。3工作频率范围:035MHz,相当于普通8051的0420MHz。4用户应用程序空间12K/10K/8K/6K/4K/2K字节。5片上集成512字节RAM。6通过I/O口(27/23个),复位后为:准双向口/弱上拉(普通8051传
14、统I/O口)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。7ISP(在系统可编程)/ASP(在应用可编程),无需专用编程器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片。8EPROM功能。9看门狗。10内部集成MAX810专用复位电路(外部晶振20M以下时,可省外部复位电路)。11时钟源:外部高精度晶体/时钟,内部R/C振荡器用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟常温下内部R/C振荡器频率为:5.65MHz5.95MHz精度不高时,可选择使用内部时钟,但因为有温漂,应认为是5MHz6.5MHz。12共2个16位定时器/
15、计数器。13PWM(4位)/PCA(可编程计数器阵列),也可用来在实现4个定时器。14ADC,10位精度ADC,共8路。15通用异步串行口(UART)。16SPI同步通信口,主模式/从模式。17工作温度范围:075/-40+85。18封装:PDIP28,SOP28,PDIP20,SOP20,TSSOP20,PLCC32STC12C5410AD单片机中包含中央处理器、程序存储器(Flash)、数据存储器(RAM)、EEPROM、定时/计数器、I/O接口、UART接口和中断系统、SPI接口、高速A/D转换模块、PWM(或捕捉/比较单元)以及硬件看门狗、电源监控、片内RC振荡器等模块。可以说STC1
16、2C5410AD单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片上系统(SOC),可以很容易地构成典型的测控系统。STC12C5410引脚图 第四节Keil软件的使用方法Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编语言和 C 语言的程序设计,界面友好,易学易用。以下介绍的是Keil uVision2,如果你使用的是Keil uVision3,你需要根据单片机的型号,在相关设置上稍作改动(相关的地方后面有说明)!下面介绍Keil C51软件的使用方法:进入 Keil C51 后,屏幕如下图所示。几秒钟后出现编辑界面:进入Keil
17、 C51后的编辑界面(1) 新建工程单击Project菜单,在弹出的下拉菜单中选中New Project选项然后选择你要保存的路径,输入工程文件的名字,比如保存到D盘的CMJ51文件夹里,工程文件的名字为CMJ1如下图所示,然后点击保存.这时会弹出一个对话框,要求你选择单片机的型号,可以根据用户使用的单片机来选择,实验板上使用的是STC12C5410AD,我们在对话框中找不到这一款单片机。它是新一代的51单片机,因为51内核单片机具有通用性,所以这里我们可以选一块89C51就行。如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.用Keil uVision3的话,根
18、据实验板上单片机的型号,我们应做如下选择:(以后的操作Keil uVision3和Keil uVision2都一样)完成上一步骤后,屏幕如下图所示到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。(2)新建文件在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了。键入程序后界面如下:单击file菜单下的save,出现一个对话框,键入文件名,后缀名为. c(用C语言编程时用)或asm(用汇编语言编程时用)或.h(自己建立库文件时用),进行保存到D盘CMJ51文件夹下,界面如下:点击保存即可,
19、出现如下界面。(3) 添加文件回到编辑界面后,单击“Target 1”前面的“”号,然后在“Source Group 1”上单击右键,弹出如下菜单然后单击“Add File to Group Source Group 1”屏幕如下图所示选中cmj1.asm,然后单击“Add ”屏幕好下图所示:(如果用C语言编程,选中“.c”文件即可。(4)汇编连接(C语言编程也一样)单击如下图所示的图标(rebuilt all target files)出现如下界面:(5)运行看结果单击如下图的图标(start/stop debug session),进入运行状态出现如下界面:单击一次下图的图标(step i
20、nto),程序就能运行一条,一直到程序的结束(ret)。运行结束后,直接可以在如下界面中看结果。特殊功能寄存器中的内容可以在界面中直接看到,存储单元的内容在memory #1中输入如上图所示的地址,即可看到该单元的内容为66H。下面进行工程配置。点击Project菜单下的Options for Target Target 1。在弹出对话框的Target 项里输入晶振为12M,然后勾上Use On-chip ROM。在Output项里勾上Create HEX File。这就是产生要烧写的.hex文件。然后点击Project菜单里的build target或Rebuild all target f
21、iles以编译要烧写的.hex文件。编译完成后,会在下面Output Window里显示编译成功与否的信息和错误提示。Keil软件的使用就介绍到这里,大家可以通过下一节流水灯的实验来熟悉对该软件的使用。第五节流水灯的控制1、怎样点亮一个发光二极管点亮放光二极管的程序如下:#include<reg52.h>/52系列单片机头文件sbit led=P10;/声明单片机P1口的第一位void main()/主函数led=0;/点亮第一个发光二极管从上面的程序大家可以看到:点亮第一个发光二极管,就是通过控制单片机的P1.0口,让其输出低电平,这样就在单片机的P1.0口、发光二极管、电源之间
22、形成回路,从而点亮发光二极管。由于是对单片机的P1口的第一位进行操作,为了书写和理解的方便,我们将P1口的第一位定义为led,实际上也可省掉这一步,直接用程序进行位操作,如:#include<reg52.h>/52系列单片机头文件void main()/主函数P10=0;/让单片机在P1.0口输出低电平,/从而点亮第一个发光二极管2、流水灯的控制相必大家对单片机的位操作已经有了一定的了解,接下来就让我们一起来学习对多个发光二极管的控制,制作出一串串闪亮的流水灯。首先向大家介绍一下51单片机里常用的函数循环左移与循环右移函数:大家可以打开Keil软件安装文件夹,定位到KeilC51H
23、LP文件夹,打开此文件夹下的C51lib,这是C51自带库函数帮助文件。在索引栏找到_crol_函数,双击打开它介绍,如下:_crol_#include <intrins.h>unsigned char _crol_ (unsigned char c, /* character to rotate left */ unsigned char b); /* bit positions to rotate */Description:The _crol_ routine rotates the bit pattern for the character c left b bits. T
24、his routine is implemented as an intrinsic function. The code required is included in-line rather than being called.Return Value:The _crol_ routine returns the rotated value of c.Attributes:reentrant, intrinsicSee Also:_cror_, _irol_, _iror_, _lrol_, _lror_Example#include <intrins.h>void tst_c
25、rol (void) char a; char b; a = 0xA5; b = _crol_(a,3); /* b now is 0x2D */它是一个循环左移函数,使用格式如:_crol_(a,b),其中a是被循环左移的数,b是循环左移的位数。例如:#include <intrins.h> /使用_crol_时需包含的头文件#include<reg52.h>/52系列单片机头文件void main()unsigned int a=01101111;_crol_(a,3);执行完程序后,a=01111011。_cror_表示循环右移,其用法和_crol_类似,这里就不
26、多作介绍了。接下来我们通过一段程序的演示来学习:/*函数功能:1、依次让第一个至第八个发光二极管点亮,每个发光二极管亮一秒;2、轮流亮完后,所有发光二极管都亮一秒,然后所有发光二极管都灭一秒;3、依次让第八个至第一个发光二极管点亮,每个发光二极管亮一秒;4、轮流亮完后,所有发光二极管都亮一秒,然后所有发光二极管都灭一秒;5、依次循环下去*/#include<reg52.h>/52系列单片机头文件#include<intrins.h>/使用_crol_、_cror_时需包含的头文件void delay_ms(unsigned unsigned int xms)/软件延时函
27、数,其中xms /为参数,表示延时x msunsigned int i; for(i=110;i>0;i-) for(i=xms;i>0;i-);unsigned int b;/定义变量b,用来控制第几个发光二极管亮void main()P1=0X00;while(1)P0=0xfe;/11111110,第一个灯亮 /因为进入循环后有延时,所以这里不需要延时 for(b=0;b<=6;b+)/for循环,依次点亮剩余7个发光二 /极管 delay_ms(1000);/延时1000ms=1s P0=_crol_(P0,1);/循环左移一位->第一次循环/P0=111111
28、01第二个灯亮delay_ms(1000);/延时1000ms=1s,让最后一个灯灯亮1sP0=0x00;/让所有发光二极管都亮 delay_ms(1000);/延时1000ms=1s,让所有灯亮1sP0=0xff;/让所有发光二极管都灭 delay_ms(1000);/延时1000ms=1s,让所有灯灭1s P0=0x7f;/01111111,最后一个灯亮for(b=0;b<=6;b+)delay_ms(1000);/延时1000ms=1s P0=_cror_(P0,1);/循环右移一位->第一次循环/P0=10111111,倒数第二个灯亮delay_ms(1000);/延时10
29、00ms=1s,让第一个灯亮1sP0=0x00;/让所有发光二极管都亮 delay_ms(1000);/延时1000ms=1s,让所有灯亮1sP0=0xff;/让所有发光二极管都灭 delay_ms(1000);/延时1000ms=1s,让所有灯灭1s除这种方法实现流水灯外,利用左移、右移指令与逻辑运算也能实现循环移动,大家只要多动动手,就能够随心所欲地控制发光二极管的闪烁。第六节 数码管的静态显示一、数码管的介绍:数码管是电路中常见的显示原件,按段数的多少可分为七段数码管和八段数码管七段数码管多一个发光二极管单元(多一个小数点显示);按照显示"8"的个数,可分为 1 位、
30、2位、4位等数码管,如下图所示:按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,如下图所示:共阳数码管在应用时应将公共极接到+5V或+3.3V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管在应用时应将公共极COM接到地线 GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。二、数码管的显示:任何一个 7段码管都有 12
31、8种显示模式,而其中的数字 0-9是最为有用也是最常见的。通过控制共阳极(共阴极)数码管的阴极(阳极),可以让数码管显示不同的字符,下表是共阴数码管的码段:符号编码符号编码00x3f80x7f10x0690x6f20x5bA0x7730x4fB0x7c40x66C0x3950x6dD0x5e60x7dE0x7970x07F0x71对于多位数码管而言,实际中为了简化电路,将所有共阴极数码管的阳极接到一起,所有共阳极数码管的阴极接到一起,用多个独立的位选和 7个(或 8个)公共段选控制所有的数码管。由于所有数码管共用段选,为了独立显示每位数码管,只能用位选来区分不同的数码管。具体来说就是每次只将某
32、一位数码管的位选置为有效,其它数码管的位选都无效。此时的段选决定了该位数码的显示。然后在下一个时刻,置下一位数码管的位选有效,其它数码管的位选都无效。依次类推,循环往复。下面用共阴的4位数码管为例来说明:当位选1为低,其它位选都为高时,第一位数码管被选中,此时的共用段选用于第一位数码管的显示;位选 2为低时(其它位选都为高),第二位数码管被选中,此时的共用段选用于第二位数码管的显示,三、四位数码管的显示依次类推。在一个刷新周期T内,每位数码管都有 1/4T周期的时间被刷新。为了保证所有 4位数码管的显示不闪烁,一般刷新频率要大于 45Hz。在一个周期中,虽然每位数码管会有 3/4T的时间不被点
33、亮,但位选刷新的速度较快,同时由于数码管自身的余辉特性,每位数码管在变暗之前就又会被重新刷新,因此人眼无法感觉到数码管变暗。如果刷新的频率小于一定值(如 45Hz),则人眼就会感觉到数码管的闪烁。一般刷新频率在 60Hz到 1KHz之间时,多位数码管显示得比较理想。在实际的电路中,我们可以分别利用单片机的IO口分别控制多位数码管的位选和段选,但是我们不这么做,因为那样不但浪费了IO口资源,而且还浪费了宝贵的MCU时间,我们通常是利用锁存器来对多位数码管进行控制。三、锁存器:锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把当前的状态锁
34、存起来,使CPU送出的数据在接口电路的输出端保持一段时间,锁存后状态不再发生变化,直到解除锁定。在LED和数码管显示方面,要维持一个数据的显示,往往要持续的快速的刷新。尤其是在四段八位数码管等这些要选通的显示设备上。在人眼能够接受的刷新频率之内,大概每三十毫秒就要刷新一次。这就大大占用了处理器的处理时间,消耗了处理器的处理能力,还浪费了处理器的功耗。 锁存器的使用可以大大的缓解处理器在这方面的压力。当处理器把数据传输到锁存器并将其锁存后,锁存器的输出引脚便会一直保持数据状态直到下一次锁存新的数据为止。这样在数码管的显示内容不变之前,处理器的处理时间和IO引脚便可以释放。可以看出,处理
35、器处理的时间仅限于显示内容发生变化的时候,这在整个显示时间上只是非常少的一个部分。而处理器在处理完后可以有更多的时间来执行其他的任务。这就是锁存器在LED和数码管显示方面的作用:节省了宝贵的MCU时间。 下面为大家介绍常用的锁存器:74HC573和74LS595(一)、74HC573:74HC573是高性能硅门 CMOS器件,当锁存使能端为高时,输入与输出同步。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。74HC573的特点如下:输出能直接接到CMOS,NMOS 和TTL 接口上;操作电压范围:2.0V6.0V;低输入电流:1.0uA;CMOS 器件的高噪声抵抗特性。其引脚图如下:
36、其功能表如下:(H代表高电平,L代表低电平,X代表任意电平,Z代表高阻态)输入 输入 输入 输出OELEDQHXXZLLX不变LHLLLHHH从表中可以看出:给芯片的OE端输入低电平时,芯片才能工作。当OE端为低电平,LE端为低电平时,锁存器处于锁存状态;当OE端为低电平,LE端为高电平时,锁存器处于导通状态,输入与输出同步。(二)、74LS595(8 位输出锁存移位寄存器):74HC595的引脚图如下:1、74595 的数据端:Q1Q7: 八位并行输出端,可以直接控制数码管的8 个段。SDI: 串行数据输入端。2、74595 的控制端:SCLR(10 脚): 低电平时将位移缓存器的数据清零。
37、SCK(11 脚):上升沿时,数据输入八位位移缓存器;下降沿位移缓存器数据不变。LCK(12 脚):上升沿时八位平行缓存器会撷取八位位移缓存器上的数据也就是说:595输出"b"3、具体控制595的操作步骤:对Q1->Q2->Q3->.->Q7上的数据进行一次更改时:(1)、将要更改成的数据一位一位地从SDI输入(具体怎样操作,见下面的程序),每次对74LS595写入一位数据的时候,要给SCK一个上升沿,这样从SDI输入的数据才能临时地被存储起来(存储在八位位移缓存器中);(2)、重复上述操作,直到数据一位一位地被写入完毕;(3)、然后给LCK一个上升
38、沿,将存储在位移缓存器中的数据传送给平行缓存器,即:Q1->Q2->Q3->.->Q7上输出新数据;(4)、然后将LCK置低,锁存Q1->Q2->Q3->.->Q7上的数据,如果要连续改动Q,1->Q2->Q3->.->Q7上的数据,重复上述操作就行。G(13 脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。74595 的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处。接下来就让
39、我们通过编程来进一步学习数码管与锁存器:/函数功能:从0F,每秒显示一个数#include<stc12c5410ad.h>/包涵头文件sbit LCK=P34;/上升沿时八位平行缓存器会撷取八位位移缓/存器上的数据sbit SCK=P35;/上升沿时,数据输入八位位移缓存器sbit SDI=P33;/数据输入端unsigned char m;const unsigned char Code=/数码管显示码段0x3F,/ 00x06,/ 10x5B,/ 20x4F,/ 30x66,/ 40x6D,/ 50x7D,/ 60x07,/ 70x7F,/ 80x6F,/ 90x77,/ A0
40、x7C,/ B0x39,/ C0x5E,/ D0x79,/ E0x71/ F;void delay1(unsigned int a)/延时函数1unsigned int i;for(i=a;i>0;i-);void delay2(unsigned int c)/延时函数2,延时c毫秒unsigned int i,j;for(i=330;i>0;i-)for(j=c;j>0;j-);void write (unsigned char b)/数码管显示函数unsigned char j;for(j=0;j<8;j+)SCK=0;/与后面SCK=1搭配,表示给SCK上升沿作用
41、/是:将数据输入八位位移缓存器,因为数据只/能一位一位地输入,所以后面用if和else语句if(0x80&b)/"b&10000000",相当于取"b"的最高位SDI=1;/当最高位为1时,SDI为1,表示输入为1 elseSDI=0;/当最低位为0时,SDI为0,表示输入为0/if与else连用,保证了"b"能够一位一位地发/送进入595,并储存在平行缓存器中delay1(100);/需保证低电平的时间,否则595无法正常工作SCK=1;/与前面SCK=0搭配,表示给SCK上升沿 b<<=1;/b左移一位
42、LCK=0;/上升沿时八位平行缓存器会撷取八位LCK=1;/位移缓存器上的数据也就是说:595输出"b"LCK=0;/锁存输出的数据void main()P1M0=0;/设置P1和P3为强推挽输出(大功率输出),P1M1=0xff;/ 必须设置,否则一次无法驱动多个数码管P3M0=0;P3M1=0xff;while(1)/显示函数for(m=0;m<=15;m+)/循环显示P1=0xff;write(Codem);/数码管显示数组Code中的第m+1个数delay2(1000);/延时1000毫秒因为上面是对三个数码管同时进行扫描,即:三个数码管同时被点亮,也同时被熄
43、灭。所以,上面点亮数码管的方式是静态扫描。下面为大家介绍另外一种点亮数码管的方式:动态扫描。程序如下:/函数功能:从左往右,3个数码管一起,依次/显示012、123、.dEF、dFF、FFF。#include<stc12c5410ad.h>/包涵头文件sbit LCK=P34;/上升沿时八位平行缓存器会撷取八位位移缓/存器上的数据sbit SCK=P35;/上升沿时,数据输入八位位移缓存器sbit SDI=P33;/数据输入端unsigned char m;const unsigned char Code=/数码管显示码段0x3F,/ 00x06,/ 10x5B,/ 20x4F,/
44、 30x66,/ 40x6D,/ 50x7D,/ 60x07,/ 70x7F,/ 80x6F,/ 90x77,/ A0x7C,/ B0x39,/ C0x5E,/ D0x79,/ E0x71/ F;void delay1(unsigned int a)/延时函数1unsigned int i;for(i=a;i>0;i-);void delay2(unsigned int c)/延时函数2,延时c毫秒unsigned int i,j;for(i=330;i>0;i-)for(j=c;j>0;j-);void write (unsigned char b)/数码管显示函数unsigned char j;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 传染病病人的护理练习试卷2(附答案)
- 村干部困难群众帮扶不实整改措施
- 2026年电力法高压安全距离
- 2026年小学生过年活动计划方案
- 苏教版科学小学五年级上册期末测试卷51
- 2026工艺助理面试题及答案
- 苏教版科学小学五年级上册期末测试卷必考 (二)
- 2026古装化妆师面试题及答案
- 双减背景下如何设计小学语文作业
- 2026盒马鲜生面试题及答案
- 2026年四川省成都市成华区中小学教师公开招聘试题及答案
- 2026年公交集团招聘笔试试卷及参考答案
- 中华人民共和国生态环境法典知识测试题库及参考答案
- 临床科室绩效核算分配方案
- 2026年形势与政策习题题库试题附答案详解(考试直接用)
- TCSAE《电动汽车驱动电机轴承电腐蚀试验及评价方法》
- 心血管内科护理常考试试题(附答案)
- 罪犯入监教育工作制度
- 逐一整改销号工作制度
- 使用单位特种设备安全风险管控清单
- 中建EPC工程总承包项目全过程风险清单(2023年)
评论
0/150
提交评论