欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    51单片机实验程序_1.docx

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

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

    51单片机实验程序_1.docx

    51单片机实验程序用查表方式编写yx13x23x33。x为09的整数#includevoidmain()intcodea10=0,1,8,27,64,125,216,343,512,729;/将09对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0255或-128+127之间的话就用char,而如今的值明显超过这个范围,用int较适宜。int的范围是065535或-3276832767。inty,x1,x2,x3;/此处定义根据习惯,可以写成charx1,x2,x3但是变量y一定要用int来定义。x1=2;x2=4;x3=9;/x1,x2,x3三个的值是自定的,只要是09当中的数值皆可,可以重复。y=ax1+ax2+ax3;while(1);/单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。/结果的查询在Keilvision软件内部,在仿真界面点击右下角一般初始位置是右下角的watch的框架内双击“double-clickorF2toadd文字输入y后按回车,右侧会显示其16进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10进制数。1、有10个8位二进制数据,要求对这些数据进行奇偶校验,但凡知足偶校验的数据1的个数为偶数都要存到内RAM50H开场的数据区中。试编写有关程序。#includevoidmain()inta10=0,1,5,20,24,54,64,88,101,105;/将所要处理的值存入RAM中,这些能够根据个人随意设定,但建议不要超过0255的范围。chari;/定义一个变量char*q=0x50;/定义一个指针*q指向内部0x50这个地址。for(i=9;i>=0;i-)/90循环,共十次,可以以用for(i=0;iwhile(1);/同实验一,程序不能停。3.有10个8位带符号二进制数,请将10个数按从小到大的顺序排列,并存到内RAM50H开场的单元中。#includevoidmain()chardataa10=-50,-36,0,-128,1,99,127,89,-89,40;/将所有值存入RAM中,由于有负数,所以不能用unsignedchar。由于是char所以假设的数值不要超过-128+127之外unsignedchar*q=0x50;/定义指针*q指向0x50unsignedchari,j;chart;/定义三个变量,用于循环及换位。在换位时有赋值,所以t要用char不能用unsignedchar。for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;ivoiddelay(unsignedcharx)/定义延迟函数,用于后面LED灯亮的持续时间。unsignedchari,j,k;dofor(i=10;i>0;i-)for(j=100;j>0;j-)for(k=249;k>0;k-);while(-x);main()P1=0xfe;/11111110第一个灯亮while(1)delay(1);/延时500msP1=P1sbitp1_0=P10;sbitp1_1=P11;sbitp1_2=P12;sbitp1_3=P13;/程序不能对单个引脚进行编程,需要用sbit定义才可用。main()p1_0=1;p1_1=1;p1_2=1;p1_3=1;/前两个引脚置一是为了让其能获取输入信号,后两个引脚是赋初值,方便后面取反工作。while(1)if(!p1_0)/判定P1.0的引脚能否有变化。p1_2=!p1_2;/假如P1.0引脚变化,P1.2引脚也跟随变化。if(!p1_1)/判定P1.1的引脚能否有变化。p1_3=!p1_3;/假如P1.1引脚变化,P1.3引脚也跟随变化。2、扩展部分:1利用P1口控制发光二极管LED灯根据下面方式工作:a)LED灯从左到右依次点亮;b)LED灯从右到左依次点亮;c)根据以上步骤重复运行,其中要求灯亮的时间为500ms。#includevoiddelay(unsignedcharx)unsignedchari,j,k;dofor(i=10;i>0;i-)for(j=100;j>0;j-)for(k=249;k>0;k-);while(-x);main()while(1)/无限循环里面的内容P1=0XFE;/右移完毕后赋初值,为左移做准备delay(1);while(1)P1=P1>1;/假如左移右移是单个灯移动的话,那么这句改为LED=LED>>1|0x80;就能够了。delay(1);if(P1=0x00)/判定右移能否完毕,完毕后break跳出break;2利用P1口控制发光二极管LED灯根据下面方式工作:a从左到右奇数LED灯依次点亮;b从右到左偶数LED灯依次点亮;c根据以上步骤重复运行,其中要求灯亮的时间为500ms。#include/此程序可以以用>来实现,详细细节能够来问我#include/当程序中有涉及到_crol_或者_nop_等库函数时,必须添加此头文件。voiddelay(unsignedcharx)unsignedchari,j,k;dofor(i=10;i>0;i-)for(j=100;j>0;j-)for(k=249;k>0;k-);while(-x);main()while(1)/无限循环括号里的内容P1=0xfe;/第一个灯亮,while(1)delay(1);P1=_crol_(P1,2);/P1左移两个位置if(P1=0xfe)/判定左移结束break;P1=0X7f;while(1)delay(1);P1=_cror_(P1,2);/P1右移两个位置if(P1=0x7f)/判定右移结束break;#includevoiddelay(unsignedcharx)/延时函数500msunsignedchari,j,k;dofor(i=10;i>0;i-)for(j=100;j>0;j-)for(k=249;k>0;k-);while(-x);main()while(1)/无限循环括号里的内容P1=0xfe;/赋值,为左移做准备delay(1);while(1)P1=(P1>1)|0x80;/P1右移一个位,补位补的是1,同样的,不明白来找我P1=P1>>1;/P1右移一个位delay(1);if(P1=0x55)/判定右移能否完毕,退出此次循环。break;本实验模拟交通信号灯控制,一般情况下正常显示,有急救车到达时,两个方向交通信号灯全红,以便让急救车通过。设急救车通过路口时间为5秒,急救车通过后,交通恢复正常,本实验用单次脉冲申请外部中断,表示有急救车通过。#includeunsignedcharx,y,i,j,k;/设置unsignedchard0,d1,d2,d3;/定义四个变量用于记录中断时的现场,以便恢复现场。voiddelay(x)/延时函数dofor(i=10;i>0;i-)for(j=100;j>0;j-)for(k=249;k>0;k-);while(-x);zd()interrupt0/定义中断函数,无需声明。interrupt0表示外部中断0的中断函数y=P1;d0=x;d1=i;d2=j;d3=k;/记录中断时P1的值,延时函数的x,i,j,k也要记录。P1=0xf6;/P1应为东西红南北红,所以设为F6。delay(5);x=d0;i=d1;j=d2;k=d3;P1=y;/现场恢复,包括延时函数中的x,i,j,k。main()P1=0xf6;/P1设定初始状态,两路皆为红灯,此步骤能够忽略。delay(1);EA=1;/开总中断EX0=1;/开外部中断0中断。IT0=1;/设置外部中断0为下降沿触发有效方式。IT0=0为低电平有效while(1)/下列四种灯亮的状态循环。P1=0xf3;/东西绿,南北红delay(10);P1=0xf5;/东西黄,南北红delay(3);P1=0xde;/东西红,南北绿delay(10);P1=0xee;/东西红,南北黄delay(3);1、基本部分:用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转.#includesbitp1_0=P10;/要使用单个引脚应先定义unsignedchari;voidmain()TMOD=0X01;/t0工作在定时器,工作方式1TL0=0XB0;TH0=0X3C;/设定定时器初值,初值的计算可查看书本P143,此处定时器定时时间为100msIE=0X82;/开EA总中断,开t0中断TR0=1;/定时器工作开关开启i=10;/设定i作为后面定时一秒的使用while(1);t_0()interrupt1/T0定时/计数器的中断i-;/进入一次中断,i的值减一if(i=0)/当进入10次中断,即i=0的时候,定时时间为1S。i=10;/重新让i=10,使得后面继续定时1S。p1_0=p1_0;/P1.0取反。TL0=0XB0;TH0=0X3C;/赋定时初值,定时器或计数器必要步骤,除工作方式2外。2、扩展部分:利用P1口控制发光二极管LED灯根据下面方式工作:1从左到右奇数LED灯依次点亮;2从右到左偶数LED灯依次点亮;3根据以上步骤重复运行,其中要求灯亮的时间为500ms,由定时器T1实现。#include#includeunsignedchari,j,k;voidmain()TMOD=0X10;/设定T1工作在定时器T1,方式1。同时也会设定T0工作在定时器T0,方式0,但是我们后面没有interrupt1的子函数,所以T0没发挥作用。IE=0X88;/开总中断,开T1中断TL1=0XB0;TH1=0X3C;/定时器初值,时间为100msTR1=1;/开定时器T1的开关i=5;j=0;k=0;/用三个变量来判定时长,循环阶段。P1=0xfe;/赋P1初值,第一个灯亮while(1);/等待定时工作完成t_1()interrupt3/T1的中断子函数i-;/进入一次,i就减1TL1=0xB0;TH1=0x3C;/每次进入中断定时器的初值就为0,所以需要重装if(i=0)/500ms后i=5;/让i=5,继续定时500ms。j+;/j一开场为0,j加一if(j=4)/假如j等于4,代表P1口左移了四次j=0;k=!k;/k取反,用于后面左移右移的执行if(k=0)/P1口左移if(P1=0xfd)/左移到头了,要右移需要把灯亮的位置变化下P1=0xbf;P1=_crol_(P1,2);if(k!=0)/P1口右移if(P1=0xbf)/右移到头了,要右移需要把灯亮的位置变化下P1=0xfd;P1=_cror_(P1,2);#includeunsignedchari,j;voidmain()i=5;j=0;P1=0xfe;/只亮第一个灯TMOD=0X10;/设置T1的工作方式为1,定时器工作IE=0X88;/中断EA开,ET1开TL1=0XB0;TH1=0X3C;/初值设定为100msTR1=1;/开启工作开关while(1);/等待定时工作完成t_1()interrupt3/T1中断子函数i-;TL1=0XB0;TH1=0X3C;/赋初值if(i=0)/时间为500msi=5;j+;/利用j来判定左移或右移能否结束if(j

    注意事项

    本文(51单片机实验程序_1.docx)为本站会员(安***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开