单片机上机操作考试题部分答案

上传人:b**** 文档编号:71064948 上传时间:2022-04-06 格式:DOC 页数:40 大小:597.50KB
收藏 版权申诉 举报 下载
单片机上机操作考试题部分答案_第1页
第1页 / 共40页
单片机上机操作考试题部分答案_第2页
第2页 / 共40页
单片机上机操作考试题部分答案_第3页
第3页 / 共40页
资源描述:

《单片机上机操作考试题部分答案》由会员分享,可在线阅读,更多相关《单片机上机操作考试题部分答案(40页珍藏版)》请在装配图网上搜索。

1、1. 使得8个发光二极管循环点亮,采用定时器方式0使得每个发光二极管点亮的时间为0.5s。#include#include#define uchar unsigned charuchar T_count=0;/定时中断void toProc() interrupt 1TH0=(8192-5000)/32; /恢复初值TL0=(8192-5000)%32;if(+T_count=100)/0.5s移动一位P0=_crol_(P0,1);T_count=0;/主函数void main()TMOD=0; TH0=(8192-5000)/32; /5ms定时TL0=(8192-5000)%32;EA=

2、1;ET0=1;TR0=1;P0=0xfe;while(1);2.完成下面电路所示的功能,K1,K2对应两个开关按键。P1口对应发光二极管的状态P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7K1=0,K2=0K1=0,K2=1K1=1,K2=0K1=1,K2=1#include#define uint unsigned int#define uchar unsigned charsbit k1=P32;sbit k2=P33;/延时void delay(uint x)uchar i;while(-x)for(i=0;i120;i+);/主函数void main()while(

3、1) if(k1=0)&(k2=0) /K1、K2同时按下P1=0x00;delay(10);else if(k1=0)&(k2=1) /K1按下,K2不按P1=0xcc;delay(10);else if(k1=1)&(k2=0) /K2按下,K1不按P1=0xf0;delay(10);elseP1=0xff;delay(10);3.在一个数码管上循环显示“H”“E” “L” “L” “O” ,循环的时间为1s。#include#define uchar unsigned char#define uint unsigned intuchar code tab=0xf6,0xf9,0xb8,0

4、xb8,0xbf;uchar T_count=0;uchar i=1;void t0Proc() interrupt 1TH0=0x3c;TL0=0xb0;if(+T_count=10)P0=tabi;i=(i+1)%5;T_count=0;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;TR0=1;ET0=1;P0=tab0; /初始化P0口while(1);4.在6个数码管上分别显示自己学号的后六位数字。#include#include#define uchar unsigned char#define uint unsigned intuchar cod

5、e tab=;/学号自己设置/延时void delay(uint x)uchar i;while(x-)for(i=0;i100;i+);/主函数void main()uchar k;uchar wei=0x01;P0=tab0;P2=0x01;delay(1000);while(1)for(k=1;k6;k+)wei=wei1;P0=tabk;/发送数字段码P2=wei;/发送位码delay(1000);5.做一个简易30s的倒计时秒表,秒表的显示通过8个发光二极管显示出来。#include#define uchar unsigned charvoid delay1s()uchar i;fo

6、r(i=0;i0;i-) t=(i/10)4)|(i%10); /高四位显示十位,低四位显示个位 P1=t; delay1s(); 6.使用外中断0来控制,去实现下列功能。其中K1为按键,P1口对应8个发光二极管的状态P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7无按键按下(循环)有按键按下#include#define uint unsigned int#define uchar unsigned charuchar code tab=0xcc,0x30;sbit k1=P32;/延时void delay(uint x)uchar i;while(-x)for(i=0;i1

7、20;i+);void int0Proc() interrupt 0P1=0xf0;/主函数void main()uchar j;EA=1; EX0=1;IE0=1;while(1)if(k1=1) /未按下for(j=0;j2;j+)P1=tabj; delay(500);8. 采用定时器方式1使得8个发光二极管按如下方式点亮,循环的时间为2sP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7#include#define uchar unsigned char#define uint unsigned intuchar code tab=0x0f,0xf0,0xcc,0x00

8、;uchar T_count=0;uchar i=1;void t0Proc() interrupt 1TH0=0x3c;TL0=0xb0;if(+T_count=20)P0=tabi;i=(i+1)%4;T_count=0;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;TR0=1;ET0=1;P0=tab0; /初始化P0口while(1);9.在一个数码管上循环显示“0” “1” “5” 3个数字,循环的时间为1s。#include#define uchar unsigned char#define uint unsigned intuchar code

9、 tab=0xbf,0x86,0xed;uchar T_count=0;uchar i=1;void intoProc() interrupt 1TH0=0x3c;TL0=0xb0;if(+T_count=10)P0=tabi;i=(i+1)%3;T_count=0;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;TR0=1;ET0=1;P0=tab0; /初始化P0口while(1);10.在4个数码管上稳定显示出“A” “C” “E” “P” 四个字符。#include#define uchar unsigned char#define uint unsi

10、gned intvoid delay(uint x)uchar i;while(x-)for(i=0;i100;i+);void main()while(1)P0=0xf7; /AP2=0xb9; /CP3=0xf9; /EP1=0xf3; /Pdelay(500);12.做一个20s的简易秒表,当按键K1按下时,秒表暂停计数,K2按下时,开始计数。#include#define uint unsigned int#define uchar unsigned charuchar tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;sbit

11、 k1=P32;sbit k2=P33;uchar T_count=0;uchar i=0;void delay(int x)uchar i;while(x-)for(i=0;i100;i+);void t0Proc() interrupt 1TH0=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;void main()P0=tabi;P2=tabi;TMOD=0x01;TH0=0x3c; TL0=0xb0;while(1)if(k1

12、=0 & k2=1)EA=0;ET0=0;TR0=0;break;else if(k1=1 & k2=0)EA=1;ET0=1;TR0=1;break;14.使用外中断1来控制,当无按键按下时8个发光二极管循环点亮,循环点亮的时间为1s,有按键按下时,8个发光二极管全部熄灭。#include#include#define uchar unsigned char#define uint unsigned intsbit k1=P32;uchar code tab=0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff;uchar T_count=0;uchar i=1;/

13、T0定时void T0Proc() interrupt 1TH0=0x3c;TL0=0xb0;if(+T_count=10)P1=tabi;i=(i+1)%8;T_count=0;/INT1中断函数void Int1Proc() interrupt 2P1=0xff;EA=0;EX1=0;IT1=0;ET0=0;TR0=0;/主程序void main()TMOD=1;EA=1;ET0=1; TR0=1;TH0=0x3c;TL0=0xb0;EX1=1;IT1=1;P1=0xfe;while(1);16. 完成下面电路所示的功能,K1,K2对应两个开关按键。P1口对应发光二极管的状态P1.0P1.

14、1P1.2P1.3P1.4P1.5P1.6P1.7K1=0,K2=0K1=0,K2=1K1=1,K2=0K1=1,K2=1#include#define uint unsigned int#define uchar unsigned charsbit k1=P32;sbit k2=P33;/延时void delay(uint x)uchar i;while(-x)for(i=0;i120;i+);/主函数void main()while(1) if(k1=1)&(k2=1)/都未按下0:未按下,1:按下P1=0x00;delay(10);else if(k1=1)&(k2=0) /k2按下,k

15、1未按下P1=0xf0;delay(10);else if(k1=0)&(k2=1) /k1按下,k2未按下P1=0xcf;delay(10);else if(k1=0)&(k2=0) /都按下P1=0x55;delay(10);17.完成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为1s,状态2显示的时间为2s,状态3显示的时间为3s,如此循环P1.0P1.1P1.2状态1状态2状态3#include#define uchar unsigned char#define uint unsigned intuchar code tab=0x05,0x06,0x03;uchar T

16、_count=0;uchar State=0;uchar i=1;void t0Proc() interrupt 1TH0=0x3c;TL0=0xb0;switch(State)case 0:if(+T_count=10)P1=tabi;i=(i+1)%3;T_count=0;State=1;break;case 1:if(+T_count=20)P1=tabi;i=(i+1)%3;T_count=0;State=2;break;case 2:if(+T_count=30)P1=tabi;i=(i+1)%3;i=1;T_count=0;State=0;break;void main()TMOD

17、=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P1=tab0;while(1);18.彩灯系统,实现8个发光二极管从左到右点亮,每个发光二极管点亮的时间为2s,然后从右到左亮,每个发光二极管点亮的时间为1.5s.#include#include#define uchar unsigned charuchar code tab=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;uchar code tab1=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;uchar State=0;uchar T_cou

18、nt=0;uchar i=1;void t0Proc() interrupt 1TH0=0x3c;TL0=0xb0;switch(State)case 0:if(+T_count=20)P2=tabi;i=(i+1)%8;if(i=7)State=1;T_count=0;break;case 1:if(+T_count=15)i=(i+1)%8;P2=tab1i;if(i=7)State=0;i=1;T_count=0;break;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P2=tab0;while(1);19. 在4个数码管上显

19、示出当天的日期。#include#define uchar unsigned char#define uint unsigned intuchar code tab=0x06,0x5b,0x06,0x6f;void delay(int x)uchar i;while(x-)for(i=0;i120;i+);void main()P0=tab0;P2=tab1;P3=tab2;P1=tab3;delay(500);20. 完成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为3s,状态2显示的时间为1s,状态3显示的时间为0.5s,状态4显示的时间为0.1s,如此循环P1.0P1.1

20、P1.2P1.3状态1状态2状态3状态4#include#define uchar unsigned char#define uint unsigned intuchar code tab=0x0c,0x0e,0x0f,0x00;uchar T_count=0;uchar State=0;uchar i=1;void t0Proc() interrupt 1TH0=0x3c;TL0=0xb0;switch(State)case 0:if(+T_count=30)P1=tabi;i=(i+1)%4;T_count=0;State=1;break;case 1:if(+T_count=10)P1=

21、tabi;i=(i+1)%4;T_count=0;State=2;break;case 2:if(+T_count=5)P1=tabi;i=(i+1)%4;T_count=0;State=3;break;case 3:if(+T_count=1)P1=tabi;i=(i+1)%4;T_count=0;State=0;break;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P1=tab0;while(1);23. 数码管数字显示控制程序设计。控制要求:用按键K1和K2分别控制数码管显示数字09的顺序,当按下K1键时按从0到9的顺序显示

22、,当按下K2时按从9到0的顺序显示。时间间隔均为1秒。硬件电路如图所示。#include#define uchar unsigned char#define uint unsigned intuchar code tab1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code tab2=0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f;uchar T_count=0;sbit k1=P10;sbit k2=P11;uchar i=0;void t0Proc() interrup

23、t 1TH0=0x3c;TL0=0xb0;if(+T_count=10)T_count=0;i=(i+1)%10;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P0=0x3f;while(1)if(k1=0 & k2=1)P0=tab1i;else if(k1=1 & k2=0)P0=tab2i;24. 89C51与PC通过串口通信,单片机采用方式3串行通信,晶振都采用12MHz,波特率为1200Baud。要求:当单片机收到PC发来的数据“S”后,将30H-3FH的16个字节发送给乙机,当单片机收到“P”H时就发40H-5FH的32个

24、字节数据。#include#includechar *startPoint;char *endPoint;void sendData()if(startPoint = endPoint)SBUF=*startPoint;+startPoint;void startSend(char *start ,char *end)startPoint=start;endPoint = end;sendData();void serialPorc() interrupt 4if(TI)TI=0;sendData();elseRI=0;if(0x53=SBUF)startSend(0x30,0x3f);els

25、e if(0x50=SBUF)startSend(0x40,0x5f);void main()TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;SCON=0xd0;EA=1;ES=1;while(1);25. 交通控制系统,如下图所示,是交叉路口,要求:绿灯亮9秒后,黄灯闪3秒,后红灯亮9秒,两个数码管分别显视各种灯所剩余时间。#include#define uchar unsigned char#define uint unsigned intuchar code tab=0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f;u

26、char code tab1=0x4f,0x5b,0x06,0x3f;sbit RED_A=P00; sbit YELLOW_A=P01;sbit GREEN_A=P02;sbit RED_B=P03; sbit YELLOW_B=P04;sbit GREEN_B=P05;uchar Operation_Type=1; /操作类型变量uchar T_count=0;uchar i=0;void t0Proc() interrupt 1TH0=0x3c;TL0=0xb0;switch(Operation_Type)case 1:/红灯亮RED_A=0;YELLOW_A=1;GREEN_A=1;R

27、ED_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=tabi;i=(i+1)%10;break;case 2: /黄灯闪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;bre

28、ak;case 3: /绿灯亮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;Operation_Type=1;i=0;if(T_count%10=0)P3=tabi;P1=tabi;i=(i+1)%10;break;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;P1=tab0;P3=tab0;while(1);26用外部中断1实现加计数功能,并将计数值输出到数码管上显示。#include#define uchar u

29、nsigned char#define uint unsigned int/09的段码uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/计数值分解后各个待显示的数位uchar DSY_Buffer=0,0,0;uchar Count=0;sbit Clear_Key=P36;/数码管上显示计数值void Show_Count_ON_DSY()DSY_Buffer2=Count/100; /获取3个数DSY_Buffer1=Count%100/10;DSY_Buffer0=Count%10;if

30、(DSY_Buffer2=0) /高位为0时不显示DSY_Buffer2=0x0a;if(DSY_Buffer1=0) /高位为0,若第二位为0同样不显示DSY_Buffer1=0x0a;P0=DSY_CODEDSY_Buffer0;P1=DSY_CODEDSY_Buffer1;P2=DSY_CODEDSY_Buffer2;/主程序void main()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中断函数void EX_I

31、NT1() interrupt 2Count+; /计数值递增28. LED灯要求亮2秒钟,灭2秒钟,要求使用定时计数器,要求写主程序与中断程序,fosc = 6MHz#include#define uchar unsigned charuchar T_count=0;sbit LED=P10;void t0Proc() interrupt 1TH0=0x3c;TL0=0xb0;if(+T_count=20)T_count=0;LED=LED;void main()TMOD=1;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;while(1);29利用外部中断0,每申请一

32、次中断使P0口连接的发光二极管点亮一个,从低位到高位,同时使P1口连接的发光二极管熄灭一个,从高位到低位#include#define uchar unsigned charuchar code tab=0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff;uchar i=0;/INT1中断函数void EX_INT1() interrupt 2P0=tabi;P1=tabi;if(+i=8)i=0;/主程序void main()P0=0xff;P1=0x00;EA=1;EX0=1;IT0=1; /下降沿触发while(1);31. 用定时计数器T1定时,由P0控制8

33、个指示灯,首先依次点亮,每个指示灯点亮1秒,8个灯点亮完后,接着是间隔点亮,指示灯点亮0.5秒,上述过程重复循环。Fosc = 12MHz。#include#define uchar unsigned charuchar code tab=0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,0x00;uchar code tab1=0x01,0x05,0x15,0x55,0x57,0x5f,0x7f,0xff,0x00;uchar T_count=0;uchar i=0;uchar op_type=1;void t1Proc() interrupt 3TH1=0x3

34、c;TL1=0xb0;switch(op_type)case 1:if(+T_count=20) P2=tabi; i=(i+1)%9; T_count=0; if(i=8) i=0;op_type=2; break;case 2:if(+T_count=10) P2=tab1i; i=(i+1)%9; T_count=0; if(i=8) i=0;op_type=1; break;void main()TMOD=0x10;TH1=0x3c;TL1=0xb0;EA=1;ET1=1;TR1=1;P2=0xff;while(1);32. 用定时计数器设计一个二位的计数器,能够将脉冲计数过程数值显示

35、在两个数码管上。#include#define uchar unsigned char#define uint unsigned int/段码uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;uchar Count=0;/T0计数器中断函数void Key_Counter() interrupt 1Count=(Count+1)%100; /因为只有两位数码管,计数控制在100以(0099)/INT0中断函数void Clear_Counter() interrupt 0Count=0;/主程序void main()P0=0x00;P2=0x00;TMOD=0x06; /计数器T0方式2TH0=TL0=256-1; /计数值为1ET0=1; /允许T0中断EX0=1; /允许INT0中断EA=1; /允许CPU中断IP=0x02; /设置优先级,T0高于INT0IT0=1; /INT0中断触发方式为下降沿触发TR0=1; /启动T0while(1)P0=DSY_CODECount/10;P2=DSY_CODECount%10;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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