单片机实训报告4.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机实训报告4

单片机实训报告   任务1   在8个数码管上显示12.00.00   程序:   #include void delay()//延时函数 { TH1=(65536-1000)/256; TL1=(65536-1000)%256; TR1=1; while(!TF1); TF1=0; }   void main() { unsigned char led[]={0xf9,0xa4,0x7f,0xc0,0xc0,0x7f,0xc0,0xc0}; unsigned char i,w; TMOD=0x10;//置T1方式1 while(1) { w=0x01; for(i=0;i   遇到问题:   设定定时器初值较大,在实验板数码管上显示闪烁状态。 解决方案:   减小定时器的初值设定。   任务2   编程实现以下功能:   在开发板上:按下K4键,P0口LED全亮,表示流水灯开始; 在开发板上:按下K3键,P0口LED全灭,表示流水灯结束; 在开发板上:每按下K2键1次,P0口LED左移1位; 每按下K1键1次,P0口LED右移1位   程序:   #include   #include//包含头文件 sbit k1=P3^2; sbit k2=P3^3;   sbit k3=P3^4; sbit k4=P3^5;   unsigned char led=0xfe;//led初始状态 void delay(unsigned char w)//延时函数 { unsigned char j,k; for(j=0;j   void main() {   while(1) { if(k4==0)P0=0x00;//当k4=0时,灯全亮 else if(k3==0)P0=0xff;//当k3=0时,灯全灭 else if(k2==0)//当k2=0时,灯左移一位亮 { led=_cror_(led,1); P0=led; } else if(k1==0)//当k1=0时,灯右移一位亮 { led=_crol_(led,1); P0=led; } delay(200); } }   遇到问题:   开始编写程序时,用switch语句在遇到左移、右移时编写右难度,不知从哪下手。 解决方案:   通过查看笔记,用if—else if语句并通过#include中的_cror_(led,1)、_crol_(led,1)实现左移、右移,从而大大降低编写难度。     任务3   按键开关次数显示灯,LED点亮表示0,熄灭表示1。P0口的8只LED以二进制数显示按键K2被按下去的次数。   程序:   #include sbit k2=P3^3;   void delay(unsigned char i) {   unsigned char j,k; for(j=0;j   for(k=0;k   void main() { unsigned char an=0; while(1){ P0=an;//将an的值赋予P0----P0=0x00 if(k2==0)//判断k2是否按下 { delay(10); if(k2==0) { while(!k2);//当k2状态改变时执行++an ++an; if(an==255)//当an=255时,an清零 an=0; } } } }   遇到问题:   程序中无while(!k2);//当k2状态改变时执行++an语句时,当按下k2时显示状态混乱。 解决方案:   通过逻辑分析与参考书本解决。即添加while(!k2);//当k2状态改变时执行++an语句。   任务4   一键多功能。通电8只LED不亮,按下K1,D00,D03,D04,D07亮;再按一次,D00,D01,D02,D03亮;再按一次,D04,D05,D06,D07亮;再按一次,8只LED全亮;再按一次,全灭。一次循环。   程序:   #include sbit k1=P3^2; unsigned char set;   void scan_k1()//定义函数,实现按键次数累加 { unsigned int i; if(k1==0) { if(k1==0) set++; if(set=5) set=0; F0:while(k1==0)goto F0; for(i=0;i   }   void main() { while(1) { if(k1==0) scan_k1(); switch(set)//判断按下k1的次数

文档评论(0)

tangtianbao1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档