




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《单片机应用技术项目式教程(C语言版)》项目0基础知识
蓄势待发情景导入:
学习单片机也是如此,在走进单片机梦幻世界之前先做足准备工作,才能有完美的结果。古代军队行军打仗一样,在出战前把马喂饱,把武器磨得锋利,把一切准备做足做好才能取胜。
1任务0.1认识C51单片机2任务0.2Keil软件的使用3任务0.3Protues软件的使用4任务0.4电子产品开发流程目录任务0.1认识C51单片机项目0基础知识蓄势待发任务0.1
认识单片机情景导入:
单片机在手机、家电、汽车中的广泛应用
单片机(SingleChipComputer)又称为单片微型计算机,采用超大规模集成电路技术,构成的一个小而完善的微型计算机系统在一块硅片上集成微处理器、存储器及输入/输出接口、时钟电路等的芯片。单片机芯片具有计算机的属性一单片机的定义1.什么是单片机?单片机主要组成部分①中央处理器CPU②输入/输出接口③定时器/计数器④存储器(RAM、ROM)2.单片机的应用领域广泛应用于家用电器的自动控制,智能卡特点:提高家用电器的性能和质量;降低家用电器的生产成本和销售价格。智能仪器家用电器单片机体积小,耗电少,被广泛用于各类仪器仪表特点:单片机使仪器仪表走向了智能化和微型化,使仪器仪表的功能和可靠性大大提高。单片机的定义一网络通信工业控制单片机可以构成各种工业测控系统,数据采集系统。如:数控机床、汽车安全技术检测系统,报警系统和生产过程自动控制等。许多型号的单片机都有通信接口可方便地进行机间通信,也可方便地组成网络系统。如:单片机控制的无线遥控系统,列车无线通信系统和串行自动呼叫应答系统等。单片机的定义一主要讲授目前国内外用的较多的以51内核扩展出的单片机,即我们常说的51单片机。本课程实验板上使用的单片机型号为STC90C52RC。常见封装类型如图:
单片机的类型1.单片机封装DIP封装PLCC封装单片机的类型二二STC—前缀,表示芯片为STC公司生产的产品。其他前缀还有AT、i、Winbond、SST等。8—表示该芯片为8051内核芯片。9—表示内部含FiashE2PROM存储器。C—表示该产品为CMOS产品。5—固定不变。2—表示该芯片内部程序存储空间的大小,1为4KB,2为8KB,3为12KB。RC—STC单片机内部RAM为256B。40—工作频率可达40MHz。C—产品级别,表示芯片温度使用范围。C表示商业级,温度范围为0°C~+70°C。PDIP—产品封装型号。PDIP表示双列直插。1826—表示该芯片生产日期为18年第26周。2.单片机标号信息单片机的类型二1)单芯片微机形成阶段(1971-1978年)
1976年,Intel公司推出了MCS-48系列单片机。8位CPU、1K字节ROM、64字节RAM、27根I/O线和1个8位定时/计数器。单片机的发展三1.单片机发展过程
特点:存储器容量小,寻址范围小(不大于4K),无串行接口,指令系统功能不强。2)性能完善提高阶段(1978-1981年)
1980年,Intel公司推出了MCS-51系列单片机:8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。单片机的发展三
特点是:结构体系完善,性能已大大提高,面向控制的特点进一步突出。MCS-51成为公认的单片机经典机种。3)微控制器化阶段(1982-199x年)
1982年,Intel推出MCS-96系列单片机。芯片内集成:16位CPU、8K字节ROM、232字节RAM、5个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K。片上还有8路10位ADC、1路PWM输出及高速I/O部件等。单片机的发展三
特点:片内面向测控系统电路增强,使之可以方便灵活地用于复杂的自动测控系统及设备。“微控制器”的称谓更能反应单片机的本质。1)8位单片机完全满足需求并且价格低廉,仍将是单片机市场的主流产品;16位和32位单片机随着技术发展和开发成本的下降,会在更多科技产品中大显身手。2)单片机运行速度越来越快Motorola公司则使用了琐相环技术或内部倍频技术使内部总线速度大大高于时钟产生器的频率,如68HC08单片机使用4.9M外部振荡器而内部时钟达32M,M68K系列32位单片机使用32K的外部振荡器频率而内部时钟可达16MHz以上。单片机的发展三2.单片机发展趋势3)单片机向低功耗与低工作电压方向发展一般单片机都能在3~6V范围内工作,低电压供电的单片机电源下限已由2.7V降至2.2V、1.8V,同时0.9V供电的单片机已经问世。4)单片机采用高可靠性与低噪声技术美国国家半导体NS的COP8单片机内部增加了抗EMI(ElectroMagneticInterference,电磁干扰)电路,增强了“看门狗”的性能。同时,由于应用领域环境要求的提高,Motorola公司推出了低噪声的LN系列单片机。单片机的发展三2.单片机发展趋势
单片机,专业名称—MicroControllerUnit(微控制器件),它是由INTEL公司发明,最早的系列是MCS-48,后来有了MCS-51,还有MCS-96系列,我们经常说的51系列单片机就是mcs-51,它是一种8位的单片机,而MCS-96系列则是一种16位的单片机。
后来INTEL公司把它的核心技术转让给了世界上很多的公司,所以世界上就有许多公司生产51系列兼容单片机,比如飞利浦的87LPC系列,伟邦的W78L列,达拉斯的DS87系列,现代的GSM97系列等等,目前在我国比较流行的就是美国ATMEL公司的89C51系列。单片机产品四任务0.2Keil软件的使用项目0基础知识蓄势待发0.2KeilµVision使用KeilµVision4打开后的界面工程工作区文本编辑区输出窗口
目标程序即最终烧写到单片机芯片内的文件,通常为.hex格式。
1.创建工程文件
选择菜单“Project”/“NewProject”命令,创建“**”工程,并保存。创建工程选择保存路径输入工程名,默认扩展名“.uv2”,不用输入点击“Atmel”前面“+”号,在打开的内容里选择AT89C51。2.选择CPU类型
选择CPU型号选择菜单“File”/“New”创建文件,输入C语言源程序,保存“program2_1.c”。3.创建源程序文件在“Project”窗口中点击“Target1”前面的“+”号,打开下一层“SourceGroup1”,在其上右击,选择快捷菜单中的“AddFiletoGroup‘SourceGroup1’。4.源文件添加到工程选择之前新建的源程序“信号灯闪烁的控制仿真.c”,点击“Add”添加到工程中,注意文件类型选择“CSourcefile(*.c)”。5.源文件添加到工程右击“Target1”,在快捷菜单中选择“OptionsforTarget‘Target1’”命令。6.设置目标属性图2.10“Target”目标属性项设置在“Debug”选项卡下选择左侧的仿真形式,即进行软件仿真。7.设置目标属性如需进行硬件仿真,则应将仿真器与计算机连接,选择右侧“Use”项进行相应设置。“Debug”调试项设置在“Output”选项卡中选择“CreateExecutable”项,并勾选其下的“CreateHEXFi”项,才能在程序编译后生成HEX格式的可执行文件,即目标程序。
8.设置目标属性仿真调试任务0.3Protues软件的使用项目0基础知识蓄势待发
(1)桌面上双击Proteus图标,打开ISISProfessional窗口;单击菜单命令“File”“NewDesign”,新建一个DEFAULT模板,保存文件名为“闪烁控制.dsn”。0.3Protues使用
(2)在器件选择按钮中单击“P”按钮,或执行菜单命令“Library”下的“PickDevice/Symbol”,添加相关元件、用导线将各元件及符号正确连接;双击单片机元件,设置相应元件参数,完成Proteus环境下电路图的设计(3)打开Keil编辑C源程序,并添加到相应项目中。执行菜单命令“Project”“OptionsforTarget‘Target1’”,在弹出的对话框中选择“Output”选项卡,选中“GreateHEXFile”;“Debug”选项卡中,选中“Use:ProteusVSMSimulator”。(4)执行菜单命令“Project”“Tranlate”,或直接单击工具栏图标,无误后执行“Project”“BuildTarget”,或直接单击工具栏图标,编译源程序,创建“.hex”文件。(5)在已绘制完原理图的Proteus菜单栏中,执行菜单命令“Debug”,选中“UseRemoteDebugMonitor”选项,使Proteus与Keil连接,进行联合调试。(6)在Proteus中双击单片机芯片,弹出“EditComponent”对话框,在“ProgramFile”中选择之前生成的“.hex”文件,即要调试的可执行文件,点击确定。(7)点击Proteus中“Debug”菜单下的“Start/RestartDebugging”命令,或者窗口左下角的“Play”按钮,即可进行仿真调试,观察仿真效果。闪烁控制仿真的Proteus仿真图任务0.4电子产品的开发项目0基础知识蓄势待发单片机传统开发过程1、硬件设计2、软件设计3、系统调试
《单片机应用技术项目式教程(C语言版)》小灯凝聚彰显大爱情景导入:
项目1霓虹点亮—夯实基础
1任务1.1点亮一个发光二极管2任务1.2发光二极管闪烁控制3任务1.3设计与制作霓虹灯目录项目1霓虹点亮—夯实基础任务1.1点亮一个发光二极管项目1霓虹点亮
夯实基础51系列单片机的基本组成一由运算器、控制器、存储器、输入设备及输出设备五个基本部分组成。51系列单片机的极限参数:工作温度:-55℃~+125℃储藏温度:-65℃~+15℃引脚对地电压:-1.0V~+7.0V最高工作电压:6.6V直流输出电流:15.0mA单片机的内部结构模块一51系列单片机的基本组成CPUROM只读读/写RAMT0T1P0P1P2P3TXDRXD总线时钟电路并行接口串行接口中断系统定时/计数器
(1)电源及时钟引脚:
Vcc、Vss;XTAL1、XTAL2。
(2)控制引脚:
PSEN*、EA*
、ALE、RESET(即RST)。
(3)I/O口引脚:P0、P1、P2、P3,为4个8位I/O口的外部引脚。51系列单片机的引脚一40只引脚按功能分为3类:单片机的的引脚排列
(1)Vcc(40脚):+5V电源;(2)Vss(20脚):接地。51系列单片机的引脚一1电源引脚
(1)XTALl(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。
(2)XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端;对于CHMOS芯片,该引脚悬空不接。51系列单片机的引脚一时钟引脚
(1)RST/VPD(9脚):复位与备用电源。
(2)ALE/PROG*(30脚):第一功能ALE为地址锁存允许。
PROG*为本引脚的第二功能。为编程脉冲输入端。(3)PSEN*(29脚):外部程序存储器的读选通信号。(4)EA*/VPP(31脚):EA*为内外程序存储器选择控制端。
EA*=1:访问片内程序存储器。
EA*=0:单片机则只访问外部程序存储器。51系列单片机的引脚一2.控制引脚
1)P0.0~P0.7统称为P0口(39脚~32脚)。P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用I/O接口。当P0口作为地址/数据分时复用总线时,可分为两种情况:一种是从P0口输出地址或数据;另一种是从P0口输入数据。2)P1.0~P1.7统称为P1口(1脚~8脚),可作为准双向I/O接口使用。从功能上来看P1只有一种功能(对MCS-51子系列),即通用输入/输出I/O接口,具有输入、输出、端口操作3种工作方式,每1位口线能独立地用作输入或输出线。51系列单片机的引脚一3.I/O口引脚(3)P2.0~P2.7统称为P2口(21脚~28脚),一般可作为准双向I/O接口。具有通用I/O接口或高8位地址总线输出2种功能。(4)P3.0~P3.7统称为P3口(10脚~17脚)。P3口除了可作为通用准双向I/O接口外,每1根线还具有第2功能。51系列单片机的引脚一3.I/O口引脚芯片引脚的第二功能为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下的进行的。1.时钟电路及时钟信号单片机的最小系统二
在晶振引脚XTAL1(19脚)和XTAL2(18脚)引脚之间接入一个晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容的容量一般在几十皮法,如30PF。
采用内部振荡器单片机的最小系统二
外部振荡信号可以直接接入XTAL1或XTAL2端。通常XTAL1脚接地,XTAL2脚接片外振荡信号,需接一个5.1K的上拉电阻。
采用外部振荡器时钟电路选择:因为单片机系统基本都是独立工作系统,大多数情况下选择内部振荡器模式。单片机的最小系统二单片机在启动或重新运行时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
2.复位电路及复位状态单片机系统的复位电路有:上电复位和手动按钮复位。
单片机的最小系统二上电复位手动按钮复位单片机的最小系统二系统复位后PC=0000H,单片机的CPU执行第一条取自程序存储器的0000H开始的单元。大多数SFR都为0。SP和P0—P3除外。不影响RAM。
复位后单片机寄存器状态寄存器初始状态值寄存器初始状态值PC0000HTMOD00HACC00HTCON00HB00HTH000HPSW00HTL000HSP07HTH100HDPTR0000HTL100HP0--P30FFHSCON00HIPXXX00000BPCON0XX00000BIE0XX00000BSBUF不定LED的内部是一个PN结的晶片,整个晶片被环氧树脂封装起来,短管脚是阴极,长管脚是阳极。当PN结处于正向导通状态时,电流从LED阳极流向阴极时,半导体晶体就发出不同颜色的光线。
光的强弱与电流大小有关,光的颜色由半导体的材料决定,有红、绿、蓝、黄等颜色。三LED灯发光原理LED灯发光原理三LED灯发光原理
如下图所示,LED(硅)的工作电压一般取1.7V(红色1.6~1.8v,绿色约2v),限流电阻为为1KΩ,那么流过LED的电流为3.3mA,LED发光。
单片机与LED灯这样连接P1.0口控制LED灯单片机与LED灯连接C语言知识四
1.
常量在程序运行过程中,其值不变的量称为常量。程序中不必对常量进行任何说明就可以使用。2.符号常量是程序中用名称(符号)表示的常量。符号常量定义:
#define常量名称替换列表其中替换列表可以是任意字符序列,如数字、字符、字符串、表达式等。例如:#defineLED0x01C语言知识四
3.
变量指在程序的运行过程中其值可以改变的量。变量是有名字的,在内存中占据一定的存储单元,用来存放数据,这就是变量的值。变量命名的规定:变量名只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线;中间不能有空格;不能是关键字;不能与库函数同名。
例:sum,X1定义形式:数据类型变量名1,变量名2,变量名3...;例如:unsignedinta;C语言知识四
4.
赋值赋值运算符=把“=”右边表达式的值,值赋给左边的变量。例:P1=0x01;将十六进制01的值给到左边变量P1。1.执行语句:给P1.0送逻辑高电平信号1,LED灯灭。或者给P1.0送逻辑低电平信号0,LED灯亮。
2.转化为c程序语句:P1.0=1;或者P1.0=0; 4.sbit——对P1端口的P1.0位的定义:
sbit位变量名=特殊功能寄存器名^位位置
sbitP1_0=P1^0;(主程序之前)任务要求:通过单片机I/O端口输出信号,控制一只LED灯常亮。任务实施五1.程序参考#include<reg51.h>sbitP1_0=P1^0;voidmain(){while(1)P1_0=0;}任务实施五2.硬件实施任务1.2发光二极管闪烁控制项目1霓虹点亮
夯实基础一、控制LED灯闪烁单片机P口引脚反复输出高低电平,即先让P口引脚输出低电平,让LED亮,延时一段时间后,再输出低电平,让LED灭,延时一段时间后,再点亮,延时一段时间后,再熄灭,如此循环,便形成LED灯闪烁的效果。闪烁原理2025/7/111.延时子函数voiddelay10ms(unsignedintc){unsignedchara,b;for(;c>0;c--){for(b=38;b>0;b--){for(a=130;a>0;a--)
;}}}一、控制LED灯闪烁#include<reg51.h> //包含头文件reg51.hvoiddelay(unsignedchari); //延时函数声明,i作为形式参数voidmain() //主函数{
while(1){
}}2.LED灯闪烁控制程序P1_0=0; //点亮LED灯P1_0=1; //熄灭LED灯delay(10); //调用延时函数delay(10);//调用延时函数一、控制LED灯闪烁二、单片机控制多只LED亮与灭如何用单片机实现多只led灯控制?运用字节控制方法写指令二、单片机控制多只LED亮与灭1.字节:8位MSBLSBD7D6D5D4D3D2D1D0位号:字节:有28个值(0~255)LSB:最低有效位,D0位MSB:最高有效位,D7位01101110二、单片机控制多只LED亮与灭2.字:2字节,16位
D7D6D5D4D3D2D1D0位号:字节:D15D14D1312D11D10D9D8MSBLSB有216个值(0~65535)MSB:D15位LSB:D0位01101110111100003.单片机与八个LED灯连接二、单片机控制多只LED亮与灭#include<reg51.h>voidmain(){while(1)P1=0x55;}4.书写完整程序二、单片机控制多只LED亮与灭任务1.3设计与制作霓虹灯项目1霓虹点亮
夯实基础要求:
霓虹灯效果花样种类繁多,不同效果,均可通过编程来实现。尝试设计其中一种效果:单片机连接8个发光二极管,让这些发光二极管从外到内点亮,再由内到外点亮,最后再闪烁三次的效果,整个过程循环起来。一、任务分析1.Protues设计与仿真二、任务实施三、参考程序#include<reg51.h> #defineucharunsigendchar//宏定义用uchar表示unsigendchar#defineuintunsigendintvoidmain() //主函数{uchari;while(1){P1=0x81; //将信号10000001送至P1口,点亮1和8灯delay(100);//调用延时函数,延时函数同前面P1=0x42;//点亮2和7灯delay(100);P1=0x24;//点亮3和6灯delay(100);P1=0x18;//点亮4和5灯delay(100);P1=0x24;//点亮3和6灯delay(100);P1=0x42;//点亮2和7灯delay(100);P1=0x81;//点亮1和8灯delay(100);for(i=0;i<3;i++)//闪烁三次{P1=0x00;delay(10);P1=0xff;delay(10);}}}谢谢!
《单片机应用技术项目式教程(C语言版)》情景导入:
项目2数码显示
历阶而上团结协作,木桶效应,一个都不能落下
1
任务2.1一位数码管显示2任务2.2多位数码管显示制3任务2.3设计与制作比赛计时器目录项目2
数码显示
历阶而上任务2.1一位数码管显示项目2数码显示历阶而上认识数码管一1.数码管认识数码管一2.数码管结构认识数码管一LED数码管如何点亮?V+V->3.数码管显示原理认识数码管一10ABCDEFGDP111110000111111B3FH认识数码管一3FH06H5BH4FH66H6DH7DH07H7FH6FH77H7CH39H5EH79H71H认识数码管一小思考共阳极数码管的七段码?认识数码管一4.共阳极和共阴极数码管的字形码的规律共阳极显示器,用低电平驱动;共阴极显示器,用高电平驱动。共阳极和共阴极的字形码互为相反数本任务C语言知识二构造数据类型之一数组:有序数据的集合,用数组名标识元素:属同一数据类型,用数组名和下标确定1.一维数组一维数组的定义定义方式:数据类型数组名[常量表达式];
合法标识符表示元素个数下标从0开始本任务C语言知识二例inta[6];a[0]0145a[1]a[2]a[3]a[4]a[5]23a编译时分配连续内存内存字节数=数组元素个数*数据类型所占字节数数组名表示内存首地址,是地址常量本任务C语言知识二说明:①数组名的定名规则和变量名相同,遵循标识符定名规则。②数组名后的常量表达式用[]括起来,而不能用(),例inta(10);③常量表达式表示元素的个数,即数组长度。 例a[10]中有10个元素,下标从0开始,分别为a[0]~a[9]④常量表达式中可以包括常量和符号常量,不能包含变量,即定义时必须确定数组的大小。本任务C语言知识二一维数组的初始化初始化方式
在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)inta[5]={1,2,3,4,5};等价于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值当全部数组元素赋初值时,可不指定数组长度如inta[5]={6,2,3};等价于:a[0]=6;a[1]=2;a[2]=3;a[3]=0;a[4]=0;如inta[3]={6,2,3,5,1};(
)staticinta[5];等价于:a[0]=0;a[1]=0;a[2]=0;a[3]=0;a[4]=0;只给部分数组元素赋初值
inta[]={1,2,3,4,5,6};编译系统根据初值个数确定数组大小。本任务C语言知识二2.循环语句
while循环语句在C程序中,while语句是最简单也是最基本的循环语句,其格式为while(表达式)
语句 /*循环体*/
圆括号内的表达式是控制表达式;while下面的语句是循环体,循环体可以是一条简单的语句,也可以是多条语句组成的复合语句。1本任务C语言知识二do-while循环语句2除了while语句外,还可以用do-while语句来实现循环结构。使用do-while语句时,无论条件是否满足,都至少执行一次循环体,其语法格式为do{
语句 /*循环体*/}while(表达式);本任务C语言知识二for循环语句31.for循环语句的一般形式for循环语句的一般形式为for(表达式1;表达式2;表达式3)
语句 /*循环体*/表达式1:通常为赋值表达式,用于给循环变量赋初值,只执行一次。表达式2:通常为关系表达式或逻辑表达式,在每次执行循环体前先执行此表达式,以决定是否继续执行循环体。表达式3:通常为表达式语句,用来描述循环变量的变化,多数情况下为自增或自减表达式,实现对循环变量的修改。它是在执行完循环体后才执行的。任务实施三【工作任务】
设计能够循环显示“0~F”的一位数码管。任务实施三【任务实施】基于工作过程系统化,制定了该项目的任务实施过程为以计时器的设计、仿真与制作为典型工作任务,以单片机教学做一体化教室为主要学习场所,进行51单片机系统的硬件设计、软件程序设计、仿真调试等工作,以便熟练掌握使用51单片机进行系统的设计和制作的技能。各小组集中讨论,汇总信息并整理,确定该项目的设计方案,要保证项目的可行性和可操作性。任务实施三1、硬件电路设计任务实施三2、软件程序设计(1)搭建软件编程环境建立工程文件,保存在指定的文件夹内,配置工程参数,包括晶振频率12MHZ、HEX文件输出配置。新建文件并添加文件,准备编程。(2)软件设计与编程实现单片机端口输出0时LED灯亮。要求认识单片机低电平驱动效果。示例程序如下:任务实施三#include"reg51.h"Unsignedcharzxmb[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(unsignedinti){ while(i>0)i=i+1;}voidmain(){ while(1) { unsignedinta; for(a=0;a<16;a++) { P2=zxmb[a]; delay(500); } }}任务实施三3、仿真调试任务实施三为什么要添加延时程序?不添加延时程序会有什么现象?如果想显示年月日,怎么实现多位显示呢?4、拓展思考任务2.2多位数码管显示项目2数码显示历阶而上数码管静态显示一(1)静态显示当显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。各位的共阴极(或共阳极)位选段连接在一起接地或者接电源;每位的段选线(a-dp)分别接单片机的I/O端口。多位LED分别用一组8位字段口,分别输出显示不同字形。数码管静态显示一段选位选或+5V数码管静态显示一特点:静态显示的字型稳定;CPU的工作效率高;硬件电路相对简单,理解容易。占用I/O端口线为8×N,N为显示位数。静态显示适合于显示位数较少的情况。数码管静态显示一如果需要很多位显示,静态显示还适合吗?如果不适合,怎么办呢?数码管动态显示二1、动态显示原理
所谓动态显示就是一位一位地依次轮流循环点亮各位显示器。对于显示器的每一位而言,每隔一段时间点亮一次。在同一时刻只有一位显示器在工作。
利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,我们看到的却是多个字符“同时”显示。数码管动态显示二在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。数码管动态显示二段选位选2、动态显示电路数码管动态显示二1Sdelay1s()调整延时观察效果区别0.5Sdelay500ms()0.1Sdelay100ms()0.01Sdelay10ms()人眼的视觉暂留时间大约20ms数码管动态显示二特点:硬件电路简单;成本低;占用I/O端口线为8+N,N为显示位数。动态显示可适合于显示位数较多的情况。本任务C语言知识三if语句
1C程序的if语句有两种基本形式。1.单分支if语句if语句允许程序通过判断条件是否成立而选择是否执行指定语句,最简单的形式为if(表达式) 语句其中,表达式一般为逻辑表达式或关系表达式;语句可以是一条简单的语句,也可以是多条语句,当为多条语句时,需要用“{}”将这些语句括起来,构成复合语句。if语句的执行过程如下:当表达式的值为真(非0)时,执行语句,否则直接执行if语句下面的语句,其流程图如图所示。
if语句的流程图
本任务C语言知识三2.双分支if-else语句单分支if语句只允许在条件为真时指定要执行的语句,而if-else语句还可以在条件为假时指定要执行的语句。if-else语句的一般形式为if(表达式)
语句1else
语句2if-else语句的流程图
本任务C语言知识三switch语句
2在日常编程中,常常要把表达式和一系列值进行比较,从中找出匹配的值。这种情况下,除可以用嵌套的if语句外,还可以用switch语句。switch语句往往比嵌套的if语句更容易阅读。switch语句的一般形式如下:
switch(表达式){case常量表达式1:[语句1]case常量表达式2:[语句2]
…case常量表达式n:[语句n][default:语句n+1]}任务实施四【工作任务】
本工作任务是设计一常用于我们生活、工作、运动等需要计时方面的日期显示。要求利用单片机和LED数码管设计制作完成,具体要求如下:
应用8位数码管显示当前日期“20220630”,上电后开始显示,可以通过调整延时时间改变显示切换频率,切换频率达到一定大小,利用眼睛视觉暂留可以达到持续显示的效果。任务实施四【任务实施】基于工作过程系统化,制定了该项目的任务实施过程为以计时器的设计、仿真与制作为典型工作任务,以单片机教学做一体化教室为主要学习场所,进行51单片机系统的硬件设计、软件程序设计、仿真调试等工作,以便熟练掌握使用51单片机进行系统的设计和制作的技能。各小组集中讨论,汇总信息并整理,确定该项目的设计方案,要保证项目的可行性和可操作性。任务实施四1、硬件电路设计任务实施四2、软件程序设计(1)搭建软件编程环境建立工程文件,保存在指定的文件夹内,配置工程参数,包括晶振频率12MHZ、HEX文件输出配置。新建文件并添加文件,准备编程。(2)软件设计与编程实现数码管动态显示12345678呈静止状态,示例程序如下:任务实施四#include"reg51.h"unsignedchardxb[]={0xa4,0xc0,0xa4,0xb0,0xc0,0x82,0xb0,0xc0};unsignedcharwxb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};voiddelay1ms(void)//误差0us{unsignedchara,b,c;for(c=1;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}任务实施四voidmain(){ while(1) { unsignedinti; for(i=0;i<8;i++) { P0=~dxb[i]; P2=~wxb[i]; delay1ms(); P2=0xff;//消隐 } }}任务实施四3、仿真调试任务实施四如果1、2、3、4、5、6、7、8显示不清晰,出现逐个显示或抖动,应该怎么处理?4、拓展思考任务2.3设计与制作比赛计时项目2数码显示历阶而上任务实施一【工作任务】
本工作任务是设计一款用于生活、工作、运动等需要计时的比赛计时器。要求利用单片机和LED数码管设计制作完成,具体要求如下:
精确到1s,最大计时为59s;用一按键控制开始/停止;开始时,显示"00",按下开始/停止键后开始计时,再按一次开始/停止键后计时停止;用RESET按键完成秒位的清零。任务实施一【任务实施】基于工作过程系统化,制定了该项目的任务实施过程为以计时器的设计、仿真与制作为典型工作任务,以单片机教学做一体化教室为主要学习场所,进行51单片机系统的硬件设计、软件程序设计、仿真调试等工作,以便熟练掌握使用51单片机进行系统的设计和制作的技能。各小组集中讨论,汇总信息并整理,确定该项目的设计方案,要保证项目的可行性和可操作性。任务实施一1、硬件电路设计任务实施一2、软件程序设计(1)搭建软件编程环境建立工程文件,保存在指定的文件夹内,配置工程参数,包括晶振频率12MHZ、HEX文件输出配置。新建文件并添加文件,准备编程。(2)软件设计与编程实现示例程序如下:任务实施一#include"reg52.h" //此文件中定义了单片机的一些特殊功能寄存器sbitLSA=P2^2;sbitLSB=P2^3;sbitLSC=P2^4;unsignedcharcodesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值u16s;unsignedcharsec,mb[2];voidTimer0Init(){ TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。 TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; TR0=1;//打开定时器 }voiddelay(u16i){ while(i--); }任务实施一voidDigDisplay(){ u8i; for(i=0;i<2;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0;break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0;break;//显示第1位 } P0=smgduan[mb[i]];//发送段码 delay(1);//间隔一段时间扫描 P0=0x00;//消隐 }}任务实施一voidmain(){ Timer0Init(); while(1) { if(TF0==1) { TF0=0; TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; s++; } if(s==1000) //到达1s时间 { s=0; sec++; if(sec==100)sec=0; //计时到100秒后重新开始 } mb[0]=sec%10; //秒表个位 mb[1]=sec/10; //秒表十位 DigDisplay(); }}任务实施一3、仿真调试任务实施一通过本项目的学习,大家对单片机专业知识和电子产品设计仿真有了更深的了解,同时也尝试着去应用自己所学到的知识解决实际问题,提高了专业技能,培养动手能力。项目实施过程中需要细心认真、一丝不苟、精益求精,否则可能调试失败,培养了工匠精神。分组教学,大家互相讨论,碰撞出火花,培养了团队合作精神。4、总结反思计时器焊接调试二在确保设备、人身安全的前提下,学生按计划分工进行单片机系统的制作和生产工作。首先进行PCB制板,如学过制版课程,可自行制版;如没有学过,可索要教师提前准备好的板或采用万能板制作均可。列出所需元件清单,如表所示。准备好所需元件及焊接工具(电烙铁,焊锡丝,镊子,斜口钳,万用表等),开始制作硬件电路板,如图所示。项目总结三本项目从一位数码管静态显示到多位数码管动态显示,再到数码管实际应用实例——计时器的设计与制作,把单片机的I/O口结构、数码管的结构与原理、数码管静态显示和动态显示原理等知识和技能融入工作任务中,并且详细介绍了C51语言的数组、循环结构、选择结构和循环退出等语句格式及编程技巧。通过本项目的学习,对单片机基础知识和电子产品设计仿真调试有了更深的了解,同时也尝试着去应用所学到的知识解决实际问题,提高专业技能,培养动手能力。项目实施过程中需要细心认真、一丝不苟、精益求精,培养了工匠精神;分组教学,大家互相讨论,碰撞出火花,分工协作、共同努力,培养了团队合作精神。谢谢!
《单片机应用技术项目式教程(C语言版)》项目三
抢答控制—稳扎稳打情景导入:
竞赛抢答器
1任务3.1独立式按键控制灯亮2任务3.2密码锁的控制3任务3.3设计与制作抢答器目录项目3抢答控制—稳扎稳打任务3.1独立式按键控制灯亮项目3抢答控制—稳扎稳打
键盘是十分重要的人机对话的组成部分,是人向机器发出指令、输入信息的必需设备。键盘的定义3.1.11.什么是键盘?触点式按键无触点式按键按键按普通方式分类触点式按键无触点式按键如电气式按键,磁感应按键等。静电电容键盘,打字比较舒服,但价格相对要贵;市场上绝大多数键盘包括机械键盘、薄膜键盘等都是触点式;触点式按键造价低廉,但寿命较短。3.1.1键盘的定义3.1.1键盘的定义编码键盘非编码键盘按键按接口原理分类编码式键盘非编码式键盘通过软件判断哪个键按下;为了简化硬件电路结构,降低成本,单片机控制系统中较多地采用非编码键盘。编码键盘主要是通过硬件识别哪个键按下;优点是所需软件较简单,硬件电路较复杂,价格较贵。目前,在单片机控制系统中使用较少。3.1.1键盘的定义
独立式键盘的按键相互独立,每个按键连接一条I/O端口线,每个按键的工作不会影响其它I/O端口线的工作状态。独立式按键电路配置灵活,软件结构简单,通过检测I/O端口线的电平状态,即可判断哪个键按下。1.独立式键盘结构3.1.2独立式键盘工作原理2.工作原理3.1.2独立式键盘识别及应用
触点式按键是一种常开型按钮开关,如图所示,单片机的P3.0连接了一位按键S。
按键S断开时,P3.0输入为高电平,即“1”;按键S闭合时,P3.0输入为低电平,即“0”。
按键的状态可以通过检测P3.0的值进行判断。3.按键的抖动
因机械触点的弹性作用,按键闭合时,不会马上稳定地接通;断开时,也不会立即断开。即在按键断开、闭合的瞬间,均伴随着一连串的抖动,抖动时间的长短由按键机械特性决定,一般为5~10ms。
按键抖动示意图3.1.2独立式键盘识别及应用4.消抖
(1)硬件去抖动
常用的硬件去抖电路,如图所示。(a)图是由两个与非门构成的RS触发器去抖;(b)图是由RC滤波电路实现去抖。3.1.2独立式键盘识别及应用硬件去抖软件去抖消抖方式
(2)软件去抖(延时后继续判断)
当检测到按键按下后,延时一段时间,一般为10ms;然后,再次检测该键的状态,如果按键状态保持不变,则确认为真正的有键按下。检测按键时去抖流程图,如图所示。3.1.2独立式键盘识别及应用3.1.2独立式键盘识别及应用 if(k1==0)//检测按键K1是否按下 { delay10ms(1);//消除抖动,大约10ms if(k1==0)//再次判断按键是否按下 {........... }}3.去抖程序:3.1.3C语言知识选择结构选择(分支)语句是判定所给定的条件是否满足,根据判定的结果(真或伪)决定执行给出的操作之一。基本if语句的一般格式如下。if(表达式){语句组;}1.基本if语句3.1.3C语言知识if-else-语句的一般格式如下:if(表达式){语句组1;}else{语句组2;}2.if-else-语句3.1.3C语言知识if-else-if语句是多分支语句,它的一般格式如下:if(表达式1){语句组1;}elseif(表达式2){语句组2;}elseif(表达式n){语句组n;}else{语句组n+1;}3.if-else-if语句3.1.4按键控制LED灯点亮1)按键控制灯亮硬件电路8个独立式按键3.1.4按键控制LED灯点亮
一般把键盘扫描程序设计成子程序,以方便调用。程序设计通常采用查询法。(1)判定有无按键动作;(2)去抖动;(3)确认是否真正有按键闭合;(4)闭合后执行灯亮的程序指令。2)独立式键盘的程序设计3.1.4按键控制LED灯点亮
voidmain(){ while(1){
if(k1==0)//检测按键K是否按下
{ Delay10ms(1);//消除抖动一般大约10ms if(k1==0) //再次判断按键是否按下 P1=0x01;
}
}} 任务3.2密码锁的控制项目3抢答控制—稳扎稳打
当键盘中按键数量较多时,为了减少I/O端口线的占用,通常将按键排列成矩阵形式。1.矩阵式键盘3.2.1矩阵式键盘结构图中,构成了4×4=16个按键的矩阵式键盘。键盘中有4根行线和4根列线,每条行线和列线交叉点上有1个按键。3.2.1矩阵式键盘结构2.矩阵式键盘结构1.按键识别方法分类3.2.2矩阵式按键识别行扫描法列扫描法矩阵按键识别方法2.行扫描法
所谓行扫描法,就是通过行线逐行发出低电平信号。如果该行线所连接的键没有按下,则列线的电平信号是全“1”;如果有键按下的话,则列线得到的是非全“1”信号,即根据列线的电平信号是否有“0”信号来判断有无键按下。3.2.2矩阵式键盘识别1)行扫描法步骤3.2.2矩阵式键盘识别判别有无按键按下先扫描第1行,行输出值为1110B(第1行为“0”,其余3行为“1”),读入列信号,判断是否为全“1”。若列输入值为全“1”,则当前行无键按下。再扫描第2行。行输出1101,再扫描下一行……依此规律逐行扫描,直到扫描某行时,其列输入值不为全“1”,则说明该行有键按下。再确定具体位置若有键按下,则逐列送低电平“0”,以判别闭合键的具体位置。计算闭合键的键值计算公式为
键值=行号×4+列号2.列扫描法
第一步:首先判断键盘是否有键按下,方法是向所有的列线上输出低电平,再读入所有的行信号。如果16个按键中任意一个被按下,那么读入的行电平则不全为高;如果16个按键无键按下,则读入的行电平全为高。3.2.2矩阵式键盘识别2.列扫描法
第二步:逐列扫描判断具体的按键。方法是往列线上逐列送低电平。先送到列线0位低电平,1、2、3为高电平,读入的行电平的状态就显示了位于列线0的S0、S4、S8、S12四个按键的状态,若键入的行值为全高,则表示无键按下;再送列线1为低电平,列线0、2、3为高电平。读入的行电平的状态则显示了S1、S5、S9、S13四个按键的状态,依次类推。直到全部扫描完,再重新从列线0开始。3.2.2矩阵式键盘识别
//函数名:scan_key//函数功能:判断是否有键按下,如果有键按下,逐列扫描法得到键值//形式参数:无//返回值:键值0~15,-1表示无键按下charscan_key(){chari,temp,m,n;bitfind=0;
//有键按下标志位P2=0xf0;//向所有的列线上输出低电平i=P0;//读入行值i&=0x0f;//屏蔽掉高四位if(i!=0x0f)//行值不为全1,有键按下{
delay(1200);//延时消抖i=P0;//再次读入行值i&=0x0f;//屏蔽掉高四位if(i!=0x0f)3.2.2矩阵式键盘识别
{
intt=0x01; //第二次判断有键按下for(i=0;i<4;i++){
P2=~t;
t=<<1;//逐列送出低电平temp=P0; //读行值if(temp!=0xff)//判断有无键按下,为0则无键按下,否则有键按下{m=i;//保存列号至m变量find=1;//置找到按键标志switch(temp) //判断哪一行有键按下,记录行号到n变量{case0xfe:
n=0;break;//第0行有键按下case0xfd:n=1;break;//第1行有键按下case0xfb:n=2;break;//第2行有键按下case0xf7:n=3;break;//第3行有键按下default:break; }break;//有键按下,退出for循环 } } } }3.2.2矩阵式键盘识别if(find==0)return-1;//无键按下则返回-1elsereturn(n*4+m);//否则返回键值,键值=行号*4+列号}
{
intt=0x01; //第二次判断有键按下for(i=0;i<4;i++){
P2=~t;
t=<<1;//逐列送出低电平temp=P0; //读行值if(temp!=0xff)//判断有无键按下,为0则无键按下,否则有键按下{m=i;//保存列号至m变量find=1;//置找到按键标志switch(temp) //判断哪一行有键按下,记录行号到n变量{case0xfe:
n=0;break;//第0行有键按下case0xfd:n=1;break;//第1行有键按下case0xfb:n=2;break;//第2行有键按下case0xf7:n=3;break;//第3行有键按下default:break; }break;//有键按下,退出for循环 } } } }3.2.3C语言知识if(find==0)return-1;//无键按下则返回-1elsereturn(n*4+m);//否则返回键值,键值=行号*4+列号}
设计一位密码锁。用16个按键、1个数码管、1只灯。要求:完成一位简易密码锁设计:输入一位密码(为0~9,A~F之间的字符),密码输入正确显示“T”并将锁打开;否则显示“F”,继续保持锁定状态。假设密码为5.3.2.4一位密码锁的设计1.功能要求
根据任务要求,用一位共阳极LED数码管作为显示器件,显示密码锁的状态信息,数码管采用静态连接方式,16个按键采用4×4矩阵键盘连接方式,由4根行线和4根列线组成,P0.0~P0.3控制行线,P2.0~P2.3控制列线,按键位于行列线的交叉点上,且行线通过上拉电阻接到+5V电源上,构成了一个4×4(16个按键)的矩阵式键盘。P1.0连接一个数码管,显示T或者F;P3.0连接一个发光二极管,其亮灭表示开锁或关锁状态,3.2.4一位密码锁的设计2.硬件设计3.硬件电路图3.2.4一位密码锁的设计
#include<reg51.h>//包含头文件reg51.h,定义51单片机的专用寄存器charscan_key(void);//键盘扫描函数voiddelay(unsignedinti); //延时函数声明sbitP30=P3^0;//位定义,控制发光二极管,其亮灭表示锁的打开和锁定状态voidmain()//主函数{unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~9、A~F的共阳极显示码unsignedcharled1[]={0xbf,0x8e,0xf8};//""、"F"和"T"的共阳极显示码unsignedchari;P1=led1[0];//数码管显示""P30=1;//开锁指示灯关闭P0=0xff; //P0口低四位做输入口,先输出全1while(1){i=scan_key();//调用键盘函数if(i==-1)continue;//没有键按下,继续循环 elseif(i!=8){//按键不是密码53.程序设计3.2.4一位密码锁的设计
P1=led[i];//显示按下键的数字号 delay(1000);//延时 P1=led1[2];//显示F delay(5000);//延时 P1=led1[0];//显示"" }else//按键是密码5
{ P1=led[i];//显示按下键的数字号 delay(1000); //延时 P1=led1[1];//显示T P30=0;//开锁 delay(5000);//延时 P1=led1[0];//数码管显示""P30=1;//开锁指示灯关闭 }}}3.2.4一位密码锁的设计任务3.3设计与制作抢答器项目3抢答控制—稳扎稳打51系列单片机的基本组成一由运算器、控制器、存储器、输入设备及输出设备五个基本部分组成。51系列单片机的极限参数:工作温度:-55℃~+125℃储藏温度:-65℃~+15℃引脚对地电压:-1.0V~+7.0V最高工作电压:6.6V直流输出电流:15.0mA单片机的内部结构模块一51系列单片机的基本组成CPUROM只读读/写RAMT0T1P0P1P2P3TXDRXD总线时钟电路并行接口串行接口中断系统定时/计数器
(1)电源及时钟引脚:
Vcc、Vss;XTAL1、XTAL2。
(2)控制引脚:
PSEN*、EA*
、ALE、RESET(即RST)。
(3)I/O口引脚:P0、P1、P2、P3,为4个8位I/O口的外部引脚。51系列单片机的引脚一40只引脚按功能分为3类:单片机的的引脚排列
(1)Vcc(40脚):+5V电源;(2)Vss(20脚):接地。51系列单片机的引脚一1电源引脚
(1)XTALl(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。
(2)XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端;对于CHMOS芯片,该引脚悬空不接。51系列单片机的引脚一时钟引脚
(1)RST/VPD(9脚):复位与备用电源。
(2)ALE/PROG*(30脚):第一功能ALE为地址锁存允许。
PROG*为本引脚的第二功能。为编程脉冲输入端。(3)PSEN*(29脚):外部程序存储器的读选通信号。(4)EA*/VPP(31脚):EA*为内外程序存储器选择控制端。
EA*=1:访问片内程序存储器。
EA*=0:单片机则只访问外部程序存储器。51系列单片机的引脚一2.控制引脚
1)P0.0~P0.7统称为P0口(39脚~32脚)。P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用I/O接口。当P0口作为地址/数据分时复用总线时,可分为两种情况:一种是从P0口输出地址或数据;另一种是从P0口输入数据。2)P1.0~P1.7统称为P1口(1脚~8脚),可作为准双向I/O接口使用。从功能上来看P1只有一种功能(对MCS-51子系列),即通用输入/输出I/O接口,具有输入、输出、端口操作3种工作方式,每1位口线能独立地用作输入或输出线。51系列单片机的引脚一3.I/O口引脚(3)P2.0~P2.7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版股权质押登记与评估服务合同模板
- 二零二五年度大型基础设施建设招投标合同编制与管理指南
- 2025矿山承包矿产资源开发利用合同
- 二零二五年度股权投资退出债权债务清算与股权激励实施合同
- 二零二五年科技担保合同标的属性与技术创新
- 二零二五年度电力工程承包协议书
- 2025年度电动车销售与品牌推广计划合同
- 2025年造价工程师考试造价工程师建筑工程造价编制模拟试卷
- 二零二五年度酒店客房设施设备安全检查与维护合同
- 教师资格证笔试综合素质(中学)2025年夏季预测试卷
- 2025年中级消防设施操作员证考试600题(附答案)
- 2024年县乡教师选调进城考试《教育心理学》题库(考试直接用)
- 第10讲 专题:电路图与实物图的互画-人教版九年级《物理》暑假自学提升讲义
- 儿童陶艺捏雕课件
- 2025年小学心理健康教育教师考试试卷及答案
- 绿色医疗输尿管结石宣教课件
- 2025年湖北省中考英语试题(附答案)
- 老人噎食急救处理
- 2025年国有企业管理者考试试卷及答案
- 2025至2030年中国特种化学品行业市场竞争现状及前景战略研判报告
- 成人重症患者颅内压增高防控护理专家共识
评论
0/150
提交评论