分享
分销 收藏 举报 申诉 / 54
播放页_导航下方通栏广告

类型2022年单片机的C语言应用举例.ppt

  • 上传人:二***
  • 文档编号:12602023
  • 上传时间:2025-11-09
  • 格式:PPT
  • 页数:54
  • 大小:805.54KB
  • 下载积分:5 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    2022 单片机 语言 应用 举例
    资源描述:
    单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单片机应用系统设计,第二章 单片机的C语言应用举例,2.1 闪烁灯,2.2 I/O并行口直接驱动LED显示,2.3 多路开关状态指示,2.4 定时计数器T0作定时应用技术,2.5 报警声,单片机编程语言概述,汇编语言,51单片机的基本指令共有111条,其中单字节指令49条、双字节指令45条、三字节指令17条。,单机器周期指令64条,双机器周期指令45条,只有乘、除两条指令的执行时间为4个机器周期。,高级语言,常用的51系列单片机高级语言C语言,C51与ANSI C完全一样,程序结构上也是一样的。与ANSI C不同的是针对单片机开发的特殊性,在单片机C语言中增加了对单片机寄存器等的定义和说明,因此在使用单片机C语言时,应该要特别注意一些特殊寄存器的定义。,设计要求:,如下图所示,P1.0端口上接一个发光二极管L1,使L1在不停的一亮一灭,一亮一灭的时间间隔为0.2s。,2.1 闪烁灯,电路原理图,把“单片机系统”区域中的P1.0端口用导线连接到“发光二极管指示模块”区域中的L1端口上。,系统板上硬件连线,程序设计内容,(1)延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:,如电路原理图所示的石英晶体为12MHz,因此,1个机器周期为1微秒,机器周期 微秒,MOV R6,#202个2,D1:MOV R7,#2482个2 2224849820,DJNZ R7,$2个 2248(498,DJNZ R6,D12个22040 10002,因此,上面的延时程序时间为10.002ms。,由以上可知,当R610、R7248时,延时5ms,R620、R7248时,延时10ms,以此为基本的计时单位。如本设计要求0.2秒200ms,10msR5200ms,则R520,延时子程序如下:,DELAY:MOV R5,#20,D1:MOV R6,#20,D2:MOV R7,#248,DJNZ R7,$,DJNZ R6,D2,DJNZ R5,D1,RET,如图所示,当P1.0端口输出高电平,即P1.01时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.00时,发光二极管L1亮;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。,(2)输出控制,程序框图,ORG 0,START:CLR P1.0,LCALL DELAY,SETB P1.0,LCALL DELAY,LJMP START,DELAY:MOV R5,#20;延时子程序,延时0.2秒,D1:MOV R6,#20,D2:MOV R7,#248,DJNZ R7,$,DJNZ R6,D2,DJNZ R5,D1,RET,END,汇编源程序,#include,sbit L1=P10;,void delay02s(void)/延时0.2秒子程序,unsigned char i,j,k;,for(i=20;i0;i-),for(j=20;j0;j-),for(k=248;k0;k-);,void main(void),while(1),L1=0;,delay02s();,L1=1;,delay02s();,C语言源程序,2.2 I/O并行口直接驱动LED显示,设计要求:,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。在数码管上循环显示0-9数字,时间间隔0.2s。,把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的ah端口上;要求:P0.0/AD0与a相连,P0.1/AD1与b相连,P0.2/AD2与c相连,P0.7/AD7与h相连。,系统板上硬件连线,(1)LED数码显示原理,七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。,LED数码管的ga七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。,程序设计内容,“0”3FH “8”7FH,“1”06H “9”6FH,“2”5BH “A”77H,“3”4FH “B”7CH,“4”66H “C”39H,“5”6DH “D”5EH,“6”7DH “E”79H,“7”07H “F”71H,共阴极的字形码,(2)由于显示的数字09的字形码没有规律可循,只能采用查表的方式来完成所需的要求了。,按照数字09的顺序,把每个数字的笔段代码按顺序排好!建立的表格如下所示:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,程序框图,ORG 0,START:MOV R1,#00H,NEXT:MOV A,R1,MOV DPTR,#TABLE,MOVC A,A+DPTR,MOV P0,A,LCALL DELAY,INC R1,CJNE R1,#10,NEXT,LJMP START,DELAY:MOV R5,#20,D2:MOV R6,#20,D1:MOV R7,#248,DJNZ R7,$,DJNZ R6,D1,DJNZ R5,D2,RET,TABLE:DB,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,END,汇编源程序,#include,unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;,unsigned char dispcount;,void delay02s(void),unsigned char i,j,k;,for(i=20;i0;i-),for(j=20;j0;j-),for(k=248;k0;k-);,void main(void),while(1),for(dispcount=0;dispcount4;,temp=temp|0 xf0;,P1=temp;,方法二(汇编源程序),ORG 00H,START:JB P1.4,NEXT1,CLR P1.0,SJMP NEX1,NEXT1:SETB P1.0,NEX1:JB P1.5,NEXT2,CLR P1.1,SJMP NEX2,NEXT2:SETB P1.1,NEX2:JB P1.6,NEXT3,CLR P1.2,SJMP NEX3,NEXT3:SETB P1.2,NEX3:JB P1.7,NEXT4,CLR P1.3,SJMP NEX4,NEXT4:SETB P1.3,NEX4:SJMP START,END,2.4 定时计数器T0作定时应用技术,设计要求,用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示。,电路原理图,系统板上硬件连线,1 把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ah端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,P0.7/AD7对应着h。,2 把“单片机系统”区域中的P2.0/A8P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ah端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,P2.7/A15对应着h。,程序设计内容,AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。,现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次我们就可以采用软件的方法来统计了。,因此,我们设定TMOD00000001B,即TMOD01H,下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出,TH0(21650000)/256,TL0(21650000)MOD256,当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF01表示定时时间已到。,汇编源程序(查询法),SECONDEQU 30H,TCOUNTEQU 31H,ORG 00H,START:MOV SECOND,#00H,MOV TCOUNT,#00H,MOV TMOD,#01H,MOV TH0,#(65536-50000)/256,MOV TL0,#(65536-50000)MOD 256,SETB TR0,DISP:MOV A,SECOND,MOV B,#10,DIV AB,MOV DPTR,#TABLE,MOVC A,A+DPTR,MOV P0,A,MOV A,B,MOVC A,A+DPTR,MOV P2,A,WAIT:JNB TF0,WAIT,CLR TF0,MOV TH0,#(65536-50000)/256,MOV TL0,#(65536-50000)MOD 256,INC TCOUNT,MOV A,TCOUNT,CJNE A,#20,NEXT,MOV TCOUNT,#00H,INC SECOND,MOV A,SECOND,CJNE A,#60,NEX,MOV SECOND,#00H,NEX:LJMP DISP,NEXT:LJMP WAIT,TABLE:DB FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,END,C语言源程序(查询法),#include,unsigned char code dispcode=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;,unsigned char second;,unsigned char tcount;,void main(void),TMOD=0 x01;,TH0=(65536-50000)/256;,TL0=(65536-50000)%256;,TR0=1;,tcount=0;,second=0;,P0=dispcodesecond/10;,P2=dispcodesecond%10;,START:MOV SECOND,#00H,MOV DPTR,#TABLE,C51与ANSI C完全一样,程序结构上也是一样的。,if(P1_6=0),TH0=(65536-50000)/256;,2 I/O并行口直接驱动LED显示,NEXT:JB FLAG,DONE,MOV P0,A,FLAG BIT 00H,while(1),2 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭。,1/AD1与b相连,P0.,根据开关的状态,由发光二极管L1L4来指示,我们可以用SETBP1.,t02s=0;,下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出,while(1),if(TF0=1),tcount+;,if(tcount=20),tcount=0;,second+;,if(second=60),second=0;,P0=dispcodesecond/10;,P2=dispcodesecond%10;,TF0=0;,TH0=(65536-50000)/256;,TL0=(65536-50000)%256;,SECONDEQU 30H,TCOUNTEQU 31H,ORG 00H,LJMP START,ORG 0BH,LJMP INT0X,START:MOV SECOND,#00H,MOV A,SECOND,MOV B,#10,DIV AB,MOV DPTR,#TABLE,MOVC A,A+DPTR,MOV P0,A,MOV A,B,MOVC A,A+DPTR,MOV P2,A,MOV TCOUNT,#00H,MOV TMOD,#01H,MOV TH0,#(65536-50000)/256,MOV TL0,#(65536-50000)MOD 256,SETB TR0,SETB ET0,SETB EA,SJMP$,汇编源程序(中断法),INT0X:,MOV TH0,#(65536-50000)/256,MOV TL0,#(65536-50000)MOD 256,INC TCOUNT,MOV A,TCOUNT,CJNE A,#20,NEXT,MOV TCOUNT,#00H,INC SECOND,MOV A,SECOND,CJNE A,#60,NEX,MOV SECOND,#00H,NEX:MOV A,SECOND,MOV B,#10,DIV AB,MOV DPTR,#TABLE,MOVC A,A+DPTR,MOV P0,A,MOV A,B,MOVC A,A+DPTR,MOV P2,A,NEXT:RETI,TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,END,#include,unsigned char code dispcode=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;,unsigned char second;,unsigned char tcount;,void main(void),TMOD=0 x01;,TH0=(65536-50000)/256;,TL0=(65536-50000)%256;,TR0=1;,ET0=1;,EA=1;,tcount=0;,second=0;,P0=dispcodesecond/10;,P2=dispcodesecond%10;,while(1);,C语言源程序(中断法),void t0(void)interrupt 1 using 0,tcount+;,if(tcount=20),tcount=0;,second+;,if(second=60),second=0;,P0=dispcodesecond/10;,P2=dispcodesecond%10;,TH0=(65536-50000)/256;,TL0=(65536-50000)%256;,2.5 “嘀、嘀、”报警声,设计要求,用AT89S51单片机产生“嘀、嘀、”报警声从P1.0端口输出,产生频率为1KHz,根据下图可知:1KHZ方波从P1.0输出0.2秒,接着0.2秒从P1.0输出电平信号,如此循环下去,就形成我们所需的报警声了。,电路原理图,系统板硬件连线,1 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;,2 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭。,程序设计方法,1生活中我们常常到各种各样的报警声,例如“嘀、嘀、”就是常见的一种声音报警声,但对于这种报警声,嘀0.2秒钟,然后断0.2秒钟,如此循环下去,假设嘀声的频率为1KHz,则报警声时序图如下图所示:,上述波形信号如何用单片机来产生呢?,2 由于要产生上面的信号,我们把上面的信号分成两部分,一部分为1KHZ方波,占用时间为0.2秒;另一部分为电平,也是占用0.2秒;因此,我们利用单片机的定时/计数器T0作为定时,可以定时0.2秒;同时,也要用单片机产生1KHZ的方波,对于1KHZ的方波信号周期为1ms,高电平占用0.5ms,低电平占用0.5ms,因此也采用定时器T0来完成0.5ms的定时;最后,可以选定定时/计数器T0的定时时间为0.5ms,而要定时0.2秒则是0.5ms的400倍,也就是说以0.5ms定时400次就达到0.2秒的定时时间了。,主程序框图,中断服务程序框图,汇编源程序,T02SA EQU 30H,T02SB EQU 31H,FLAG BIT 00H,ORG 00H,LJMP START,ORG 0BH,LJMP INT_T0,START:MOV T02SA,#00H,MOV T02SB,#00H,CLR FLAG,MOV TMOD,#01H,MOV TH0,#(65536-500)/256,MOV TL0,#(65536-500)MOD 256,SETB TR0,SETB ET0,SETB EA,SJMP$,INT_T0:,MOV TH0,#(65536-500)/256,MOV TL0,#(65536-500)MOD 256,INC T02SA,MOV A,T02SA,CJNE A,#100,NEXT,MOV T02SA,#00H,INC T02SB,MOV A,T02SB,CJNE A,#04H,NEXT,;,MOV T02SA,#00H,(不要),MOV T02SB,#00H,CPL FLAG,NEXT:JB FLAG,DONE,CPL P1.0,DONE:RETI,END,C语言源程序,#include,unsigned int t02s;,unsigned char t05ms;,bit flag;,void main(void),TMOD=0 x01;,TH0=(65536-500)/256;,TL0=(65536-500)%256;,TR0=1;,ET0=1;,EA=1;,while(1);,void t0(void)interrupt 1 using 0,TH0=(65536-500)/256;,TL0=(65536-500)%256;,t02s+;,if(t02s=400),t02s=0;,flag=flag;,if(flag=0),P1_0=P1_0;,
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:2022年单片机的C语言应用举例.ppt
    链接地址:https://www.zixin.com.cn/doc/12602023.html
    页脚通栏广告

    Copyright ©2010-2025   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork