单片机上机操作考试题部分答案_第1页
单片机上机操作考试题部分答案_第2页
单片机上机操作考试题部分答案_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、1.使得8个发光二极管循环点亮,采用定时器方式0使得每个发光二极管点亮的时间为0.5s#include<reg51.h>#include<intrins.h>#defineucharunsignedcharucharT_count=0;/定时中断voidtoProc()interrupt1TH0=(8192-5000)/32;/恢复初值TL0=(8192-5000)%32;if(+T_count=100)/0.5s移动一位P0=_crol_(P0,1);T_count=0;/主函数voidmain()TMOD=0;TH0=(8192-5000)/32;/5ms定时TL0

2、=(8192-5000)%32;EA=1;ET0=1;TR0=1;P0=0xfe;while(1);2.完成下面电路所示的功能,K1,K2对应两个开关按键。P1口对应发光二极管的状态P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7K1=0,K2=0ooOOooooK1=0,K2=1.ooooK1=1,K2=0.oo.ooK1=1,K2=1.#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitk1=P3人2;sbitk2=P3人3;/延时voiddelay(uintx)uchari;wh

3、ile(-x)for(i=0;i<120;i+);)/主函数voidmain()(while(1)(if(k1=0)&&(k2=0)(P1=0x00;delay(10);)elseif(k1=0)&&(k2=1)(P1=0xcc;delay(10);)elseif(k1=1)&&(k2=0)(P1=0xf0;delay(10);)else(P1=0xff;delay(10);)3.在一个数码管上循环显示“H'"E'#include<reg51.h>#defineucharunsignedchar#def

4、ineuintunsignedintucharcodetab=0xf6,0xf9,0xb8,0xb8,0xbf);ucharT_count=0;uchari=1;voidt0Proc()interrupt1TH0=0x3c;TL0=0xb0;if(+T_count=10)P0=tabi;i=(i+1)%5;/K1、K2同时按下/K1按下,K2不按/K2按下,K1不按L,“l,“o,,循环的时间为1sT_count=0;)voidmain()(TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;TR0=1;ET0=1;P0=tab0;/初始化P0口while(1);)4.在6个数码管上分

5、别显示自己学号的后六位数字#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodetab=;/学号自己设置/延时voiddelay(uintx)uchari;while(x-)for(i=0;i<100;i+);/主函数voidmain()uchark;ucharwei=0x01;P0=tab0;P2=0x01;delay(1000);while(1)for(k=1;k<6;k+)wei=wei<<1;P0=tabk;/发

6、送数字段码P2=wei;/发送位码delay(1000);)5.做一个简易30s的倒计时秒表,秒表的显示通过8个发光二极管显示出来。#include<reg51.h>#defineucharunsignedcharvoiddelay1s()uchari;for(i=0;i<10;i+)TH1=0x3c;TL1=0xb0;TR1=1;/启动T1while(!TF1);/判断T1有无请求TF1=0;)voidmain()uchari;uchart;TMOD=0x10;/选择T1计时while(1)for(i=30;i>0;i-)t=(i/10)<<4)|(i%1

7、0);高四位显示十位,低四位显示个位P1=t;delay1s();))6.使用外中断0来控制,去实现下列功能。其中K1为按键,P1口对应8个发光二极管的状态P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7无按键按下(循环).OO.OO.OO.有按键按下.OOOO#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharucharcodetab=0xcc,0x30;sbitk1=P3人2;/延时voiddelay(uintx)uchari;while(-x)(for(i=0;i<120;i+);

8、)voidint0Proc()interrupt0(P1=0xf0;)/主函数voidmain()(ucharj;EA=1;EX0=1;IE0=1;while(1)(if(k1=1)/未按下(for(j=0;j<2;j+)(P1=tabj;delay(500);)8.采用定时器方式1使得8个发光二极管按如下方式点亮,循环的时间为2sP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7oooFo.oooo.oo.oo.#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetab

9、=0x0f,0xf0,0xcc,0x00;ucharT_count=0;uchari=1;voidt0Proc()interrupt1TH0=0x3c;TL0=0xb0;if(+T_count=20)(P0=tabi;i=(i+1)%4;T_count=0;)voidmain()(TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;TR0=1;ET0=1;P0=tab0;/初始化P0口while(1);)9.在一个数码管上循环显示“0”“1”“5”3个数字,循环的时间为1s#include<reg51.h>#defineucharunsignedchar#defineuin

10、tunsignedintucharcodetab=0xbf,0x86,0xed;ucharT_count=0;uchari=1;voidintoProc()interrupt1TH0=0x3c;TL0=0xb0;if(+T_count=10)P0=tabi;i=(i+1)%3;T_count=0;voidmain()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;TR0=1;ET0=1;P0=tab0;/初始化P0口while(1);10.在4个数码管上稳定显示出“A”“C”“E”“P”四个字符。#include<reg51.h>#defineucharunsigned

11、char#defineuintunsignedintvoiddelay(uintx)uchari;while(x-)for(i=0;i<100;i+);voidmain()while(1)P0=0xf7;/AP2=0xb9;/CP3=0xf9;/EP1=0xf3;/Pdelay(500);12.做一个20s的简易秒表,当按键K1按下时,秒表暂停计数,K2按下时,开始计数#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharuchartab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7

12、d,0x07,0x7f,0x6f;sbitk1=P3人2;sbitk2=P3人3;ucharT_count=0;uchari=0;voiddelay(intx)uchari;while(x-)for(i=0;i<100;i+);voidt0Proc()interrupt1TH0=0x3c;/恢复定时器0初值TL0=0xb0;if(+T_count=10)/100ms*10=1s转换状态i+;P0=tabi/10;P2=tabi%10;if(i=20)(i=0;)T_count=0;)voidmain()(P0=tabi;P2=tabi;TMOD=0x01;TH0=0x3c;TL0=0xb

13、0;while(1)(if(k1=0&&k2=1)(EA=0;ET0=0;TR0=0;break;)elseif(k1=1&&k2=0)(EA=1;ET0=1;TR0=1;break;)14.使用外中断1来控制,当无按键按下时8个发光二极管循环点亮,循环点亮的时间为1s,有按键按下时,8个发光二极管全部熄灭。#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitk1=P3人2;ucharcodetab=0x01,0x03,

14、0x07,0x0f,0x1f,0x3f,0x7f,0xff);ucharT_count=0;uchari=1;/T0定时voidT0Proc()interrupt1(TH0=0x3c;TL0=0xb0;if(+T_count=10)(P1=tabi;i=(i+1)%8;T_count=0;/INT1中断函数voidInt1Proc()interrupt2(P1=0xff;EA=0;EX1=0;IT1=0;ET0=0;TR0=0;/主程序voidmain()(TMOD=1;EA=1;ET0=1;TR0=1;TH0=0x3c;TL0=0xb0;EX1=1;IT1=1;P1=0xfe;while(1

15、);16.完成下面电路所示的功能,K1,K2对应两个开关按键。P1口对应发光二极管的状态P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7K1=0,K2=0.K1=0,K2=1.ooooK1=1,K2=0oooo.ooK1=1,K2=1o.o.o.o.#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitk1=P3人2;sbitk2=P3人3;/延时voiddelay(uintx)(uchari;while(-x)(for(i=0;i<120;i+);/主函数voidmain()(w

16、hile(1)(if(k1=1)&&(k2=1)都未按下0:未按下,1:按下(P1=0x00;delay(10);elseif(k1=1)&&(k2=0)/k2按下,k1未按下(P1=0xf0;delay(10);elseif(k1=0)&&(k2=1)/k1按下,k2未按下(P1=0xcf;delay(10);elseif(k1=0)&&(k2=0)/都按下(P1=0x55;delay(10);完成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为1s,状态2显示的时间为2s,状态3显示的时间为3s,如此循环P1.0

17、P1.1P1.2状态1.Fo.状态2o.状态3.o#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetab=0x05,0x06,0x03;ucharT_count=0;ucharState=0;uchari=1;voidt0Proc()interrupt1(TH0=0x3c;TL0=0xb0;switch(State)(case0:if(+T_count=10)(P1=tabi;i=(i+1)%3;T_count=0;State=1;break;case1:if(+T_count=20)(

18、P1=tabi;i=(i+1)%3;T_count=0;State=2;break;case2:if(+T_count=30)(P1=tabi;i=(i+1)%3;i=1;T_count=0;State=0;break;voidmain()(TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P1=tab0;while(1);)17. 彩灯系统,实现8个发光二极管从左到右点亮,每个发光二极管点亮的时间为2s,然后从右到左亮,每个发光二极管点亮的时间为1.5s.#include<reg51.h>#include<intrins.h>#def

19、ineucharunsignedcharucharcodetab=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;ucharcodetab1=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;ucharState=0;ucharT_count=0;uchari=1;voidt0Proc()interrupt1TH0=0x3c;TL0=0xb0;switch(State)case0:if(+T_count=20)P2=tabi;i=(i+1)%8;if(i=7)State=1;T_count=0;break;case1:if(+T_c

20、ount=15)i=(i+1)%8;P2=tab1i;if(i=7)State=0;i=1;T_count=0;break;)voidmain()(TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P2=tab0;while(1);)18. 在4个数码管上显示出当天的日期。#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetab=0x06,0x5b,0x06,0x6f);voiddelay(intx)uchari;while(x-)for(i=0;i<

21、;120;i+);)voidmain()P0=tab0;P2=tab1;P3=tab2;P1=tab3;delay(500);)19. 完成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为3s,状态2显示的时间为1s,状态3显示的时间为0.5s,状态4显示的时间为0.1s,如此循环P1.0P1.1P1.2P1.3状态1oo.状态2o.状态3.状态4oooo#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetab=0x0c,0x0e,0x0f,0x00;ucharT_count

22、=0;ucharState=0;uchari=1;voidt0Proc()interrupt1(TH0=0x3c;TL0=0xb0;switch(State)(case0:if(+T_count=30)(P1=tabi;i=(i+1)%4;T_count=0;State=1;break;case1:if(+T_count=10)(P1=tabi;i=(i+1)%4;T_count=0;State=2;break;case2:if(+T_count=5)(P1=tabi;i=(i+1)%4;T_count=0;State=3;break;case3:if(+T_count=1)(P1=tabi;

23、i=(i+1)%4;T_count=0;State=0;break;voidmain()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P1=tab0;while(1);数码管数字显示控制程序设计。控制要求:用按键K1和K2分别控制数码管显示数字09的顺序,当按下K1键时按从0到9的顺序显示,当按下K2时按从9到0的顺序显示。时间间隔均为1秒。硬件电路如图所示。#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetab1=0x3f,0x06,0x5b,0x

24、4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;ucharcodetab2=0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f;ucharT_count=0;sbitk1=P1A0;sbitk2=P1A1;uchari=0;voidt0Proc()interrupt1TH0=0x3c;TL0=0xb0;if(+T_count=10)T_count=0;i=(i+1)%10;voidmain()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P0=0x3f;while(1)if(k1=0&

25、;&k2=1)P0=tab1i;elseif(k1=1&&k2=0)(P0=tab2i;23. 89C51与PC通过串口通信,单片机采用方式3串行通信,晶振都采用12MHz,波特率为1200Baud。要求:当单片机收到PC发来的数据“S”后,将30H-3FH的16个字节发送给乙机,当单片机收到“P”H时就发40H-5FH的32个字节数据。#include<reg51.h>#include<stdio.h>char*startPoint;char*endPoint;voidsendData()(if(startPoint<=endPoint)

26、(SBUF=*startPoint;+startPoint;voidstartSend(char*start,char*end)(startPoint=start;endPoint=end;sendData();voidserialPorc()interrupt4(if(TI)(TI=0;sendData();else(RI=0;if(0x53=SBUF)(startSend(0x30,0x3f);elseif(0x50=SBUF)(startSend(0x40,0x5f);voidmain()(TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;SCON=0xd0;EA=1;

27、ES=1;24. while(1);交通控制系统,如下图所示,是交叉路口,要求:绿灯亮9秒后,黄灯闪3秒,后红灯亮9秒,两个数码管分别显视各种灯所剩余时间。#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetab卜0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f;ucharcodetab1=0x4f,0x5b,0x06,0x3f;sbitRED_A=P0A0;sbitYELLOW_A=P0A1;sbitGREEN_A=P0A2;sbitRE

28、D_B=P0A3;sbitYELLOW_B=P0A4;sbitGREEN_B=P0A5;ucharOperation_Type=1;/操作类型变量ucharT_count=0;uchari=0;voidt0Proc()interrupt1TH0=0x3c;TL0=0xb0;switch(Operation_Type)case1:/红灯亮RED_A=0;YELLOW_A=1;GREEN_A=1;RED_B=0;YELLOW_B=1;GREEN_B=1;if(+T_count=90)T_count=0;Operation_Type=2;i=0;if(T_count%10=0)(P3=tabi;P1

29、=tabi;i=(i+1)%10;break;case2:黄灯闪RED_A=1;YELLOW_A=YELLOW_A;GREEN_A=1;RED_B=1;YELLOW_B=YELLOW_B;GREEN_B=1;if(+T_count=30)(T_count=0;Operation_Type=3;i=0;if(T_count%10=0)(P3=tab1i;P1=tab1i;i=(i+1)%3;break;case3:/绿灯亮RED_A=1;YELLOW_A=1;GREEN_A=0;RED_B=1;YELLOW_B=1;GREEN_B=0;if(+T_count=90)(T_count=0;Oper

30、ation_Type=1;i=0;if(T_count%10=0)(P3=tabi;P1=tabi;i=(i+1)%10;break;)voidmain()(TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P1=tab0;P3=tab0;while(1);)26用外部中断1实现加计数功能,并将计数值输出到数码管上显示。#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint/09的段码ucharcodeDSY_CODE卜0x3f,0x06,0x5b,0x4f,0x66,0x6d

31、,0x7d,0x07,0x7f,0x6f,0x00;/计数值分解后各个待显示的数位ucharDSY_Buffer=0,0,0;ucharCount=0;sbitClear_Key=P3人6;/数码管上显示计数值voidShow_Count_ON_DSY()DSY_Buffer2=Count/100;/获取3个数DSY_Buffer1=Count%100/10;DSY_Buffer0=Count%10;if(DSY_Buffer2=0)/高位为0时不显示DSY_Buffer2=0x0a;if(DSY_Buffer1=0)/高位为0,若第二位为。同样不显示DSY_Buffer1=0x0a;P0=D

32、SY_CODEDSY_Buffer0;P1=DSY_CODEDSY_Buffer1;P2=DSY_CODEDSY_Buffer2;/主程序voidmain()P0=0x00;P1=0x00;P2=0x00;EA=1;EX1=1;IT1=1;/下降沿触发while(1)(if(Clear_Key=0)(Count=0;/清0Show_Count_ON_DSY();/INT1中断函数voidEX_INT1()interrupt2(Count+;/计数值递增28.LED灯要求亮2秒钟,灭2秒钟,要求使用定时计数器,要求写主程序与中断程序,fosc=6MHz#include<reg51.h>

33、;#defineucharunsignedcharucharT_count=0;sbitLED=P1A0;voidt0Proc()interrupt1(TH0=0x3c;TL0=0xb0;if(+T_count=20)(T_count=0;LED=LED;voidmain()(TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;while(1);29利用外部中断0,每申请一次中断使P0口连接的发光二极管点亮一个,从低位到高位,同时使P1口连接的发光二极管熄灭一个,从高位到低位#include<reg51.h>#defineucharunsignedcharucharcodetab=0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff);uchari=0;/INT1中断函数voidEX_INT1()interrupt2P0=tabi;P1=tabi;if(+i=8)i=0;)/主程序voidmain()P0=0xff;P1=0x00;EA=1;EX0=1;IT0=1;/下降沿触发while(1);)31.用定时计

温馨提示

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

评论

0/150

提交评论