单片机上机操作测验题部分答案.docx
《单片机上机操作测验题部分答案.docx》由会员分享,可在线阅读,更多相关《单片机上机操作测验题部分答案.docx(50页珍藏版)》请在冰豆网上搜索。
单片机上机操作测验题部分答案
单片机上机操作测验题部分答案
————————————————————————————————作者:
————————————————————————————————日期:
1.使得8个发光二极管循环点亮,采用定时器方式0使得每个发光二极管点亮的时间为0.5s。
#include<reg51.h>
#include#defineucharunsignedchar
uchar T_count=0;
//定时中断
voidtoProc()interrupt 1
{
TH0=(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=(8192-5000)%32;
EA=1;
ET0=1;
TR0=1;
ﻩP0=0xfe;
while
(1);
}
2.完成下面电路所示的功能,K1,K2对应两个开关按键。
P1口对应发光二极管的状态
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
K1=0,K2=0
○
○
○
○
○
○
○
○
K1=0,K2=1
●
●
●
●
○
○
○
○
K1=1,K2=0
●
●
○
○
●
●
○
○
K1=1,K2=1
●
●
●
●
●
●
●
●
#include<reg51.h>
#defineuintunsignedint
#defineucharunsignedchar
sbit k1=P3^2;
sbitk2=P3^3;
//延时
voiddelay(uintx)
{
uchari;
while(--x)
ﻩ{
ﻩﻩfor(i=0;i<120;i++);
ﻩ}
}
//主函数
voidmain()
{
ﻩwhile(1)
{
if((k1==0)&&(k2==0))ﻩ//K1、K2同时按下
{
ﻩﻩﻩP1=0x00;
ﻩﻩﻩdelay(10);
ﻩ}
ﻩelse if((k1==0)&&(k2==1))ﻩ//K1按下,K2不按
ﻩ{
ﻩﻩﻩP1=0xcc;
ﻩﻩdelay(10);
}
ﻩelseif((k1==1)&&(k2==0))ﻩ//K2按下,K1不按
ﻩ{
ﻩﻩﻩP1=0xf0;
ﻩdelay(10);
ﻩ}
ﻩelse
ﻩ{
ﻩﻩﻩP1=0xff;
delay(10);
ﻩ}
ﻩ}
}
3.在一个数码管上循环显示“H”“E”“L”“L”“O”,循环的时间为1s。
#include#defineuchar unsignedchar
#defineuintunsignedint
ucharcode tab[]={0xf6,0xf9,0xb8,0xb8,0xbf};
ucharT_count=0;
uchari=1;
voidt0Proc() interrupt1
{
TH0=0x3c;
TL0=0xb0;
if(++T_count==10)
ﻩ{
ﻩﻩP0=tab[i];
ﻩi=(i+1)%5;
ﻩT_count=0;
}
}
voidmain()
{
ﻩTMOD=1;
TH0=0x3c;
ﻩTL0=0xb0;
EA=1;
TR0=1;
ET0=1;
P0=tab[0];//初始化P0口
ﻩwhile
(1);
}
4.在6个数码管上分别显示自己学号的后六位数字。
#include
#include<intrins.h>
#defineucharunsigned char
#defineuintunsignedint
ucharcode tab[]={};//学号自己设置
//延时
void delay(uintx)
{
ﻩuchar i;
ﻩwhile(x--)
{
for(i=0;i<100;i++);
ﻩ}
}
//主函数
voidmain()
{
ﻩuchark;
ﻩuchar wei=0x01;
P0=~tab[0];
ﻩP2=0x01;
delay(1000);
while
(1)
ﻩ{
ﻩfor(k=1;k<6;k++)
ﻩﻩ{
ﻩﻩwei=wei<<1;
ﻩP0=~tab[k];ﻩ//发送数字段码
ﻩP2=wei;ﻩﻩ//发送位码
ﻩﻩdelay(1000);
ﻩﻩ}
ﻩ}
}
5.做一个简易30s的倒计时秒表,秒表的显示通过8个发光二极管显示出来。
#include<reg51.h>
#defineucharunsignedchar
void delay1s()
{
ﻩuchari;
for(i=0;i<10;i++)
{
ﻩﻩTH1=0x3c;
ﻩTL1=0xb0;
TR1=1; //启动T1
while(!
TF1);//判断T1有无请求
TF1=0;
ﻩ}
}
voidmain()
{
ﻩuchari;
uchart;
ﻩTMOD=0x10; //选择T1计时
while
(1)
{
ﻩfor(i=30;i>0;i--)
{
ﻩﻩt=(((i/10)<<4)|(i%10)); //高四位显示十位,低四位显示个位
ﻩP1=~t;
ﻩﻩdelay1s();
ﻩ }
}
}
6.使用外中断0来控制,去实现下列功能。
其中K1为按键,P1口对应8个发光二极管的状态
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
无按键按下(循环)
●
●
○
○
●
●
○
○
●
●
●
●
○
○
●
●
有按键按下
●
●
●
●
○
○
○
○
#include<reg51.h>
#defineuintunsignedint
#defineucharunsigned char
ucharcodetab[]={0xcc,0x30};
sbitk1=P3^2;
//延时
void delay(uint x)
{
ﻩuchari;
while(--x)
{
ﻩfor(i=0;i<120;i++);
}
}
void int0Proc()interrupt0
{
P1=0xf0;
}
//主函数
voidmain()
{
ucharj;
EA=1;
EX0=1;
ﻩIE0=1;
while(1)
{
ﻩﻩif(k1==1)//未按下
ﻩ{
ﻩfor(j=0;j<2;j++)
ﻩﻩﻩ{
ﻩP1=tab[j];
delay(500);
ﻩﻩﻩ}ﻩﻩ
ﻩ}
}
}
8. 采用定时器方式1使得8个发光二极管按如下方式点亮,循环的时间为2s
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
○
○
○
○
●
●
●
●
●
●
●
●
○
○
○
○
●
●
○
○
●
●
○
○
●
●
●
●
●
●
●
●
#include
#define ucharunsignedchar
#defineuint unsignedint
ucharcode tab[]={0x0f,0xf0,0xcc,0x00};
ucharT_count=0;
uchari=1;
voidt0Proc()interrupt 1
{
ﻩTH0=0x3c;
TL0=0xb0;
ﻩ
if(++T_count==20)
{
ﻩP0=tab[i];
ﻩﻩi=(i+1)%4;
ﻩT_count=0;
ﻩ}
}
voidmain()
{
TMOD=1;
TH0=0x3c;
ﻩTL0=0xb0;
EA=1;
ﻩTR0=1;
ﻩET0=1;
ﻩP0=tab[0];//初始化P0口
while(1);
}
9.在一个数码管上循环显示“0”“1”“5” 3个数字,循环的时间为1s。
#include
#define ucharunsigned char
#defineuintunsignedint
ucharcodetab[]={0xbf,0x86,0xed};
ucharT_count=0;
uchari=1;
voidintoProc()interrupt1
{
TH0=0x3c;
ﻩTL0=0xb0;
ﻩ
ﻩif(++T_count==10)
{
ﻩﻩP0=tab[i];
ﻩi=(i+1)%3;
ﻩT_count=0;
}ﻩ
}
voidmain()
{
TMOD=1;
ﻩTH0=0x3c;
ﻩTL0=0xb0;
EA=1;
ﻩTR0=1;
ﻩET0=1;
ﻩP0=tab[0];//初始化P0口
ﻩwhile
(1);
}
10.在4个数码管上稳定显示出“A” “C” “E” “P”四个字符。
#include
#defineucharunsignedchar
#define uint unsignedint
voiddelay(uint x)
{
ﻩuchar i;
ﻩwhile(x--)
ﻩ{
ﻩfor(i=0;i<100;i++);
ﻩ}
}
voidmain()
{
ﻩwhile
(1)
{
ﻩP0=0xf7; //A
ﻩP2=0xb9; //C
ﻩP3=0xf9; //E
ﻩP1=0xf3; //P
ﻩdelay(500);
}
}
12.做一个20s的简易秒表,当按键K1按下时,秒表暂停计数,K2按下时,开始计数。
#include<reg51.h>
#defineuintunsignedint
#defineuchar unsignedchar
uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbitk1=P3^2;
sbit k2=P3^3;
ucharT_count=0;
uchari=0;
voiddelay(intx)
{
ﻩuchari;
while(x--)
ﻩ{
ﻩfor(i=0;i<100;i++);
ﻩ}
}
voidt0Proc() interrupt1
{