51单片机实验程序_第1页
51单片机实验程序_第2页
51单片机实验程序_第3页
51单片机实验程序_第4页
51单片机实验程序_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.#include<reg51.h>voidmain(){intcodea[10]={0,1,8,27,64,125,216,343,512,729};//将0~9对应的每位数字的三*1=2;*2=4;y=a[*1]+a[*2]+a[*3];while(1);//单片机的程序不能停,这步就相当于无限循环的指令,循环的容为空白。}//结果的查询在Keilvision软件部,在仿真界面点击右下角〔一般初始位置是右下角〕的#include<reg51.h>voidmain(){chari;//定义一个变量{{*q=a[i];q++;//每赋一个值,指针挪一个位置指向下一个。}}while(1);//同实验一,程序不能停。}#include<reg51.h>voidmain().{chardataa36,0,-128,1,99,127,89,-89,40};//将所有值存入RAM中,unsignedchari,j;能用unsignedchar。for(i=0;i<10;i++){if(a[j]>a[j+1]){taj];a[j]=a[j+1];a[j+1]=t;}}{*q=a[i];}while(1);}〔1〕P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。#include<reg51.h>voiddelay(unsignedchar*)//定义延迟函数,用于后面LED灯亮的持续时间。{unsignedchari,j,k;{for(i=10;i>0;i--)for(j=100;j>0;j--)for(k=249;k>0;k--);}while(--*);}main(){P1=0*fe;//11111110第一个灯亮while(1){.P1=P1<<1|1;//P1左移一个位即11111101具体crol跟<<的区别与具体细节可联系我与你讲解ifP==0*FF){P1=0*FE;}}}〔2〕P1.0、P1.1作输入口接两个拨动开关,P1.2、P1.3作输出口,接两个发光二极#include<reg51.h>sbitp1_0=P1^0;sbitp1_1=P1^1;sbitp1_2=P1^2;main(){p1_0=1;p1_1=1;p1_2=1;p1_3=1;//前两个引脚置一是为了让其能获取输入信号,后两个引脚是赋初值,方便后面取反工作。while(1){{}{}}}c)按照以上步骤重复运行,其中要求灯亮的时间为500ms。#include<reg51.h>voiddelay(unsignedchar*){unsignedchari,j,k;{.for(i=10;i>0;i--)for(j=100;j>0;j--)for(k=249;k>0;k--);}while(--*);}main(){while(1)//无限循环里面的容{P1=0*FE;//右移完毕后赋初值,为左移做准备delay(1);while(1){delay(1);ifP,完毕break跳出此次的whilebreak;}delay(1);while(1){delay(1);break;}}}c〕按照以上步骤重复运行,其中要求灯亮的时间为500ms。includeintrinshcrolnop_等库函数时,必须添voiddelay(unsignedchar*){unsignedchari,j,k;{for(i=10;i>0;i--).for(j=100;j>0;j--)for(k=249;k>0;k--);}while(--*);}main(){while(1){P1=0*fe;while(1){delay(1);if(P1==0*fe)break;}//P1左移两个位置完毕P1=0*7f;while(1){delay(1);if(P1==0*7f)break;}}}#include<reg51.h>//P1右移两个位置完毕voiddelay(unsignedchar*)//延时函数500ms{unsignedchari,j,k;{for(i=10;i>0;i--)for(j=100;j>0;j--)for(k=249;k>0;k--);}while(--*);}main(){while(1)//无限循环括号里的容{P1=0*fe;//赋值,为左移做准备delay(1);while(1).{PP1;//P1左移一个位置,补位补的是0。delay(1);if(P1==0*aa)//左移完毕,跳出循环break;}P1=0*7f;//P1赋值,为右移做准备delay(1);while(1){P1=P1>>1;//P1右移一个位delay(1);ifP5)//判断右移是否完毕,退出此次循环。break;}}}本实验模拟交通信号灯控制,一般情况下正常显示,有急救车到达时,两个方向5秒,急救车通过后,交通恢复正常,本实验用单次脉冲申请外部中断,表示有急救车通过。#include<reg51.h>unsignedchar*,y,i,j,k;//设置unsignedchard0,d1,d2,d3;//定义四个变量用于记录中断时的现场,以便恢voiddelay(*)//延时函数{{for(i=10;i>0;i--)for(j=100;j>0;j--)for(k=249;k>0;k--);}while(--*);}{y=P1;dij.PfP,所以设为F6。delay(5);*=d0;k=d3;Py//现场恢复,包括延时函数中,i,j,k。}main(){P1=0*f6;//P1设定初始状态,两路皆为红灯,此步骤可以忽略。delay(1);EA=1;//开总中断while(1)//以下四种灯亮的状态循环。{P1=0*f3;//东西绿,南北红delay(10);P1=0*f5;//东西黄,南北红delay(3);P1=0*de;//东西红,南北绿delay(10);P1=0*ee;//东西红,南北黄delay(3);}}用CPU部定时器中断方式计时,实现每一秒钟输出状态发生一次反转.#include<reg51.h>sbitp1_0=P1^0;//要使用单个引脚应先定义unsignedchari;voidmain(){TMOD=0*01;//t0工作在定时器,工作方式1TL0=0*B0;TH0=0*3C;//设定定时器初值,初值的计算可查看书本P143,此处定时器定时时间为TR0=1;//定时器工作开关开启while(1);}.{{p1_0=~p1_0;//P1.0取反。}TL0=0*B0;C}msT#include<reg51.h>#include<intrins.h>unsignedchari,j,k;voidmain(){TL1=0*B0;THCmsk=0;//用三个变量来判断时长,循环阶段。while(1);//等待定时工作完成}{TL1=0*B0;if(i==0)//500ms后{{.}{if(P1==0*fd)//左移到头了,要右移需要把灯亮的位置变化下{P1=0*bf;}}{if(P1==0*bf)//右移到头了,要右移需要把灯亮的位置变化下{P1=0*fd;}}}}#include<reg51.h>unsignedchari,j;voidmain(){P1=0*fe;//只亮第一个灯TL1=0*B0;TH1=0*3C;//初值设定为100msTR1=1;//开启工作开关while(1);//等待定时工作完成}tT{TL1=0*B0;TH1=0*3C;//赋初值if(i==0)//时间为500ms{.{P1=P1<<1|0*01;}{P1=0*7f;}ifj右移阶段{P1=P1>>1|0*80;}{P1=0*fe;}}}T#include<reg51.h>voidmain(){TMOD=0*05;//T0工作方式1,计数器工作TL0=0*00;TR0=1;//开启中断开关while(1){P1=~TL0;//计数器的值存在TL0里面。每加一个值,所得的值就是以八位}}{TL0=0*00;TH0=0*ff;.}率。#include<reg51.h>unsignedchari,a;voidmain(){a;EA=1;ET0=1;TL0=0*B0;TH0=0*3C;//时间设定为100msTL1=0*00;TH1=0*00;//计数器开启最大围计数TR0=1;TR1=1;//皆开启开关while(1)//等待计数定时工作完成{{TF1=0;//将溢出标志位清零TH1=0*00;TL1=0*00;//重新装上计数器初值}}}interruptT{TL0=0*B0;TH0=0*3C;//赋初值{LPTR0=0;TR读出后关闭T0和T1}.}P#include<reg51.h>voidmain(){SM0=0;SM1=0;REN=1;//串行口工作方式0,也可用SCON=0*10EA=1;ES=1;//开总中断和串行口中断while(1);}I_0()interrupt4//串行口中断子程序{RI=0;//RI要由软件置0}PP#include<reg51.h>unsignedchari,*;main(){while(1){*=p1_7;//防止第一位丧失for(i=0;i<7;i++){p3_6=0;p3_6=1;//部制造一个上升沿,从而到达数据传输,一个上升沿一个数据。.}}}利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。利用发送方的拨盘控制接收方的LED。#include<reg51.h>voidmain(){SM0=0;SM1=1;CONEA=0;ES=0;PCON=0;//设置SMOD=0,波特率不加倍TH1=0*FE;TL1=0*FE;//赋初值,此处赋值与定时或计数赋初值不同,此处初值用于波特率,可参考P168TR1=1;//开定时器T1while(1){while(TI==0);//等待发送完毕}}#include<reg51.h>voidmain(){SM0=0;SM1=1;SM2=0;RENSCON0代替EA=0;ET1=0;ES=0;//关所有中断TMOD=0*20;//T1工作方式2,定时器工作PCONSMOD加倍.TH1=0*FE;TL1=0*FE;//与发送端一样的波特率,则初值也应当一样TR1=1;while(1){while(RI==0);//等待接收完毕P1=SBUF;//将接收到的值赋给P1RI=0;//将接收标志位置0}}数据分别是:55H,AAH,33H,CCH,0FH,F0H,66H,99H;接收后能在LED显示出接收的#include<reg51.h>unsignedchar*,i,*p,*q;voiddelay(*){unsignedcharj,k,l;{for(j=10;j>0;j--)for(k=100;k>0;k--)for(l=249;l>0;l--);}while(--*);}main(){unsignedchardataa[8]={0*55,0*AA,0*33,0*CC,0*0F,0*F0,0*66,0*99};p=0*30;for(i=0;i<8;i++){*p=a[i];p++

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论