版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机上机考试试题1.使得8个发光二极管循环点亮,采用定时器方式0使得每个发光二极管点亮的时间为0.5s。#include int count=0;int minute=0;int temp;char code style8=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;void desplay() temp=minute%8; p0= styletemp;void toproc() interrupt 1 count+; th0=0x0c; tl0=0x78;void main() tmod=0;th0=0x0c;tl0=0x78;tr0=1; et0=1;
2、ea=1; while(1) if(count=100) minute+; count=0; desplay();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 char code style4=0x0,0xf0,0x33,0xff;sbit p1_0=p10;sbit p1_1=p11;void main() p0=0xff; while(1) if(p1_0=0&p1_1=0) p0=style0; if
3、(p1_0=0&p1_1=1) p0=style1; if(p1_0=1&p1_1=0) p0=style2; if(p1_0=1&p1_1=1) p0=style3; 3.在一个数码管上循环显示“h”“e” “l” “l” “o” ,循环的时间为1s。#include char code style5=0x89,0x86,0xc7,0xc7,0xc0;int i;int count=0;int second=0;void t0pro() interrupt 1 count+; tl0=0xb0; th0=0x3c; void display() i=second%5; p0=stylei;
4、void main() tmod=0x01;ea=1;tr0=1;et0=1;tl0=0xb0;th0=0x3c; while(1) if(count=20) second+;count=0;display(); 4.在6个数码管上分别显示自己学号的后六位数字。 #includechar code code1=0x4f,0x4f,0x01,0x06,0x06,0x4f;sbit p1_0=p10;char num;void delay(int timer) while(timer) -timer; void main() int i; while(1) num =0xfe; for(i=0;i
5、6;i+) p1=num; p2=code1i;delay(1000); num=(num1)|1; 5.做一个简易30s的倒计时秒表,秒表的显示通过8个发光二极管显示出来。#include#includestdio.hint count;count=0;void t0proc() interrupt 1 th0=0x3c; tl0=0xb0;count+; if(count=10) p0=p0+1; count=0;if(p0=0xff)p0=0xe1;void main()ea=1;et0=1;tmod=1;th0=0x3c; tl0=0xb0;tr0=1; p0=0xe1;while(1
6、); 6.使用外中断0来控制,去实现下列功能。其中k1为按键,p1口对应8个发光二极管的状态p1.0p1.1p1.2p1.3p1.4p1.5p1.6p1.7无按键按下(循环)有按键按下#include /sbit k1=p20; int count=0;void delay(unsigned char i); void int0proc() interrupt 0count+;p1=0xf0;void main() ea=1;ex0=1;it0=1;p1=0xcc; while(1) if(count%2=0) if(p1=0xcc)p1=0x30;delay(500); else p1=0x
7、cc;delay(500); void delay(unsigned char i) unsigned char j,k; for(k=0;ki;k+) for(j=0;j255;j+); 7.通过a/d转换电路,将模拟电压值在两个发光二极管上显示出来。(查询和中断方式均可)#include#include#define a xbyte0xcfa8sbit p=p32;sbit shi=p34;sbit ge=p35;void sepr(unsigned char w);void disp();unsigned char i,x,chh,chl;void main()while(1)adc08
8、09=0;while(p);x=adc0809;sepr(x);disp();void sepr(unsigned char w)unsigned char ch;ch=w;chh=ch/51;ch=ch%51;,chl=(ch*10)/51;void disp()unsigned char led1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char led2=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef ;shi=0;ge=1;a=led2chh;for(i=0
9、;i50;i+);shi=1;ge=0;a=led1chl;for(i=0;i50;i+);8. 采用定时器方式1使得8个发光二极管按如下方式点亮,循环的时间为2sp1.0p1.1p1.2p1.3p1.4p1.5p1.6p1.7#include char code style4=0x0f,0xf0,0xcc,0xff;int i;int count=0;int second=0;void t0pro() interrupt 1 count+; tl0=0xb0; th0=0x3c; void display() i=second%4; p0=stylei; void main() tmod=0
10、x01;ea=1;tr0=1;et0=1;tl0=0xb0;th0=0x3c; while(1) if(count=40) second+;count=0;display(); 9.在一个数码管上循环显示“0” “1” “5” 3个数字,循环的时间为1s。#include char code style3=0xc0,0xf9,0x92;int i;int count=0;int second=0;void t0pro() interrupt 1 count+; tl0=0xb0; th0=0x3c; void display() i=second%3; p0=stylei; void main
11、() tmod=0x01;ea=1;tr0=1;et0=1;tl0=0xb0;th0=0x3c; while(1) if(count=20) second+;count=0;display(); 10.在4个数码管上稳定显示出“a” “c” “e” “p” 四个字符。#include char code style4=0x88,0xc6,0x86,0x8c;void main() while(1) p0=style0; p2=style1; p3=style2; p1=style3;11.试采用定时方式2,在p1.0引脚上输出频率为1khz的方波 (可能有问题)#includeint coun
12、t;count=0;sbit p1_0=p10;void t0proc() interrupt 1 p1_0=p1_0;void main()ea=1;et0=1;tmod=2; th0=0x06; tl0=0x06;tr0=1;p1_0=1;while(1); 12.做一个20s的简易秒表,当按键k1按下时,秒表暂停计数,k2按下时,开始计数。 #include reg51.h #define uchar unsigned char #define uint unsigned int uint count = 0; uchar i; /0-9段码 uchar code time = 0xc0
13、,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; void stop() interrupt 2 /int1中断 et0 = 1; tr0 = 1; void start() interrupt 0/int0中断 et0 = 0; tr0 = 0; void timer() interrupt 1 /t0中断 th0=(65536 - 50000) / 256; /恢复定时器0 初值 tl0=(65536 - 50000) % 256; if(+i = 20) /50ms*20=1s 转换状态 i=0; count+; p0=timecount/10
14、; p1=timecount%10; if(count=20) count=0; /满20s后显示00 void main() /初始显示00 p0 = 0xc0; p1 = 0xc0; /t0采用方式1 tmod=0x01;/中断总开关 ea = 1; ex0 = 1; ex1 = 1; it0 = 1; it1 = 1;/int0优先 px0 = 1; while(1); 14.使用外中断1来控制,当无按键按下时8个发光二极管循环点亮,循环点亮的时间为1s,有按键按下时,8个发光二极管全部熄灭。#includestdio.h#includereg51.hint count=0;void i
15、nterint1() interrupt 2p0=0xff;et0=0;tr0=0;void intert0() interrupt 1if(count=15)th0=0xbd;tl0=0xc0;p0=(p01)|1;if(p0=0xff)p0=0xfe;count=0;count+;void main()ea=1;et0=1;tr0=1;tmod=0x01;th0=0xbd;tl0=0xc0;p0=0xfe;while(1) if(p33=0) ex1=1; it1=1; 15.通过串口控制单片机产生1khz的波型,当pc通过串口发过来“k”时,开始产生波型,当发过来“s”时,停止产生波型,
16、fosc=12mhz。(没答案)15.通过a/d转换电路,将模拟电压值在两个发光二极管上显示出来。(查询和中断方式均可)#include#include#define a xbyte0xcfa8sbit p=p32;sbit shi=p34;sbit ge=p35;void sepr(unsigned char w);void disp();unsigned char i,x,chh,chl;void main()while(1)adc0809=0;while(p);x=adc0809;sepr(x);disp();void sepr(unsigned char w)unsigned char
17、 ch;ch=w;chh=ch/51;ch=ch%51;,chl=(ch*10)/51;void disp()unsigned char led1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char led2=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef ;shi=0;ge=1;a=led2chh;for(i=0;i50;i+);shi=1;ge=0;a=led1chl;for(i=0;i0) time-; void main() /p1=0xaa; while(1
18、) if(p0_0=0) if(p0_1=0) p1=0x00; delay(); else if(p0_1=1) p1=0x0f; delay(); else if(p0_0=1) if(p0_1=0) p1=0xf3; delay(); else if(p0_1=1) p1=0xaa; delay(); 17.完成下面电路的功能,p1口对应发光二极管的状态,状态1显示的时间为1s,状态2显示的时间为2s,状态3显示的时间为3s,如此循环p1.0p1.1p1.2状态1状态2状态3#includestdio.h #includereg51.hint count=0;int flag=0;voi
19、d first() p1=0x02; flag=0; th0=0xbd; tl0=0xc0;void intert0() interrupt 1 p1=0x02;if(flag=0)if(count=15) flag=1;count=0;th0=0xbd;tl0=0xc0;count+;else if(flag=1)p1=0x01;if(count=15)th0=0xbd;tl0=0xc0;if(count=30)flag=2;count=0;th0=0xbd;tl0=0xc0;count+;else if(flag=2)p1=0x04; if(count=15)th0=0xbd;tl0=0x
20、c0;if(count=30)th0=0xbd;tl0=0xc0;if(count=45)first();count=0;count+; void main() ea=1; tmod=1; et0=1; tr0=1; first(); while(1); 18.彩灯系统,实现8个发光二极管从左到右点亮,每个发光二极管点亮的时间为2s,然后从右到左亮,每个发光二极管点亮的时间为1.5s.#include#include#define uchar unsigned charuchar code tab=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;uchar co
21、de tab1=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;uchar state=0;uchar t_count=0;uchar i=1;void t0proc() interrupt 1th0=0x3c;tl0=0xb0;switch(state)case 0:if(+t_count=20)p0=tabi;i=(i+1)%8;if(i=7)state=1;t_count=0;break;case 1:if(+t_count=15)i=(i+1)%8;p0=tab1i;if(i=7)state=0;i=1;t_count=0;break;void main
22、()tmod=1;th0=0x3c;tl0=0xb0;ea=1;et0=1;tr0=1;p0=tab0;while(1);19 在4个数码管上显示出当天的日期。#include#define uchar unsigned char#define uint unsigned intuchar code tab=0xc0,0xb0,0xc0,0x92;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口对应发
23、光二极管的状态,状态1显示的时间为3s,状态2显示的时间为1s,状态3显示的时间为0.5s,状态4显示的时间为0.1s,如此循环p1.0p1.1p1.2p1.3状态1状态2状态3状态4#include#includevoid delay(int time) while(time) -time; void main() p1=0xf3; delay(136364); p1=0xf1; delay(45455); p1=0xf0; delay(22727); p1=0xff; delay(4545);21. 采用51单片机扩展一片ram 6116和一片eprom 2732要求6116既能作为数据存
24、储器,又能作为程序存储器使用,编写出对2732读,对6116读与写的代码。#includeeg51.h#includeabsacc.h#define uchar unsigned charvoid main() uchar i,j,a; i = xbyte0x00ff; / 0x00ff上的字符 for(j=0;j10;j+) xbytej+0x08ff =a + j; /向 0x08ff写入数据 a = xbyte0x0900 ; /读0x08ff上的字符while(1);22. 扩展一片8255,使pa口工作在方式1输入,pb口工作在方式0输出。给出初始化8255程序,读与写的程序。硬件电
25、路如图所示。23. 数码管数字显示控制程序设计。控制要求:用按键k1和k2分别控制数码管显示数字09的顺序,当按下k1键时按从0到9的顺序显示,当按下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;
26、uchar t_count=0;sbit k1=p10;sbit k2=p11;uchar i=0;void t0proc() interrupt 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,波特率为12
27、00baud。要求:当单片机收到pc发来的数据“s”后,将30h-3fh的16个字节发送给乙机,当单片机收到“p”h时就发40h-5fh的32个字节数据。(待验证)#include void delay(void);sbit p1_4 = p14;unsigned char i;unsigned char data ch;unsigned char data s;unsigned char data tab12 = hello server;int j; void delay(void)unsigned char i;for(i=10;i0;i-);void display(j) char *
28、ads=0x30; char *adss=0x40; if(j=1) ti=0; while(ads=0x3f) sbuf = *ads; +ads; while(!ti) ti = 0; delay(); if(j=2) ti=0; while(adss=0x5f) sbuf = *adss; +adss; while(!ti) ti = 0; delay();void intoproc()interrupt 4 while(1) ri=0; ch=sbuf; if(ch=s) display(1); if(ch=p) display(2); void main() scon = 0x50;
29、/8位可变波特率, 无奇偶校验 tmod = 0x20;/定时器1为8位自动重装计数器 th1 = 0xe6; tl1 = 0xe6;/十进制230 tr1 = 1;/启动定时器1 ea=1; et1=1; es=1; ti=1; ri=1; while(1); 25. 交通控制系统,如下图所示,是交叉路口,要求:绿灯亮9秒后,黄灯闪3秒,后红灯亮9秒,两个数码管分别显视各种灯所剩余时间。#includestdio.h#includereg51.hsbit p0_0=p00;sbit p0_4=p04;sbit p0_1=p01;sbit p0_2=p02;sbit p0_3=p03;sbit
30、 p0_5=p05;int count=0;int count2=0;int flag1,flag2; /red=0,yellow=1,green=2;int yellow1=0,yellow2=0; int array=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/向上路口及路口1的黄灯闪烁函数int yellow1(int cou) if(cou%15=0) p1=array3-cou/15; if(p1=0x40) flag1=0; cou=-1; th0=0xbd; tl0=0xc0; return cou; if(yellow1
31、=0) p0_2=0;if(cou%2=0)yellow1=1;else if(yellow1=1)p0_2=1;if(cou%5=0)yellow1=0; return cou;/向右路口及路口2的黄灯闪烁函数int yellow2(int cou) if(count2%15=0) p3=array3-count2/15; if(p3=0x40) flag2=0; count2=-1; th1=0xbd; tl1=0xc0; if(yellow2=0) p0_5=0;if(cou%2=0)yellow2=1;else if(yellow2=1)p0_5=1;if(cou%5=0)yellow
32、2=0; return cou;void intert1() interrupt 3 /控制向右及路口2的红绿灯if(flag2=0) p0_5=1; p0_4=0; if(count2%15=0) p3=array9-count2/15; if(p3=0x40) flag2=2; count2=-1; th1=0xbd; tl1=0xc0; else if(flag2=2) p0_4=1; p0_3=0; if(count2%15=0) p3=array9-count2/15; if(p3=0x40) flag2=1; count2=-1; th1=0xbd; tl1=0xc0; else
33、if(flag2=1) p0_3=1; count=yellow2(count); count2+;void intert0() interrupt 1 /控制向上的路口1的红绿灯 if(flag1=2) p0_1=1; p0_0=0; if(count%15=0) p1=array9-count/15; if(p1=0x40) flag1=1; count=-1; th0=0xbd; tl0=0xc0; else if(flag1=1) p0_0=1;count=yellow1(count);else if(flag1=0) p0_2=1; p0_1=0; if(count%15=0) p1
34、=array9-count/15; if(p1=0x40) flag1=2; count=-1; th0=0xbd; tl0=0xc0; count+;void initial() flag1=2; et0=1; tr0=1; th0=0xbd; tl0=0xc0; flag2=0; et1=1; tr1=1; th1=0xbd; tl1=0xc0;void main() ea=1; tmod=0x11; initial(); while(1);26. 利用定时计数器t0计数,计满3个脉冲后,t1定时工作,定时间隔为500ms,并通过p1.1引脚输出周期方波, fosc = 12mhz.(可能
35、有问题)#include sbit p1_1=p11; int count=0; void t0proc() interrupt 1 th0=tl0=253; void t1proc() interrupt 3 count+;if(count=10)/50ms一个周期 p1_1=p1_1; count=0; th1=0x3c; tl1=0xb0; void main() p1_1=0;ea=1;et0=et1=1;tr0=tr1=1;tmod=0x16;th0=tl0=253;th1=0x3c;tl1=0xb0;tf1=tf0=1;while(1); 27. 用外部中断1实现加计数功能,并将计
36、数值输出到数码管上显示。#include#includesbit p1_0=p10;/k1sbit p1_1=p11;/k2char count=0;char utime=0;char code tab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void delay(int time) while(time) time-; void display() p0=tabcount/10; /显示十位 p2=tabcount%10; /显示个位 void int1part() interrupt 2 /tr0=1; +count; if(
37、count99) count=0; display();void main() p0=0xff; p2=0xff; ea=1;/总开关 ex1=1; /中断开关 it1=1; while(1) 28. led灯要求亮2秒钟,灭2秒钟,要求使用定时计数器,要求写主程序与中断程序,fosc = 6mhz#include sbit p1_1=p11; sbit p2_0=p20; sbit p1_0=p10; int count=0; void t0proc() interrupt 1 /100ms p1_0=0; th0=0x3c; tl0=0xb0; p1_0=1; void t1proc()
38、interrupt 3 p1_1=p1_1; void main() p1_1=0;tmod=0x61;ea=1;et0=1;th0=0x3c;tl0=0xb0;tr0=1;tr1=1;et1=1; th1=236;tl1=236;tf1=tf0=1;while(1); 29. 要求使用74ls139驱动四个数码管,用两个显示从24到0的侄计时,到0时自动复位;用两个显求从0到60的正向计时,到60时自动复位;每隔1秒跳到显示值变化一次。(没答案)30. 利用外部中断0,每申请一次中断使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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学护理查房中的患者安全管理策略
- 中暑的现场急救与转运护理
- 【2026】年健康干预题库及解析
- 山东省枣庄达标名校2026届中考联考物理试卷含解析
- 中医急诊护理中的中药灌肠技术
- 护理核心制度与护理工作效果
- 2026届四川省宜宾市翠屏区二片区达标名校毕业升学考试模拟卷物理卷含解析
- 岳阳市云溪区2025年数学三下期中学业水平测试模拟试题含答案
- 江苏省南京市秦淮区四校联考2026届中考物理模拟预测试卷含解析
- 乙肝患者五禽戏护理法
- DBJT15-162-2019 建筑基坑施工监测技术标准
- 银行装修施工方案
- 安全生产管理制度-普货运输
- 保洁服务项目投标技术方案(技术标)
- 环北部湾广西水资源配置工程环评报告
- 村委会规范化建设课件
- 土方平衡工程施工方案样本
- 中国近现代史纲要社会实践报告十二篇
- 胸腔积液诊断的中国专家共识(2022版)解读
- 医务人员职业暴露预防及处理标准操作规程
- 中国饲料原料基础知识课件
评论
0/150
提交评论