欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机c51参考资料.docx

    • 资源ID:6153644       资源大小:313.48KB        全文页数:63页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机c51参考资料.docx

    1、单片机c51参考资料第4章 学习C51例题,入门C简单程序设计本章的例题都是简单C语言例题,例题中没有复杂的C语言语法与难以理解的数据结构,因此特别适合入门学习C语言。本章所有例题都在实验板上实验过,实验用51单片机电路板的接线图如图4-1所示。图4-1 实验电路接线图 图中单片机为AT89S51或是STC89C51RC,其P0、P1口连接共阳极数码管,P2口连接8个低电平有效的LED灯(发光二极管),P3口连接8个低电平有效的按钮。若是采用STC89C51RC单片机,由于ISP需要占用串行口,若是不切换引脚,则与P3.0和P3.1相连的按钮不能使用。若是采用AT89S51,由于SPI编程需要

    2、P1.5、P1.6和P1.7引脚通信,所以编程后,需要切换引脚,才能使P1口连接的数码管正常显示。 4.1 第一部分例题4-1 控制P2_0引脚相连的LED灯闪烁。 该程序只能用软件单步仿真,因为在实际的单片机上运行,使P2_0引脚变为低电平后,立刻又将其变为高电平,眼睛不能看到LED灯闪烁,但是使用软件单步仿真,可以看到P2_0引脚的电平变化。#include AT89X51.H /包含头文件 void main(void) / 主程序while(1) /无限循环P2_0=0; /亮灯P2_0=1; /灭灯软件单步仿真的窗口如图4-2所示。图4-2 软件单步仿真的窗口例题4-2 使P2_0引

    3、脚相连的LED灯闪烁。C源程序如下:#include AT89X51.H /头文件void main(void) / 主程序unsigned int n; /声明变量while(1) /无限循环P2_0=p2_0; /引脚取反,与引脚相连的LED灯闪烁for (n=0;n2000;n+); /循环语句延时 编译并链接后,在图4-3所示的仿真窗口仿真。图4-3例题1-2所示的仿真窗口可以在图4-4所示屏幕左下角的命令窗口输入变量名后回车的方法查看变量;也可以屏幕右下角的Local窗口或是Watch窗口观察变量。图4-4 查看变量选择View/Momory Window菜单,屏幕弹出图4-5所示的

    4、存储器窗口。图4-5 存储器窗口在Address对话框输入:“d:0x00”就可以看到data 空间的从0x00 开始的所有内存。如图4-5。输入“i:0x00”,就可以看到idata 空间的所有内存的值。输入“x:0x00”,就可以看到xdata 空间的所有内存的值。输入“c:0x00”,就可以看到code 空间的所有程序。例题4-3 如下程序实现流水灯的方法是,依次灭掉前一个灯,然后点亮后一个灯,再延时一会,不断循环,就可以看到流水灯的效果了。源程序如下: #include AT89X51.H /头文件void main(void) / 主程序unsigned int n;while(1)

    5、P2_3=1;P2_0=0; /灭掉P2_3,点亮P2_0=0for(n=0;n20000;n+); /循环延时P2_0=1;P2_1=0; /灭掉P2_0,点亮P2_1=0 for(n=0;n20000;n+); /循环延时P2_1=1;P2_2=0; /灭掉P2_1,点亮P2_2=0for(n=0;n20000;n+); /循环延时P2_2=1;P2_3=0; /灭掉P2_2,点亮P2_3=0for(n=0;n20000;n+); /循环延时例题4-4 双按键控制的LED灯。用单片机读取按键的值,并使用一个与P3-1引脚相连的按键点亮与P2_0引脚连接的LED,用另一个与P3_2引脚相连的

    6、按键关闭与P2_0引脚连接的LED。用单片机可以读取某个IO的值,因为51单片机的I/O口,如果处于输出1的状态(51上电后I/O就默认为1),这时的I/O口内部简化成为一个几十K的电阻上拉到电源VCC(P0口除外),因此可以作为输入引脚。P0口没有上拉电阻,相当于一个悬空的引脚,就是高阻状态,如果用P0口,必须在外部接上拉电阻。这里用的是内部有上拉电阻的P3口连接按键。 如果直接读一个没有与地短路按键的I/O引脚,就会读到高电平,就是逻辑1。如果这个I/O引脚通过按键与地短路。这时会读到低电平,就是逻辑0。 该例的源程序如下:#include AT89X51.Hvoid main(void)

    7、 / 主程序while(1)if(P3_1=0) /判断按键,如果按键按下(逻辑0),则执行将LED点亮的动作 P2_0=0; if(P3_2=0) /判断按键,如果按键按下(逻辑0),则执行将LED灭掉的动作 P2_0=1; 该例的仿真窗口如图4-6所示。图4-6例题1-4的仿真窗口例题4-5 单按键控制LED发光,就是用一个与P3_0引脚连接的按键控制P2_0相连LED的亮和灭两种状态。按一次按键灯亮,再按一次按键灯灭。再按一次又亮,再按一次灯又灭。 程序用一个位(bit)变量Mark来做一个标记,然后在按键的控制下,使标记变化,再根据这个标记的值,使LED亮或灭。 因为按键按下时可能会有

    8、抖动的情况,就是每次按下按键时,可能会发生多次接点的接触,相当于按键一下子按下了很多次,导致程序识别多次按键的输入。 按键的抖动一般都是发生在刚按下按键和松开按键的时候,只要避开这一段时间,等按键稳定按下或者松开时,就可以正确读取按键的状态。 所以,当读到第一次按键的值时,要等待一会,躲过按键抖动后,再处理其他操作;在松开后,也需要等一会,免得程序检测到松开的抖动以为又是按键按下。(在更复杂的应用中,需要在按下延时之后重新验证按键是否按下) 因为程序是循环运行的,当一次按键处理后,又会再循环回来继续检测,如果您的按键这时还没有松开,就又会被读到一次,并做处理。所以还要做一个特殊的处理,识别到一

    9、个按键并处理完成之后,还要等待这个按键松开后,再继续循环运行。 源程序如下: #include AT89X51.Hvoid main(void) / 主程序bit mark; /定义位变量unsigned int n; /定义循环变量while(1) /无限循环if (P3_0=0) /如果按键按下for(n=0;n1000;n+); /延时一段时间,等待按键完全按下mark=mark; /翻转标记while(!P3_0) /等待按键弹起for(n=0;n2000) ) /kk=(100*sp)|(kk2000)时,执行如下语句/kk溢出次数为100*sp,最少为300次,最多为2000次 k

    10、k=0; ldelay=1; /每次溢出后,将ldelay标记置1 例题4-11 单按键控制流水LED灯的流水速度。用一个按键来实现流水LED灯的10级调速。每按一次按键,流水速度就降低一级,共10级。 源程序如下:#include AT89X51.Hunsigned int ldelay=0; /长定时溢出标记,预置是0unsigned int sp=10; /变速标记,预置是10unsigned int spr=1; /按键按下次数标记void main(void) / 主程序unsigned char code ledp4=0xfe,0xfd,0xfb,0xf7; /预定LED灯亮灭的表

    11、格 unsigned int ledi,n; /ledi用来指示显示顺序,n是循环变量TMOD=0x02; /定时器0,工作模式2(0000,0010),8位定时模式TH0=0x06; /写入预置初值6到定时器TH,则250微秒溢出一次(12MHz)TL0=0x06; /写入预置值TR0=1; /启动定时器ET0=1; /允许定时器中断EA=1; /允许总中断while(1) /无限循环 if(ldelay=1 ) /溢出标记为1,处理如下语句 ldelay=0; /清除溢出标记 P2=ledpledi; /读出一个值送到P2口 ledi+; /指向下一个显示值 if(ledi=4) ledi

    12、=0; /指向表格的第一个显示值 if(P3_0=0) /如果读到按键K1为0 for(n=0;n1000;n+); /等待按键稳定延时 while(!P3_0); /等待按键松开循环 for(n=0;n2200) ) /kk溢出次数为100*sp,最少为200次,最多为2000次 kk=0; ldelay=1; /每次溢出,使ldelay=1例题4-12 按照预定的流水速度控制流水LED灯。首先预先定义了一个变化的顺序speedcode,每次流水灯循环一圈,就根据预定设置的表格数据来决定下一圈的流水速度。这样就实现了流水LED灯速度按照预定的顺序自动变化。#include AT89X51.H

    13、unsigned int ldelay=0; /溢出标记,预置是0unsigned int sp=10; /变速标记,预置是20unsigned int code spr10=3,1,5,12,3,20,2,10,1,4; /10 个预定义流水速度的表格void main(void) / 主程序unsigned char code ledp4=0xfe,0xfd,0xfb,0xf7; /预定的流水LED灯亮灭表格 unsigned int ledi,i; /定义指向灯亮灭顺序表格ledi与流水速度表格的元素的变量iTMOD=0x02; /定时器0,工作模式2(0000,0010),8位定时模式

    14、TH0=0x06; /写入预置初值6到定时器TH,则250微秒溢出一次(12MHz)TL0=0x06; /写入预置值TR0=1; /启动定时器启动ET0=1; /允许定时器中断EA=1; /允许总中断while(1) /无限循环 if(ldelay=1 ) /溢出标记为1,执行如下语句 ldelay=0; /清除溢出标记 P2=ledpledi; /读出灯亮灭顺序表格到P2口ledi+; /指向表格的下1个元素if(ledi=4) ledi=0; /指向表格的第1个元素sp=spri; /按照流水速度表格设定流水灯速度i+; /指向速度表格中的下1个元素if(i=10) i=0; /如果速度为

    15、10,则返回速度0 timer0() interrupt 1 /定时器0中断服务程序 static unsigned int kk; /设置静态局部变量kk+; /每次中断,kk加1if(kk=(100*sp)|(kk2200) ) /溢出次数为100*sp kk=0; /溢出次数清零ldelay=1; /溢出标记为1 例题4-13 外引脚中断控制LED灯。外引脚中断,就是外部I/O引脚INT0和INT1产生的中断。对应的引脚是P3_2和P3_3。当按下连接在P3_2引脚的按键,使其接地时,可以触发一个INT0中断,控制LED灯的亮或灭。 源程序如下:#include AT89X51.H vo

    16、id main(void) / 主程序IT0=1; /外中断负边沿产生中断 EX0=1; /外中断0使能EA=1; /允许总中断 while(1) ; /主程序无限循环,没有循环体 int0() interrupt 0 /外中断0服务程序 P2_0 = !P2_0; /在中断服务程序中闪烁LED灯例题4-14 脉冲宽度调制(PWM)方式控制LED灯亮度在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。如图4-7所示,程序中使用定时器0产生2.5ms周期脉冲,使用占空比控制变量scale控制占空比,在低电平期间使LED灯亮,在高电平期间使LED灯灭,改变scale就改变了高电平与低电平的时间,因此也就控制了LED灯的亮度。图4-7 PWM占空比控制示意图源程序如下:#include AT89X51.H /模拟PWM输出控制灯的10个亮度级unsigned int scale; /占空比控制变量void main(void) / 主程序 unsigned int n; /延时循环


    注意事项

    本文(单片机c51参考资料.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开