单片机实验例题及答案

单片机实验例题及答案
单片机实验例题及答案

单片机实验考试题:

1、用Proteus打开“简易电子琴.DSN”,按图编写程序,设计一个简易电子琴。按数字键1~7,分

别发“斗”、“来”、“米”……音(频率见实验指导书),按键抬起则发音停止,不考虑高八度和低八度音,按下1~7以外的其它键不发音。

2、用Proteus打开文件“计数器.DSN”,当按下键盘上的0~F十六个键时,能将键值以十六进制形

式在四个数码管上滚动显示。在LED上显示字符A~F的形式分别为:。

3、用Proteus打开文件“频率计.DSN”,图中,在单片机的外部中断0脚接有一个脉冲信号源,

编写程序实现一个频率计的功能,能够测定该脉冲信号源的频率。程序调试时可以修改信号源的频率,比较测量值与设定值的差距,仿真时一般误差在10%内就算正常。修改信号源频率的方法是,右击信号源图标后再左击,打开信号源的属性对话框,修改其中的频率(frequncy),不要改变其它属性值,频率可以在1Hz到10000Hz之间设定。

(提示:可以设置一个外部中断0的中断服务程序,每次中断时给某个变量加一;再设置一个定时器中断服务程序,用于计时。每秒钟读一次脉冲数,并将其清零,然后将脉冲数显示在数码管上,每秒钟内的脉冲数就是频率。)

4、用Proteus打开文件“电子秒表.DSN”,开机时显示00.00,单位是秒,精确到10毫秒,按“SW1”

键启动或暂停,按“SW2”键时间清零。

提示:关于点亮小数点,每5mS刷新LED时,判断当刷新到第2个LED时将笔划代码中与小数点对应的位(bit7)清零。

5、用Proteus打开文件“播放音乐.DSN”,按图设计一个开机就能播放<康定情歌>的程序,并将其

简谱在数码管上同步滚动显示。此程序也可以下载到实验板上运行。

6、用Proteus打开文件“流水灯.DSN”,可以看到在单片机89C52的P2口接有8个发光二极管。编

写流水灯的程序,使8个发光二极管每隔约0.5秒依次点亮(每次亮一个),要求开始时从左往右点亮,每按一次按钮SW1后,改变流水的方向。

7、用Proteus打开文件“计数器.DSN”,当按下键盘上的0~9十个数字键时,能将键值在四个数码

管上滚动显示。若按了A~F六个字母键,则在数码管上显示(Over)。

8、用Proteus打开文件“电子秒表.DSN”,开机时显示00.00,单位是分、秒,按“SW1”键启动/

暂停计时,在暂停状态按“SW2”键分秒清零。在计时状态分和秒之间的小数点闪烁(每秒钟亮半秒,熄半秒),暂停状态常亮。

提示:关于小数点闪烁,每5mS刷新LED时,判断当刷新到第2个LED并且时间是前半秒时将笔划代码中与小数点对应的位清零。

9.用Proteus打开文件“定时关灯控制器.DSN”,按图编写程序设计一个定时关灯控制器。从键盘

输入时间(单位:秒,最大9999秒,最小1秒),按一下A键灯亮,时间每秒减1,减到0时停止,灯熄灭。可以再次输入时间并启动定时过程。

10. 用Proteus 打开文件“交通信号灯.DSN ”,编程实现时间倒计时及绿黄红三色灯的切换。切换方

式为:

如此周而复始。(提示:图中数码管与单片机之间的连接方式与实验指导书中相同)

11. 用Proteus 打开文件“多路开关指示.DSN ”,可以看到图中有八个按钮、八个发光二极管和一个

数码管。编写程序实现如下功能:当按一下某一按钮时,该按钮的编号显示在数码管上,同时点亮对应编号的发光二极管。

12. 用Proteus 打开文件“数字钟.DSN ”,编写程序实现如下功能:开机时显示00.00.00 (时分秒),

按钮“SW1”控制“时”的调整,每按一次加1小时;按钮“SW2”控制“分”的调整,每按一次加1分钟;按钮“SW3”控制“秒”的调整,每按一次加1秒钟,按“SW4”启动数字钟从设定的时间开始计时。当按SW1、SW2或SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。

13.实验板上有4个发光二极管,与单片机的连接如右所示。编写流水灯的程

序,使4个发光二极管每隔1秒依次点亮(每次亮一个),要求每个发光二

极管逐渐..

点亮然后熄灭,再点亮下一个发光二极管。程序在实验板上调试通过。(提示:通过改变加在单片机引脚上脉冲的占空比来改变发光二极

管的亮度,可以在一个定时中断中点亮发光二极管,同时启动在另一个定

时中断,在该中断过程中关闭发光二极管,两个中断之间的时间间隔逐渐

加大,二极管就慢慢亮起来了。)(本题无法在Proteus 中仿真)

14.用Proteus 打开文件“流水灯.DSN ”,可以看到在单片机89C52的P2口接有8个发光二极管。编

写流水灯的程序,使8个发光二极管从左往右依次点亮(每次亮一个),当按一下按钮SW1并抬起后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水,如此反复。

15.用Proteus 打开文件“电子打铃器.DSN ”,编写程序实现定时打铃功能。要求如下:开机时显示

00.00.00 (时分秒),按钮“SW1”控制“时”的调整,每按一次加1小时;按钮“SW2”控制“分”的调整,每按一次加1分钟;按钮“SW3”控制“秒”的调整,每按一次加1秒钟,按“SW4”启动数字钟从设定的时间开始计时。当按SW1、SW2或SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。在程序中设定,8点10分00秒和8点20分00秒各打一次铃,打铃时间长度为10秒钟。图中用一发光二极管模拟电铃。程序调试时可将时间调到打铃前几秒再启动时钟。

16.用Proteus 打开文件“拨盘开关.DSN ”,可以看到图中有一个6位拨盘开关、六个发光二极管和

一个数码管。编写程序实现如下功能:当转动拨盘开关时,拨盘开关的编号显示在数码管上,同时点亮对应编号的发光二极管。

0 13 16 36 39 南北方向 东西方向 红灯亮16秒 绿灯亮20秒 黄灯亮3秒 绿灯亮13秒 黄灯亮3秒 红灯亮23秒 秒

17.用Proteus打开文件“流水灯.DSN”,可以看到在单片机89C52的P2口接有8个发光二极管。编写流水灯的程序,使8个发光二极管从左往右依次点亮,每次亮相邻两个,如先是D1、D2亮,然后是D2、D3亮,…… D7、D8亮,D8、D1亮,如此周而复始。当按一下按钮SW1后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水。

说明:用自己学号的最后四位数加题号作为源程序文件名,同时将自己的完整学号、班级、姓名、第几题等信息放在源程序的第一行,如1052号同学考第3题,其源程序文件名应为“1052_03.C”

(题号必须为两位数),源程序的第一行为:

/* 完整学号班级姓名第X题 */

程序要正确缩进,否则扣5分;

考试完毕,不要关闭开发环境MedWin和Proteus,不拆除实验板,千万不要关闭计算机。

1、简易电子琴参考答案:

//1--简易电子琴

#include

#define U8 unsigned char

#define key_port P3

code U8 kcode[]={0xEE,0xDE,0xBE,0xED,0xDD,0xBD,0xEB,0xDB,0xBB,0xE7,0xD7,0xB7}; //反转码对应键值 0 1 2 3 4 5 6 7 8 9 A B code unsigned int cyc[]={1800,1600,1440,1351,1200,1079,960};//音阶1-7的半周期数U8 H0,L0,cnt,err;

void cntint0(void) interrupt 1 // 定时器0中断用于产生音阶方波

{ TH0=H0;

TL0=L0;

P2_0=~P2_0; // P2.3是音乐信号输出脚,P2.3反相,产生方波

}

void cntint1(void) interrupt 3 // 定时器1中断用于产生节拍延时或显示

{ cnt++;

}

void delay_ms(U8 ms)

{ U8 i,j;

for(i=0;i<100;i++)

{ for(j=0;j

};

}

U8 key(void)

{ U8 a,r;

delay_ms(20); // 延时20毫秒,消除按键抖动

if(key_port == 0xf0) goto rn;

a = key_port;

key_port = a | 0x0f;

delay_ms(20);

a = key_port;

for (r = 0;r <= 11;r++)

{ if(a == kcode[r]) break;};

if(r > 11) r = 0xff; //0xff表示无效

rn: key_port = 0xf0;

return r;

}

void main(void)

{ U8 i,k,a;

unsigned int b;

TMOD=0x11;

EA=1;

ET0=1;

ET1=1;

cnt=0;

TR1=1;

i=0;

key_port = 0xf0;

delay_ms(20);

while(1)

{

if (key_port != 0xf0)

{ delay_ms(20);

k = key();

if ((k<8)&&(k>0))

{ err=0;

TR0=0;

P2=0xff; // 关闭显示

b=cyc[k-1]; // 根据基本音阶,求出半周期数

H0=(65536-b)/256; // 根据半周期数,计算T0初值的高字节和低字节

L0=(65536-b)%256;

TR0=1; // 启动定时器0发音

while(key_port != 0xf0);

delay_ms(20);

TR0=0;

while(key_port != 0xf0);

}

}

}

}

2、参考答案:

//2-用Proteus打开文件"计算器.DSN",当按下键盘上的0~F十六个键时,能将键值以十六进制形式在四个

// 数码管上滚动显示。

#include

#define U8 unsigned char

#define key_port P3

U8 code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; code U8 kcode[]={0xEE,0xDE,0xBE,0x7E,0xED,0xDD,0xBD,0x7D,0xEB,0xDB,0xBB,0x7B,0xE7,0xD7,0xB7,0x77};

//反转码对应键值 0 1 2 3 4 5 6 7 8 9 A B C D E F

U8 scn[]={0xf7,0xfb,0xfd,0xfe};// 先点亮左边一个数码管

U8 buf[4]={0,0,0,0};// 显示缓冲区,开机先显示"0000"

U8 cnt = 0; // 扫描计数

void delay_ms(U8 ms)

{ U8 i,j;

for(i=0;i<100;i++)

{ for(j=0;j

}

U8 key(void)

{ U8 a,r = 0xff;

delay_ms(20); // 延时20毫秒,消除按键抖动

if(key_port == 0xf0) goto rn;

a = key_port;

key_port = a | 0x0f;

delay_ms(20);

a = key_port;

for (r = 0;r <= 15;r++)

{ if(a == kcode[r]) break;};

if(r > 15) r = 0xff; //0xff表示无效

rn: key_port = 0xf0;

return r;

}

void main(void)

{ U8 k,i;

EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

while(1)

{ if (key_port != 0xf0)

{ k = key();

if (k < 16)

{ for(i=1;i<=3;i++) buf[i-1]=buf[i];// 数字左移一位

buf[3] = k; // 在个位显示刚按的数字

while(key_port != 0xf0);// 等待按键抬起

delay_ms(20);

while(key_port != 0xf0);

}

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

P0 = tab[buf[i]]; // 笔划代码送P0口

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

}

3、参考答案

/*3、用Proteus打开文件"频率计.DSN",图中,在单片机的外部中断0脚INT0接有一个脉冲信号源,编写程序实现一个频率计的功能,能够测定该脉冲信号源的频率。程序调试时可以修改信号源的频率,看测量值与设定值有多大的差距,仿真时一般误差在10%内就算正常。修改信号源频率的方法是,右击信号源图标后再左击,打开信号源的属性对话框,在其中修改其频率(frequncy),不要改变其它属性值,频率可以在1Hz 到10000Hz之间设定。(提示:可以设置一个外部中断0的中断服务程序,每次中断时给某个变量加一;

再设计一个定时器中断服务程序,用于计时。每秒钟读一次脉冲数,并将其清零,然后将脉冲数显示在数码管上,每秒钟内的脉冲数就是频率。)

*/

#include

#define U8 unsigned char

U8 code tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};

U8 code scn[]={0x7f,0xbf,0xdf,0xef};//先点亮左边一个数码管

U8 buf[4]={0,0,0,0};// 显示缓冲区

U8 cnt = 0; // 扫描计数

unsigned int freq = 0;

unsigned int F;

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

PX0 = 1; // 外部中断优先级高

EX0 = 1; // 允许外部中断

IT0 = 1; // 外部中断下降沿触发

while(1);

}

void exint0(void) interrupt 0 // 外部中断0 服务程序

{ freq++;

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

P0 = tab[buf[i]]; // 笔划代码送P0口

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

if(cnt==200)

{ cnt=0; // 到1秒钟,显示的数字加一

F = freq; freq = 0;

buf[0] = F / 1000;

buf[1] = (F / 100) % 10;

buf[2] = (F / 10) % 10;

buf[3] = F % 10;

}

}

4、参考答案

//4-用Proteus打开文件"电子秒表.DSN",开机时显示00.00,单位是秒,精确到10毫秒,

// 按"SW1"键启动或暂停,在暂停时按"SW2"键时间清零。计时超过99.99秒以后,显示(Over)。#include

#define U8 unsigned char

U8 code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC1,0x86,0xAF};

// 0 1 2 3 4 5 6 7 8 9 V E r

U8 scn[]={0xf7,0xfb,0xfd,0xfe};// 先点亮左边一个数码管

U8 buf[4]={0,0,0,0};// 显示缓冲区,开机先显示"0000"

U8 cnt = 0; // 扫描计数

bit Run = 0;

bit Stop = 0;

void delay_ms(U8 ms)

{ U8 i,j;

for(i=0;i<100;i++)

{ for(j=0;j

}

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

while(1)

{ if(P3_0 == 0 || P3_3 == 0)

{ delay_ms(20);

if(P3_0 == 0 && Stop == 0)

{ if(Run == 0) Run = 1;

else Run = 0;

}

if(P3_3 == 0 && Run == 0)

{ buf[0] = 0 ;buf[1] = 0;

buf[2] = 0 ;buf[3] = 0;

Stop = 0;

}

while(P3_0 == 0 || P3_3 == 0);// 等待按键抬起

delay_ms(20);

while(P3_0 == 0 || P3_3 == 0);

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

if(buf[0]==9 && buf[1]==9 && buf[2]==9 && buf[3]==9)

{ buf[0]=0; buf[1]=10; buf[2]=11; buf[3]=12;

Run = 0;Stop = 1;

}

if(Run==1 && (cnt&1)==1 && Stop == 0)

{ for(i=3;i>=0;i--)

{ buf[i]++;

if(buf[i]==10) buf[i]=0;// 加到10向前进位

else break;

}

}

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

if(i==1 && Stop == 0) P0 = tab[buf[i]] & 0x7f; // 笔划代码送P0口

else P0 = tab[buf[i]];

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

}

5、参考答案

/*5.用Proteus打开文件"播放音乐.DSN",按图设计一个开机就能播放康定情歌的程序,并将其简谱在数码管上同步滚动显示。此程序也可以下载到实验板上运行。

*/

#include

#define U8 unsigned char

bit sn;

code U8 tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0x64,0x37,0x23,0x7f,0xff}; // 0 1 2 3 4 5 6 7 8 9 E n d - 无显示code U8 scn[]={0x7f,0xbf,0xdf,0xef};//先点亮左边一个数码管

U8 buf[4]={14,14,14,14};// 显示缓冲区,开机不显示

code unsigned int cyc[]={1800,1600,1440,1351,1200,1079,960};//音阶1-7的半周期数

code U8 tone[]={13,15,16,16,15,16,13,12,12,13,15,16,16,15,16,13,13, 13,15,16,

16,15,16,13,12,12,15,13,12,13,12,11,12,6,6,12,15,13,12,6,6,15,13,12,13,12,11,

12,6,5,6,0xff};// 乐曲《康定情歌》的简谱表

code U8 time[]={8,8,8,4,4,8,8,12,4,8,8,8,4,4,8,16,8,8,8,8,4,4,8,8,12,4,8,8,4,4,

4,4,8,24,8,24,8,24,8,16,8,8,8,4,4,4,4,8,16,8,32};// 《康定情歌》的节拍表

U8 H0,L0,cnt=0,tm=0,sd=0;

void cntint0(void) interrupt 1 // 定时器0中断用于产生音阶方波

{ TH0=H0;

TL0=L0;

P2_3 = sd & 1; // P2.3是音乐信号输出脚

sn = sd & 1; // 记住P2.3脚的状态

sd++;

}

void cntint1(void) interrupt 3 // 定时器1中断用于产生节拍延时

{ char i,k;

EA = 1;

TH1 = 0xee; // 设置定时器时间常数

TL1 = 0;

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

P0 = tab[buf[i]]; // 笔划代码送P0口

k = scn[i];

if(sn == 0) k=k&0xf7;//恢复P2.3脚的状态

P2 = k; // 控制扫描码送P2口

cnt++;

if(cnt>11)

{ cnt=0;

tm++;

}

}

void main(void)

{ U8 i,j,a,t;

unsigned int b;

next:TMOD=0x11;

EA = 1;

ET1 = 1;

TR1 = 1;

PT0 = 1;

ET0 = 1; // 定时器0中断允许

TH1 = 0xee; // 晶振11.0592MHz,5mS

TL1 = 0;

i=0;

while(1)

{ t=tone[i]; // 读音调

for(j=0;j<3;j++)

{ buf[j]=buf[j+1];

}

buf[3]=t%10;

if(t>50) break; // 0xff是结束符

if(t!=0) // 0 是休止符

{ b=cyc[t%10-1]; // 根据基本音阶,求出半周期数

if(t<10) b=b*2; // 若是低八度音阶,半周期数加倍

if(t>20) b=b/2; // 若是高八度音阶,半周期数减半

H0=(65536-b)/256; // 根据半周期数,计算T0初值的高字节和低字节

L0=(65536-b)%256;

TR0=1; // 启动定时器0发音

}

tm=0;

cnt=0;

a=time[i]; // 读节拍

while(a>tm);

TR0=0;

i++;

for(b=0;b<1000;b++); // 稍加延时,增强节奏感

}

P2_3=1; // 关闭喇叭

buf[0]=10;

buf[1]=11;

buf[2]=12;

buf[3]=13;

while(P3_2==1); // 等待按INT键

goto next; // 重放一遍

}

6、参考答案

/*6..用Proteus打开文件"流水灯.DSN",可以看到在单片机89C52的P2口接有8个发光二极管。

编写流水灯的程序,使8个发光二极管每隔约0.5秒依次点亮(每次亮一个),要求开始时从左往右点亮,每按一次按钮SW1后,改变流水的方向。

*/

#include

#define U8 unsigned char

U8 code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

U8 cnt = 0; // 扫描计数

bit next = 0;

bit dri = 0;

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

P2 = 0xff;

while(1)

{ if(P3_2==0)

{ dri = !dri;

while(P3_2==0);

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ static char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

P2 = tab[i];

cnt++;

if(cnt==100)

{ cnt=0;

if(dri==0) i++;

else i--;

if(i<0) i = 7;

else if(i>7) i = 0;

}

}

7、参考答案

//7-用Proteus打开文件"计数器.DSN",当按下键盘上的0~9十个数字键时,

// 能将键值在四个数码管上滚动显示。若按了A~F六个字母键,则在数码管上显示(Over)。

#include

#define U8 unsigned char

#define key_port P3

U8 code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC1,0x86,0xAF};

// 0 1 2 3 4 5 6 7 8 9 V E r

U8 code kcode[]={0xEE,0xDE,0xBE,0x7E,0xED,0xDD,0xBD,0x7D,0xEB,0xDB,0xBB,0x7B,0xE7,0xD7,0xB7,0x77};

//反转码对应键值 0 1 2 3 4 5 6 7 8 9 A B C D E F

U8 scn[]={0xf7,0xfb,0xfd,0xfe};// 先点亮左边一个数码管

U8 buf[4]={0,0,0,0};// 显示缓冲区,开机先显示"0000"

U8 cnt = 0; // 扫描计数

void delay_ms(U8 ms)

{ U8 i,j;

for(i=0;i<100;i++)

{ for(j=0;j

}

U8 key(void)

{ U8 a,r = 0xff;

delay_ms(20); // 延时20毫秒,消除按键抖动

if(key_port == 0xf0) goto rn;

a = key_port;

key_port = a | 0x0f;

delay_ms(20);

a = key_port;

for (r = 0;r <= 15;r++)

{ if(a == kcode[r]) break;};

if(r > 15) r = 0xff; //0xff表示无效

rn: key_port = 0xf0;

return r;

}

void main(void)

{ U8 k,i;

EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

while(1)

{ if (key_port != 0xf0)

{ k = key();

if (k < 10)

{ for(i=1;i<=3;i++) buf[i-1]=buf[i];// 数字左移一位

buf[3] = k; // 在个位显示刚按的数字

}

else if(k<16)

{ buf[0] = 0 ;buf[1] = 10;

buf[2] = 11;buf[3] = 12;

}

while(key_port != 0xf0);// 等待按键抬起

delay_ms(20);

while(key_port != 0xf0);

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

P0 = tab[buf[i]]; // 笔划代码送P0口

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

}

8、参考答案

//8-用Proteus打开文件"电子秒表.DSN",开机时显示00.00,单位是分.秒,按"SW1"键启动/暂停计时,// 在暂停状态按"SW2"键时分清零。在计时状态分和秒之间的小数点闪烁(每秒钟亮半秒,熄半秒),

// 暂停状态常亮。

#include

#define U8 unsigned char

U8 code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC1,0x86,0xAF};

// 0 1 2 3 4 5 6 7 8 9 V E r

U8 scn[]={0xf7,0xfb,0xfd,0xfe};// 先点亮左边一个数码管

U8 buf[4]={0,0,0,0};// 显示缓冲区,开机先显示"0000"

U8 cnt = 0; // 扫描计数

bit Run = 0;

bit Stop = 0;

void delay_ms(U8 ms)

{ U8 i,j;

for(i=0;i<100;i++)

{ for(j=0;j

}

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

while(1)

{ if(P3_0 == 0 || P3_3 == 0)

{ delay_ms(20);

if(P3_0 == 0 && Stop == 0)

{ if(Run == 0) Run = 1;

else Run = 0;

}

if(P3_3 == 0 && Run == 0)

{ buf[0] = 0 ;buf[1] = 0;

buf[2] = 0 ;buf[3] = 0;

Stop = 0;

}

while(P3_0 == 0 || P3_3 == 0);// 等待按键抬起

delay_ms(20);

while(P3_0 == 0 || P3_3 == 0);

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

unsigned char c;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

c = tab[buf[i]];

if(i==1 && Stop == 0 && (Run == 0 || cnt<100)) c = c & 0x7f; // 笔划代码送P0口P0 = c;

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

if(Run==1 && Run==1 && Stop == 0 && cnt==200)

{ buf[3]++;if(buf[3]<10) return;

buf[3]=0;buf[2]++;if(buf[2]<6) return;

buf[2]=0;buf[1]++;if(buf[1]<10) return;

buf[1]=0;buf[0]++;if(buf[2]<6) return;

buf[0] = 0;

cnt = 0;

}

}

9、定时关灯控制器参考答案

//9--用Proteus打开文件"定时关灯控制器.DSN",按图编写程序设计一个定时关灯控制器。

// 从键盘输入时间(单位:秒,最大9999秒,最小1秒),按一下A键灯亮,时间每秒减1, // 减到0时停止,灯熄灭,可以再次输入时间并启动。

#include

#define U8 unsigned char

#define key_port P1

bit run = 0;

sbit Lamp = P3^7;

code U8 kcode[]={0xb7,0xbe,0xde,0xee,0xbd,0xdd,0xed,0xbb,0xdb,0xeb,0xd7,0xe7};

//反转码对应键值 0 1 2 3 4 5 6 7 8 9 A B

code U8 disp[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0xff};

U8 buf[4]={0,0,0,0};

U8 cnt=0;

U8 scn[]={0x7f,0xbf,0xdf,0xef};// 先点亮左边一个数码管

void delay_ms(U8 ms)

{ U8 i,j;

for(i=0;i<100;i++)

{ for(j=0;j

}

U8 key(void)

{ U8 a,r=0xff;

delay_ms(20); // 延时20毫秒,消除按键抖动

if(key_port == 0xf0) goto rn;

a = key_port;

key_port = a | 0x0f;

delay_ms(20);

a = key_port;

for (r = 0;r <= 11;r++)

{ if(a == kcode[r]) break;};

if(r > 11) r = 0xff; //0xff表示无效

rn: key_port = 0xf0;

return r;

}

void main(void)

{ U8 k,i;

TMOD = 0x01; // 设定时器0为模式1(16位)

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

EA = 1; // 允许中断

ET0 = 1; // 定时器0中断允许

key_port = 0xf0;

Lamp = 1; // 清除加号标志

delay_ms(20);

while(1) // 循环

{ if (key_port != 0xf0)

{ k = key();

if (k < 10)

{ if(run == 0)

{ for(i=1;i<=3;i++) buf[i-1]=buf[i];// 数字左移一位

buf[3] = k;// 在个位显示刚按的数字

}

}

else

{ if(k == 10){ run = 1; Lamp = 0;}

}

while(key_port != 0xf0);// 等待按键抬起

delay_ms(20);

while(key_port != 0xf0);

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

P0 = disp[buf[i]]; // 笔划代码送P0口

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

if(cnt==200)

{ cnt = 0;

if(buf[0]+buf[1]+buf[2]+buf[3]==0)

{ run = 0; Lamp = 1; return;

}

if(run==1)

for(i=3;i>=0;i--)

{ buf[i]--;

if(buf[i]>9) buf[i] = 9;

else break;

}

}

}

10、参考答案

/*10--用Proteus打开文件"交通信号灯.DSN",编程实现时间倒计时及绿黄红三色灯的切换。切换方式为:南北方向:红灯R1亮15秒,绿灯G1亮20秒,黄灯Y1亮2秒

东西方向:绿灯G2亮13秒,黄灯Y2亮2秒,红灯R2亮22秒

如此周而复始。(提示:图中数码管与单片机之间的连接方式与实验指导书中相同)

*/

#include

#define U8 unsigned char

U8 code tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};

U8 code scn[]={0x7f,0xbf,0xdf,0xef};//先点亮左边一个数码管

U8 buf[4]={0,0,0,0};// 显示缓冲区

U8 cnt = 0; // 扫描计数

const R1=16,G1=20,Y1=3;

const R2=23,G2=13,Y2=3;

U8 N1,N2;

bit sec = 0;

U8 tim = 0;

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

while(1)

{

if(tim==0 ){ P3 = 0xEB; N1 = R1;N2 = G2;}

if(tim==13){ P3 = 0xDB; N2 = Y2;}

if(tim==16){ P3 = 0xBE; N1 = G1;N2 = R2;}

if(tim==36){ P3 = 0xED; N1 = Y1;}

if(tim==38){ tim = 0xff;}

buf[0] = N1 / 10; buf[1] = N1 % 10;

buf[2] = N2 / 10; buf[3] = N2 % 10;

while(sec==0);

tim++; sec = 0;

N1--; N2--;

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)

P0 = tab[buf[i]]; // 笔划代码送P0口

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

if(cnt==200)

{ cnt=0;sec=1; // 到1秒钟,置一秒标志

}

}

11、参考答案

//11. 用Proteus打开文件"多路开关指示.DSN",可以看到图中有八个按钮、八个发光二极管和一个数码管。// 编写程序实现如下功能:当按一下某一按钮时,该按钮的编号显示在数码管上,同时点亮对应编号的// 发光二极管。

#include

#define U8 unsigned char

U8 code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

void main(void)

{ U8 i,a,b;

P2 = 0xff; P3 = 0xff;

while(1)

{ if(P3!=0xff)

{ a = P3;

a = ~a;

b = a;

for(i=0;i<8;i++)

{ if((a & 1)==1) break;

a = a >> 1;

}

P0 = tab[i+1];

a = b;

b = 0;

for(i=0;i<8;i++)

{ b = b << 1;

if((a & 1)==1) b = b | 1;

a = a >> 1;

}

P2 = ~b;

while(P3!=0xff);

}

}

}

12、参考答案

/*12. 用Proteus打开文件"数字钟.DSN",编写程序实现如下功能:开机时显示00.00.00 (时分秒), 按钮"SW1"控制"时"的调整,每按一次加1小时;按钮"SW2"控制"分"的调整,每按一次加1分钟;

按钮"SW3"控制"秒"的调整,每按一次加1秒钟,按"SW4"启动数字钟从设定的时间开始计时。

当按SW1、SW2或SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。

*/

#include

#define U8 unsigned char

U8 code tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};

U8 code scn[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//先点亮左边一个数码管

U8 buf[]={0,0,0,0,0,0};// 显示缓冲区,开机先显示"00.00.00"

U8 cnt = 0; // 扫描计数

U8 Hour = 0;Min = 0;Sec = 0;

bit run = 0;

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

P3 = 0xff;

while(1)

{ if(P3!=0xff)

{ run = 0;

if(P3==0xef) Hour++;

if(P3==0xdf) Min++;

if(P3==0xbf) Sec++;

if(P3==0x7f) run = 1;

while(P3!=0xff);

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

if(Sec==60){ Sec = 0; Min++;}

if(Min==60){ Min = 0; Hour++;}

if(Hour==24) Hour = 0;

buf[0] = Hour / 10; buf[1] = Hour % 10;

buf[2] = Min / 10; buf[3] = Min % 10;

buf[4] = Sec / 10; buf[5] = Sec % 10;

i = cnt % 6;

if(i==1 || i==3) P0 = tab[buf[i]] & 0xdf;

else P0 = tab[buf[i]]; // 笔划代码送P0口

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

if(cnt==200)

{ cnt=0; // 到1秒钟,显示的数字加一

if(run==0) return;

Sec++;

}

}

13、参考答案

/*13.用Proteus打开文件"流水灯.DSN",可以看到在单片机89C52的P2口接有8个发光二极管。

编写流水灯的程序,使8个发光二极管每隔1秒依次点亮(每次亮一个),要求每个发光二极管点亮后逐渐熄灭,然后再点亮下一个发光二极管。(提示:通过改变加在单片机引脚上脉冲的占空比来改变发光二极管的亮度)

*/

#include

#define U8 unsigned char

U8 code tab[] = {0xef,0xdf,0xbf,0x7f};

U8 cnt = 0; // 扫描计数

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

ET1 = 1;

while(1);

}

void timeint0(void) interrupt 1

{ static char i;

TH0 = 0xee;

TL0 = 0;

cnt++;

P3 = tab[i];

TH1 = 255 - cnt/12;

TL1 = 0;TR1 = 1;

if(cnt==200)

{ cnt=0;i++;i = i & 3;

}

}

void timeint1(void) interrupt 3

{ P3 = 0xff;

TR1 = 0;

}

14、参考答案

/*14.用Proteus打开文件"流水灯.DSN",可以看到在单片机89C52的P2口接有8个发光二极管。

编写流水灯的程序,使8个发光二极管从左往右依次点亮(每次亮一个),当按一下按钮

SW1并抬起后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水,如此反复。

*/

#include

#define U8 unsigned char

U8 code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

U8 cnt = 0; // 扫描计数

bit p = 0;

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

P2 = 0xff;

while(1)

{ if(P3_2==0)

{ p = !p;

while(P3_2==0);

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ static char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

P2 = tab[i];

cnt++;

if(cnt==100)

{ cnt=0;

if(p==0)

{ i++;

if(i>7) i = 0;

}

}

}

15、参考答案

/*15.用Proteus打开文件"电子打铃器.DSN",编写程序实现定时打铃功能。要求如下:开机时显示00.00.00 (时分秒),按钮"SW1"控制"时"的调整,每按一次加1小时;

按钮"SW2"控制"分"的调整,每按一次加1分钟;按钮"SW3"控制"秒"的调整,

每按一次加1秒钟,按"SW4"启动数字钟从设定的时间开始计时。当按SW1、SW2或

SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。在程序中设定,8点10分

00秒和8点20分00秒各打一次铃,打铃时间长度为10秒。图中用一发光二极管模拟电铃。*/

#include

#define U8 unsigned char

U8 code tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};

U8 code scn[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//先点亮左边一个数码管

U8 buf[]={0,0,0,0,0,0};// 显示缓冲区,开机先显示"00.00.00"

U8 cnt = 0; // 扫描计数

U8 Hour = 0;Min = 0;Sec = 0;

bit run = 0;

bit bell = 0;

U8 bellcnt = 0;

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

P3 = 0xff;

while(1)

{ if(P3!=0xff)

{ run = 0;

if(P3==0xef) Hour++;

if(P3==0xdf) Min++;

if(P3==0xbf) Sec++;

if(P3==0x7f) run = 1;

while(P3!=0xff);

}

if(Sec==0 && Min==10 && Hour==8) { bell = 1; P1_0 = 0;}

if(Sec==0 && Min==20 && Hour==8) { bell = 1; P1_0 = 0;}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

if(Sec==60){ Sec = 0; Min++;}

if(Min==60){ Min = 0; Hour++;}

if(Hour==24) Hour = 0;

buf[0] = Hour / 10; buf[1] = Hour % 10;

buf[2] = Min / 10; buf[3] = Min % 10;

buf[4] = Sec / 10; buf[5] = Sec % 10;

i = cnt % 6;

if(i==1 || i==3) P0 = tab[buf[i]] & 0xdf;

else P0 = tab[buf[i]]; // 笔划代码送P0口

P2 = scn[i]; // 控制扫描码送P2口

cnt++;

if(cnt==200)

{ cnt=0; // 到1秒钟,显示的数字加一

if(run==0) return;

Sec++;

if(bell==1)

{ bellcnt++;

if(bellcnt>9)

{ P1_0 = 1;

bell = 0;

bellcnt = 0;

}

}

}

}

16、参考答案

* 16.用Proteus打开文件"拨盘开关.DSN",可以看到图中有一个6位拨盘开关、六个发光二极管和一个数码管。编写程序实现如下功能:当转动拨盘开关时,拨盘开关的编号显示在数码管上,同时点亮对应编号的发光二极管。

*/

#include

#define U8 unsigned char

code U8 kcode[]={0x00,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

//对应拨盘键值 0 1 2 3 4 5 6

code U8 disp[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd};

code U8 tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

U8 key(void)

{ U8 a,r = 0xff;

a = P3;

for (r = 1;r <= 6;r++)

{ if(a == kcode[r]) break;};

if(r > 6) r = 0xff; //0xff表示无效

return r;

}

void main(void)

{ U8 k;

while(1)

{ k = key();

if (k < 7)

{ P0 = tab[k];

P2 = disp[k-1];

}

}

}

17、参考答案

/*17.用Proteus打开文件"流水灯.DSN",可以看到在单片机89C52的P2口接有8个发光二极管。

编写流水灯的程序,使8个发光二极管从左往右依次点亮,每次亮相邻两个,如先是D1、D2亮,然后是D2、D3亮,…… D7、D8亮,D8、D1亮,如此周而复始。当按一下按钮SW1后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水。

*/

#include

#define U8 unsigned char

U8 code tab[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7e};

U8 cnt = 0; // 扫描计数

bit p = 0;

void main(void)

{ EA = 1; // 允许中断

TMOD = 0x01; // 设定时器0为模式1(16位)

ET0 = 1; // 定时器0中断允许

TH0 = 0xee; // 晶振11.0592MHz,5mS

TL0 = 0;

TR0 = 1; // 开始计数

P2 = 0xff;

while(1)

{ if(P3_2==0)

{ p = !p;

while(P3_2==0);

}

}

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ static char i;

TH0 = 0xee; // 设置定时器时间常数

TL0 = 0;

P2 = tab[i];

cnt++;

if(cnt==100)

{ cnt=0;

if(p==0)

{ i++;

if(i>7) i = 0;

}

}

}

单片机原理及应用习题答案 第三版

第一章习题参考答案 1-1:何谓单片机?与通用微机相比,两者在结构上有何异同? 答:将构成计算机的基本单元电路如微处理器(CPU)、存储器、I/O接口电路与相应实时控制器件等电路集成在一块芯片上,称其为单片微型计算机,简称单片机。 单片机与通用微机相比在结构上的异同: (1)两者都有CPU,但通用微机的CPU主要面向数据处理,其发展主要围绕数据处理功能、计算速度与精度的进一步提高。例如,现今微机的CPU都支持浮点运算,采用流水线作业,并行处理、多级高速缓冲(Cache)技术等。CPU的主频达到数百兆赫兹(MHz),字长普遍达到32位。单片机主要面向控制,控制中的数据类型及数据处理相对简单,所以单片机的数据处理功能比通用微机相对要弱一些,计算速度与精度也相对要低一些。例如,现在的单片机产品的CPU 大多不支持浮点运算,CPU还采用串行工作方式,其振荡频率大多在百兆赫兹范围内;在一些简单应用系统中采用4位字长的CPU,在中、小规模应用场合广泛采用8位字长单片机,在一些复杂的中、大规模的应用系统中才采用16位字长单片机,32位单片机产品目前应用得还不多。 (2) 两者都有存储器,但通用微机中存储器组织结构主要针对增大存储容量与CPU对数据的存取速度。现今微机的内存容量达到了数百兆字节(MB),存储体系采用多体、并读技术与段、页等多种管理模式。单片机中存储器的组织结构比较简单,存储器芯片直接挂接在单片机的总线上,CPU对存储器的读写按直接物理地址来寻址存储器单元,存储器的寻址空间一般都为64 KB。 (3) 两者都有I/O接口,但通用微机中I/O接口主要考虑标准外设(如CRT、标准键盘、鼠标、打印机、硬盘、光盘等)。用户通过标准总线连接外设,能达到即插即用。单片机应用系统的外设都就是非标准的,且千差万别,种类很多。单片机的I/O接口实际上就是向用户提供的与外设连接的物理界面。用户对外设的连接要设计具体的接口电路,需有熟练的接口电路设计技术。 另外,单片机的微处理器(CPU)、存储器、I/O接口电路集成在一块芯片上,而通用微机的微处理器(CPU)、存储器、I/O接口电路一般都就是独立的芯片 1-4 IAP、ISP的含义就是什么? ISP:In System Programable,即在系统编程。用户可以通过下载线以特定的硬件时序在线编程(到单片机内部集成的FLASH上),但用户程序自身不可以对内部存储器做修改。 IAP:In Application Programable,即在应用编程。用户可以通过下载线对单片机进行在线编程,用户程序也可以自己对内部存储器重新修改。 1-6 51单片机与通用微机相比,结构上有哪些主要特点? (1)单片机的程序存储器与数据存储器就是严格区分的,前者为ROM,后者为RAM; (2)采用面向控制的指令系统,位处理能力强; (3)I/O引脚通常就是多功能的; (4) 产品系列齐全,功能扩展性强; (5) 功能就是通用的,像一般微处理机那样可广泛地应用在各个方面。 1-7 51单片机有哪些主要系列产品? (1)Intel公司的MCS-51系列单片机:功能比较强、价格比较低、较早应用的单片机。 此系列三种基本产品就是:8031/8051/8751; (2)ATMEL公司的89系列单片机:内含Flash存储器,开发过程中可以容易地进行程

行政职业能力测试题库

行政职业能力测试题库 在职场上,每个人都在追求自己的梦想,而你恰好在这追求的路途中比你更胜一筹。下面是X收集整理关于职业测试的资料,希望大家喜欢。 职业测试篇一 异性同事过生日,你利用微信为他送上祝福,你最有可能会发以下哪种内容呢? A、输入文字:“生日快乐!” B、输入文字:“生快!” C、用语音说:“祝你生日快乐!” D、用语音说:“happybirthday!” 测试答案: A、同事会借用你的人脉 你本来对人性啊、人际啊没有兴趣,本身也比较乐观开朗,和谁相处都很“在行”,既能发现别人身上的乐趣,又能轻易忽略和原谅别人的缺点错误,即使谈恋爱结婚也可以完全不在乎对方的个性是否跟自己相匹配,只要看到人家顺眼,和你感情好那就OK没得说。 B、同事会借用你的融合力 你有很强的“融合力”,即使和你完全两个国家的,也能

把你拉到自己的世界里,弄得人家也分不清谁是客谁是主了。再说你的个性本来就很综合,所以谁和你在一起都给你来个“理解万岁”。 C、同事借用你的一切能力 你本身也不爱出头,私下里结交的朋友各式各样,亲密的关系不多,亲密关系的人也想不到这个人什么时候认识了那么多天南海北牛头马面式的大小人物,可能别人觉得很了不起了,你呢,却是“一般一般”,毫不在意!“平民精神”十足。 D、你可以借用同事的能力才对 你个性多面化,好奇心又作怪,就是神仙乞丐他也会抽出空去认识一下,能结交的朋友都不放过大家都不介意多这一个“开心宝”,自然你的人际也处处都是路啦。 职业测试篇二 假如你打算和朋友外出旅行,用美好的阳光和舒适的心情来扫空心里的阴霾。当你们来到了度假地,你会选择下面哪一间旅馆来作为你们的休息点呢? A、视野绝佳的小木屋 B、世界著名的观光饭店 C、充满乡村气息的小旅馆 D、装饰考究的欧式酒店 E、装饰简单整洁的家庭旅馆

单片机原理与应用教程第3版习题课后答案

《单片机原理及应用程序》(第三版)习题参考答案 第一章 1. 为什么计算机要采用二进制数?学习十六进制数的目的是什么? 在计算机中,由于所采用的电子逻辑器件仅能存储和识别两种状态的特点,计算机部一切信息存储、处理和传送均采用二进制数的形式。可以说,二进制数是计算机硬件能直接识别并进行处理的惟一形式。十六进制数可以简化表示二进制数。 2. (1) 01111001 79H (2) 0.11 0.CH (3) 01111001.11 79.CH (4) 11101010.101 0EA.AH (5)01100001 61H (6) 00110001 31H 3. (1) 0B3H (2)80H (3) 17.AH (4) 0C.CH 4. (1)01000001B 65 (2) 110101111B 431 5. (1) 00100100 00100100 00100100 (2) 10100100 11011011 11011100 (5) 10000001 11111110 11111111 6. 00100101B 00110111BCD 25H 7. 137 119 89 8.什么是总线?总线主要有哪几部分组成?各部分的作用是什么? 总线是连接计算机各部件之间的一组公共的信号线。一般情况下,可分为系统总线和外总线。 系统总线应包括:地址总线(AB)控制总线(CB)数据总线(DB) 地址总线(AB):CPU根据指令的功能需要访问某一存储器单元或外部设备时,其地址信

息由地址总线输出,然后经地址译码单元处理。地址总线为16位时,可寻址围为216=64K,地址总线的位数决定了所寻址存储器容量或外设数量的围。在任一时刻,地址总线上的地址信息是惟一对应某一存储单元或外部设备。 控制总线(CB):由CPU产生的控制信号是通过控制总线向存储器或外部设备发出控制命令的,以使在传送信息时协调一致的工作。CPU还可以接收由外部设备发来的中断请求信号和状态信号,所以控制总线可以是输入、输出或双向的。 数据总线(DB):CPU是通过数据总线与存储单元或外部设备交换数据信息的,故数据总线应为双向总线。在CPU进行读操作时,存储单元或外设的数据信息通过数据总线传送给CPU;在CPU进行写操作时,CPU把数据通过数据总线传送给存储单元或外设9.什么是接口电路? CPU与接口电路连接一般应具有哪些信号线?外部设备与接口电路连接一般应具有哪些信号线? CPU通过接口电路与外部输入、输出设备交换信息, 一般情况下,外部设备种类、数量较多,而且各种参量(如运行速度、数据格式及物理量)也不尽相同。CPU为了实现选取目标外部设备并与其交换信息,必须借助接口电路。一般情况下,接口电路通过地址总线、控制总线和数据总线与CPU连接;通过数据线(D)、控制线(C)和状态线(S)与外部设备连接。 10. 存储器的作用是什么?只读存储器和随机存储器有什么不同? 存储器具有记忆功能,用来存放数据和程序。计算机中的存储器主要有随机存储器(RAM)和只读存储器(ROM)两种。随机存储器一般用来存放程序运行过程中的中间数据,计算机掉电时数据不再保存。只读存储器一般用来存放程序,计算机掉电时信息不会丢失。 11.某存储器的存储容量为64KB,它表示多少个存储单元?64×1024 12. 简述微型计算机硬件系统组成。

单片机练习题标准答案

单片机练习题答案 一、填空题 1、若单片机振荡脉冲频率为6MHz时,一个机器周期为______2μs________。 2、AT89C51单片机的XTAL1和XTAL2引脚是___外接晶振或时钟__引脚。 3、定时器/计数器的工作方式3是指的将定时器/计数器T0 拆成两个独立的8位计数器。 4、若由程序设定RS1、RS0=01,则工作寄存器R0~R7的直接地址为__08~0FH____。 5、写出完成相应功能的汇编指令:将立即数11H送到R2____ MOV R2,#11H ____、使ACC.2置位____ SETB ACC.2__、使累加器的最低2位清零___ ANL A,#0FCH ___。 6、A/D转换的作用是将__模拟____量转为数字量。ADC0809是__8___位的A/D转换芯片。 7、8051的堆栈区一般开辟在用户RAM区的地址为30H~7FH。 8、所谓寻址,其实质就是__如何确定操作数的单元地址问题_。 9、若单片机振荡脉冲频率为12MHz时,一个机器周期为____1μs ______。 10、定时器中断请求发生在__计数溢出的时候_____。 11、中断响应时间是指__从中断请求发生直到被响应去执行中断服务程序所需的时间____。 12、通过CPU对I/O状态的测试,只有I/O已准备好时才能进行I/O传送,这种传送方 式称为____程序查询方式___。 13、在中断服务程序中现场保护和现场恢复期间,中断系统应处在__关中断__状态。 14、8051单片机的内部硬件结构包括了:中央处理器(CPU)、数据存储器(RAM)、程序存储器、和2个16位定时/计数器以及并行I/O口、串行口、中断控制系统、时钟电路、位处理器等部件,这些部件通过内部总线相连接。 15、MCS-51的堆栈只可设置在RAM的地址为30H~7FH,堆栈寄存器sp是8位寄存器。 16、MCS-51单片机的P0~P4口均是并行I/O口,其中的P0口和P2口除了可以进行数据的输入、输出外,通常还用来构建系统的数据总线和地址总线,在P0~P4口中,P0为真正的双相口,P1—P3为准双向口;P3口具有第二引脚功能。 17、若LED为共阳极接法(即负逻辑控制),则字符3的八段代码值(a->dot)应当为__0D__H。 18、MCS-51片内20H~2FH范围内的数据存储器,既可以__字节__寻址又可以位寻址。

单片机原理及应用习题答案 第三版

第一章习题参考答案 1-1:何谓单片机?与通用微机相比,两者在结构上有何异同? 答:将构成计算机的基本单元电路如微处理器(CPU)、存储器、I/O接口电路和相应实时控制器件等电路集成在一块芯片上,称其为单片微型计算机,简称单片机。 单片机与通用微机相比在结构上的异同: (1)两者都有CPU,但通用微机的CPU主要面向数据处理,其发展主要围绕数据处理功能、计算速度和精度的进一步提高。例如,现今微机的CPU都支持浮点运算,采用流水线作业,并行处理、多级高速缓冲(Cache)技术等。CPU的主频达到数百兆赫兹(MHz),字长普遍达到32位。单片机主要面向控制,控制中的数据类型及数据处理相对简单,所以单片机的数据处理功能比通用微机相对要弱一些,计算速度和精度也相对要低一些。例如,现在的单片机产品的CPU大多不支持浮点运算,CPU还采用串行工作方式,其振荡频率大多在百兆赫兹范围内;在一些简单应用系统中采用4位字长的CPU,在中、小规模应用场合广泛采用8位字长单片机,在一些复杂的中、大规模的应用系统中才采用16位字长单片机,32位单片机产品目前应用得还不多。 (2) 两者都有存储器,但通用微机中存储器组织结构主要针对增大存储容量和CPU对数据的存取速度。现今微机的内存容量达到了数百兆字节(MB),存储体系采用多体、并读技术和段、页等多种管理模式。单片机中存储器的组织结构比较简单,存储器芯片直接挂接在单片机的总线上,CPU对存储器的读写按直接物理地址来寻址存储器单元,存储器的寻址空间一般都为64 KB。 (3) 两者都有I/O接口,但通用微机中I/O接口主要考虑标准外设(如CRT、标准键盘、鼠

(完整版)行政职业能力测试题库数量关系练习题

行政职业能力测试题库:数量关系练习题 1.甲、乙两人都买了一个相同的信笺盒,里面装有信封和信纸,甲把盒中每个信封装1张信纸,结果用完了所有的信封,剩下了50张信纸;乙把每个信封装3张信纸,结果用完了盒中所有的信纸,而剩下50个信封。问一个信笺盒中共装有多少信封和信纸?( ) A.250 B.210 C.150 D.100 2.小张和小赵从事同样的工作,小张的效率是小赵的1.5倍。某日小张工作几小时后小赵开始工作,小赵工作了1小时之后,小张已完成的工作量正好是小赵的9倍。再过几个小时,小张已完成的工作量正好是小赵的4倍?( ) A.1 B.1.5 C.2 D.3 3.某市一体育场有三条同心圆的跑道,里圈跑道长1/5公里,中圈跑道长1/4公里,外圈跑道3/8公里。甲、乙、丙三人分别在里、中、外圈同一起跑线同时同向跑步。甲每小时跑3.5公里,乙每小时跑4公里,丙每小时5公里,问几小时后三人同时回到出发点?( ) A.8小时 B.7小时 C.6小时 D.5小时 4.甲乙两个乡村阅览室,甲阅览室科技类书籍数量的1/5相当于乙阅览室该类书籍的1/4,甲阅览室文化类书籍数量的2/3相当于乙阅览室该类书籍的1/6,甲阅览室科技类和文化类书籍的总量比乙阅览室两类书籍的总量多1000本,甲阅览室科技类书籍和文化类书籍的比例为20:1,问甲阅览室有多少本科技类书籍?( ) A.15000 B.16000 C.18000 D.20000

答案: 1、设信封有x个,那么信纸有x+50张,由题意得:(x-50)×3=x+50,解得x=100。所以信封和信纸之和为 100+(100+50)=250。故正确答案为A。 2、直接赋值,小赵效率为2,则小张效率为3。根据题意,小赵工作1小时,工作量为2,此时小张完成工作量 是小赵的9倍,因此此时小张已完成工作量为18。设经过n小时,小张完成的工作量是小赵的4倍,则有18+3n=4(2+2n),解得n=2。故正确答案为C。 3、上下桥距离相等,设上下桥距离均为S。则上桥所用的时间为t1=S/12,下桥所用的时间为t2=S/24;那么总时间为 t总=t1+t2,那么平均速度v=2S/t总=2S/(S/12+S/24)=16(公里)。故正确答案为B。 4、排列组合问题。假设原来有n个站台,增加后有m个站台,增加了A(m,2)-A(n,2)=26种票,所以有 (m-n)(m+n-1)=26。26只能拆分为2×13。所以m-n=2,m+n-1=13。解得m=8,n=6。故正确答案为A。 5、甲每小时跑3.5÷1/5=35/2圈,乙每小时跑4÷1/4=16圈,丙每小时跑5÷3/8=40/3圈。要使他们同时在出发点 相遇,一定使他们的圈数均为整数,三人同时回到出发点的时间必须是2和3的公倍数,故正确答案为C。 6、假设甲阅览室科技类书籍有20a本,文化类书籍有a本,则乙阅览室科技类书籍有16a本,文化类书籍有4a 本,由题意可得(20a+a)-(16a+4a)=1000,解得a=1000,则甲阅览室有科技类书籍20000本。故正确答案为D。 7、工程问题。甲做4小时、乙做6小时,共做196个①;甲做7小时、乙做3小时,共做208个②;由②得:甲做 14小时、乙做6小时,共做416个③;比较①和③,可得:甲每小时做零件(416-196)÷(14-4)=22(个),故乙每小时做零件(196-22×4)÷6=18(个)。故正确答案为C。 8、余数问题。解法一:由2人一排列队,最后一排缺1人,可知总人数是奇数,只有B项符合。解法二:由10 人一排列队,最后一排缺1人,可知总人数的尾数为9,只有B项符合。故正确答案为B。

单片机课后习题答案

单片机课后习题答案 1.89C51单片机内包含哪些主要逻辑功能部件? 答:80C51系列单片机在片内集成了以下主要逻辑功能部件: (l)CPU(中央处理器):8位(2)片内RAM:128B(3)特殊功能寄存器:21个(4)程序存储器:4KB (5)并行I/O口:8位,4个(6)串行接口:全双工,1个(7)定时器/计数器:16位,2个(8)片内时钟电路:1个 2.89C51的EA端有何用途? 答:/EA端接高电平时,CPU只访问片内flash Rom并执行内部程序,存储器。/EA端接低电平时,CPU只访问外部ROM,并执行片外程序存储器中的指令。/EA端保持高电平时,CPU执行内部存储器中的指令。 3.89C51的存储器分哪几个空间?如何区别不同空间的寻址? 答:ROM(片内ROM和片外ROM统一编址)(使用MOVC)(数据传送指令)(16bits地址)(64KB)片外RAM(MOVX)(16bits地址)(64KB)片内RAM (MOV)(8bits地址)(256B) 4.简述89C51片内RAM的空间分配。 答:片内RAM有256B,低128B是真正的RAM区,高128B是SFR(特殊功能寄存器)区。 5.简述布尔处理存储器的空间分配,片内RAM中包含哪些可位寻址单元。 答:片内RAM区从00H~FFH(256B) 其中20H~2FH(字节地址)是位寻址区对应的位地址是00H~7FH 6. 如何简捷地判断89C51正在工作? 答:用示波器观察8051的XTAL2端是否有脉冲信号输出(判断震荡电路工作是否正常?)ALE(地址锁存允许)(Address Latch Enable)输出是fosc的6分频 用示波器观察ALE是否有脉冲输出(判断8051芯片的好坏?) 观察PSEN(判断8051能够到EPROM 或ROM中读取指令码?) 因为/PSEN接外部EPROM(ROM)的/OE端子OE=Output Enable(输出允许) 7. 89C51如何确定和改变当前工作寄存器组? 答:PSW(程序状态字)(Program Status Word)中的RS1和RS0 可以给出4中组合,用来从4组工作寄存器组中进行选择PSW属于SFR(Special Function Register)(特殊功能寄存器) 9.读端口锁存器和“读引脚”有何不同?各使用哪种指令? 答:读锁存器(ANLP0,A)就是相当于从存储器中拿数据,而读引脚是从外部拿数据(如MOV A,P1这条指令就是读引脚的,意思就是把端口p1输入数据送给A)传送类MOV,判位转移JB、JNB、这些都属于读引脚,平时实验时经常用这些指令于外部通信,判断外部键盘等;字节交换XCH、XCHD算术及逻辑运算 ORL、CPL、ANL、ADD、ADDC、SUBB、INC、DEC控制转移CJNE、DJNZ

单片机试题及答案1

一、填空题 已知x的补码数10110111B,x的真值是___201D。 进制转换:134D=__10000110B;=______86H。 32K存储容量对应的地址范围从0000H-7FFFH_。 CPU与内存或I/O接口相连的系统总线通常由_控制总线__、数据总线__、地址总线___等三种信号组成。MCS-51单片机上电复位时PC=_0000_H,SP=_07_H;工作寄存器缺省采用第___________组,这组寄存器的地址范围是从______H~_____H。 MCS-51单片机系列有__5__个中断源,可分为___2__个优先级。上电复位时外部中断0__中断源的优先级别最高。 MCS-51单片机内部RAM共分为______2__个功能区,其高端128个字节的地址空间称为特殊功能寄存器_区,其中仅有________个字节有实际意义。 8255可编程芯片通常作为_并行接口_______扩展之用;8253可编程芯片通常作为_定时器_______扩展之用。8155可编程芯片通常作为_并行接口计数器和存储器______扩展之用;8279可编程芯片通常作为_键盘/显示控制器________扩展之用。 MCS-51 的并行I/O口信息有____读引脚________和____读锁存_________两种读取方法,读一改一写操作是针对并行I/O口内的锁存器进行的。 74LS273通常用来作为简单______输出__________接口扩展;而74LS244则常用来作为简单________输入_______接口扩展。 不带输入数据锁存器的D/A转换器,CPU必须通过______锁存或寄存__器件与D/A转换器传送数据;无三态输出功能的A/D转换器,应当通过_____三态___器件与CPU传送数据。 若用并行口来扩展一个有36只按键的行列式键盘,最少需__12_根I/O线。 74LS138是具有3个输入的译码器芯片,其输出作为片选信号时,最多可以选中___八_块芯片。 MCS-51单片机访问外存储器时利用_____ALE_______信号锁存来自_____P0_____口的低八位地址信号。在MCS-51系统中,当晶振频率采用12MHz时,一个机器周期等于_1__微秒。 8051的T0作为计数器用时,其计数频率不能超过晶振频率的___二十四分之一__。 二、选择题 通常所说的主机是指( C )。 (A)硬件和软件(B)CPU和磁盘存储器 (C)CPU和主存(D)运算器和控制器

单片机实验考核题目及答案

---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------

2018行政职业能力测试真题试卷(最新)

2018年公务员录用考试 行政职业能力测验试卷 第一部分数量关系 数理能力部分包括三种类型的题目(共25题)。 一、数字推理(1~5题):每道试题给出一组数字。其中缺少一项,要求仔细观察给出数宇的排列规律。然后在4个选项中选择出最符合题意的正确答案,使之符合该组数字的排列规律。 请开始答题: ,。 A. 2.3,4,52 3 ,,11 2 5 。 A. 63 4 B. 7 2 3 C. 8 D. 10 1 2 3.在等比数列中,已知首项为93,末项为13,则项数为。 A. 3 B. 4 C. 5 D. 6 4.21 2 ,1 2 5 , 9 10 ,, 1 2 。 A. 13 12 B. 11 17 C. 9 22 D. 7 27 5.红花映绿叶×夏=叶绿映花红,“红花映绿叶、夏”分别为数字。 A. 4、1、9、6、8、3 B. 2、1、9、7、3、4 C. 2、1、9、7、8、4 D. 1、2、9、8、7、3 第二部分言语理解与表达能力 言语理解与表达能力部分包括三种类型的题目(共25题)。 一、选词填空(26~35题):根据题意,从所给的词语中选出最恰当的词语填入空格内,从而使句子的意思表达得最准确。 【例题】天山绵延几千里,无论高山、深谷,无论苹原、森林,无论溪流、湖泊,处处有丰饶的物产,处处有的美景。 A. 蔓丽 B. 奇丽 C. 艳丽 D. 绚丽 【解答】用“奇丽”(即答案B)使句子的意思表达的最连贯、最准确。 请开始答题: 26. 下面各句在横线处应须加“的”字的一组是。 (1)为实施西部大开发战略,加快当地经济发展,国家将在西部新建十大工程。

(2)天文学家在太阳系外共发现28颗行星,它们存在是通过间接渠道推断出来的。 (3)风险投资的注入可以使你钱袋立即充盈,有实力去市场拼抢厮杀谋求发展。 (4)他有“乒坛黑马”之称,具备快、灵、狠的特点,是欧亚高手取胜最大障碍。 A. (1)(2) B. (2)(4) C. (3)(4) D. (1)(3) 27. “春雨断桥无渡,小舟撑出绿阴来。” A. 愁 B. 恰 C. 叹 D. 人 28. 下列依次填入各句横线处的成语,最正确的一组是。 (1)黄老师的教学语言诙谐幽默,妙趣横生,常常逗得大家。 (2)安全检查工作非常重要,要,不应麻痹大意,一旦出了事故,后悔也就来不及了。 A. 破涕为笑防患未然 B. 破涕为笑防微杜渐 C. 捧腹大笑防微杜渐 D. 捧腹大笑防患未然 29. 下列依次填入横线处的词语,恰当的一组是。 要坚持权为民所,情为民所,利为民所,倾听群众呼声, 反映群众愿望,关心群众疾苦,多为群众办好事、办实事。 A. 用,系,谋,真诚,真实,真情 B. 谋,系,用,真诚,真实,真情 C. 用,系,谋,真心,真诚,真实 D. 用,系,谋,真实,真心,真诚 30. 下列依次填入横线处的词语,恰当的一组是。 (1)进入这个单位后,他勤奋工作,每次都保持保量地完成任务,很快就得到了领导及同事的。 (2)由于父亲是美国人,母亲是韩国人,比起其他同年龄的中学生来说,她很难自我。 A. 认同,认可 B. 赞同,认识 C. 认可,认同 D. 赞同,认同 31. 下列依次填入横线处的词语,恰当的一组是。 吾平生未尝以吾所志语汝,是吾不是处;语之,恐汝日日为吾担忧。吾牺牲百死而不辞,而使汝担忧,的的非吾所忍。吾爱汝至,为汝谋者惟恐未尽。汝幸而偶我,又何不幸而生今日之中国!吾幸而得汝,又何不幸而生今日之中国!不忍独善其身。嗟夫!巾短情长,所未尽者,尚有万千,汝可以模拟得之。 A. 然,惟,故而,遂 B. 然,又,所以,卒 C. 然,惟,所以,卒 D. 既,又,故而,遂 32. 下列依次填入横线处的词语,恰当的一组是。 (1)桥砖是深褐色,表明它的历史的长久;但都,今人叹息于古昔工程的坚美。 (2)我们下船后,借着新生的晚凉和河上的微风,暑气已渐渐消散;到了此地,,身子顿然轻了——习习的清风茬苒在面上,手上,衣上,这便又感到了一缕新凉了。 (3)可是一般人还忘其所以地要气派,自以为美,几乎不知天多高地多厚。这真是所谓“”了。 (4)但是要老资格的茶客才能这样有分寸;偶尔上一回茶馆的本地人外地人,却总忍

51单片机实验报告

51单片机实验报告

实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c); void main() { while(1) { P0 = 0x00; Delay10ms(50); P0 = 0xff; Delay10ms(50); } }

void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led

也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include #include void Delay10ms(unsigned int c); main() { unsigned char LED; LED = 0xfe; while (1) { P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00) { LED = 0xfe; } } } void Delay10ms(unsigned int c)

最新公务员行政能力测试题库及答案

主题: 行政能力倾向测试常识300题及答案(1) 常识部分涵盖政治、经济、法律、公共管理、人文、科技等方面、考察应试者在这些方面应知应会的基本知识以及运用基本知识分析判断的基本能力。请注意,正确答案可能是一个,也可能是两个以上,请根据题意做出正确选择。错选、多选、少选均不得分,但也不倒扣分。 1、有关知识产权的下列说法中,错误的是() A、在我国,知识产权是著作权、发现权、发明权和其他科技成果权以及专利权与商标权的名称 B、知识产权的“知识”是指人的创造性的智力活动成果,这种成果无须具有为人所感知的客观形成 C、“知识产权”是外来语 D、“知识产权”概念、涵义由法律直接规定 正确答案:B 2、计算机的数据是指:() A、数字符号 B、声音、图像符号 C、文字符号 D、信息的一种量化表示 正确答案:D 6、世界地球日是每年的:() A、4月22日 B、12月1日 C、3月12日 D、5月1日 正确答案:A 8、我国政治体制改革的基本目标是()。 A、实现依法治国 B、坚持人民民主专政 C、建设社会主义民主政治 D、完善人民代表大会制度 正确答案:C 10、现代行政决策组织体制中主要承担“断”的重要任务的系统是:() A、行政决策信息系统 B、行政决策的中枢系统 C、行政决策控制审批系统 D、行政决策研究系统 正确答案:A 11、标志着北宋诗文革新运动最高成就的作家是:() A、王安石 B、苏轼 C、范仲淹 D、欧阳修 正确答案:B 12、邓小平理论的精髓和核心是() A、解放思想、实事求是 B、坚持改革开放 C、以经济建设为中心 D、坚持四项基本原则 正确答案:A 13、辩证唯物主义认识论首先的基本的观点是:() A、物质第一性、意识第二性的观点 B、普遍联系和永恒发展的观点 C、对立统一的观点 D、实践观点 正确答案:D 14、()是建设有中国特色的社会主义理论的精髓。

单片机课后习题答案部分筛选

第一章 2单片机具有哪些特点 (1)片内存储容量越来越大。 (2抗干扰性好,可靠性高。 (3)芯片引线齐全,容易扩展。 (4)运行速度高,控制功能强。 (5)单片机内部的数据信息保存时间很长,有的芯片可以达到100年以上。 第二章 6. 如何简捷地判断89C51正在工作? 答:用示波器观察8051的XTAL2端是否有脉冲信号输出(判断震荡电路工作是否正常?) ALE(地址锁存允许)(Address Latch Enable)输出是fosc的6分频用示波器观察ALE是否有脉冲输出(判断 8051芯片的好坏?) 观察PSEN(判断8051能够到EPROM 或ROM中读取指令码?) 因为/PSEN接外部EPROM(ROM)的/OE端子 OE=Output Enable(输出允许) 9. 读端口锁存器和“读引脚”有何不同?各使用哪种指令? 答:读锁存器(ANL P0,A)就是相当于从存储器中拿数据,而读引脚是从外部拿数据(如MOV A,P1 这条指令就是读引脚的,意思就是把端口p1输入数据送给A) 传送类MOV,判位转移JB、JNB、这些都属于读引脚,平时实验时经常用这些指令于外部通信,判断外部键盘等;字节交换XCH、XCHD算术及逻辑运算 ORL、CPL、ANL、ADD、ADDC、SUBB、INC、DEC控制转移CJNE、DJNZ都属于读锁存器。 13. 内部RAM低128字节单元划分为哪3个主要部分?各部分主要功能是什么? 答:片内RAM低128单元的划分及主要功能: (l)工作寄存器组(00H~lFH) 这是一个用寄存器直接寻址的区域,内部数据RAM区的0~31(00H~lFH),共32个单元。它是4个通用工作寄存器组,每个组包含8个8位寄存器,编号为R0~R7。 (2)位寻址区(20H~2FH) 从内部数据RAM区的32~47(20H~2FH)的16个字节单元,共包含128位,是可位寻 址的RAM区。这16个字节单元,既可进行字节寻址,又可实现位寻址。 (3)字节寻址区(30H~7FH) 从内部数据RAM区的48~127(30H~7FH),共80个字节单元,可以采用间接字节寻址 的方法访问。 15. 开机复位后,CPU使用的是哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器组?

单片机考试试题带答案

单片机原理及应用试卷A 一、填空题(每空1分,共20分) 1、单片微型计算机由CPU、存储器和I/O 三部分组成。 PSEN信号有效时,表示从P0口稳定地送出了低8位地址。 2、MCS-51系统中,当 3、访问8031片外数据存储器采用的是寄存器间接寻址方式。 4、累加器(A)=80H,执行完指令ADD A,#83H后,进位位CY= 1 。 5、指令LCALL 37B0H,首地址在2000H,所完成的操作是2003H入栈,37B0H送入PC。 6、51有5个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器IP 加以选择。 7、在变址寻址方式中,以A作为变址寄存器,以PC或DPTR作基址寄存器。 8、中断请求信号有电平触发和脉冲触发两种触发方式 9、用串行口扩展并行口时,串行接口的工作方式应选为方式0。 10、74LS273通常用来作简单输出接口扩展;而74LS244则常用来作简单输入接口扩展。 11、51的并行I/O口信息有读引脚和读锁存器两种读取方法,读—改—写操作是针对并行I/O口内的锁存器进行的。 12、A/D转换器的三个重要指标是转换速度、分辨率和转换精度。 二、选择题(从备选答案中选择一个正确答案,并将代号写在括号内。每题1.分,共10分) 1、计算机能识别的语言是( C )。 (A)汇编语言(B)自然语言(C)机器语言(C)高级语言 2、MCS-51单片机外扩存储器芯片时,4个I/O口中用作数据总线的是( B )。 (A)P0和P2口(B)P0口(C)P2和P3口(D)P2口 3、在中断服务程序中,至少应有一条( D )。 (A)传送指令(B)转移指令(C)加法指令(D)中断返回指令

C51单片机实验报告

实验报告册 课程名称:单片机原理与应用B 指导老师:xxx 班级:xxx 姓名:xxx 学号:xxx 学期:20 —20 学年第学期南京农业大学工学院教务处印

实验目录实验一:指示灯/开关控制器 实验二:指示灯循环控制 实验三:指示灯/数码管的中断控制 实验四:电子秒表显示器 实验五:双机通信

姓名:学号:班级:成绩: 实验名称:指示灯/开关控制器 一、实验目的: 学习51单片机I/O口基本输入/输出功能,掌握C语言的编程与调试方法。 二、实验原理: 实验电路原理图如图所示,图中输入电路由外接在P1口的8只拨动开关组成;输入电路由外接在P2口的8只低电平驱动的发光二极管组成。此外,还包括时钟电路、复位电路和片选电路。 在编程软件的配合下,要求实现如下指示灯/开关控制功能:程序启动后,8只发光二极管先整体闪烁3次(即亮→暗→亮→暗→亮→暗,间隔时间以肉眼可观察到为准),然后根据开关状态控制对应发光二极管的亮灯状态,即开关闭合相应灯亮,开关断开相应灯灭,直至停止程序运行。 三、软件编程原理为; (1)8只发光二极管整体闪烁3次

亮灯:向P2口送入数值0; 灭灯:向P2口送入数值0FFH; 闪烁3次:循环3次; 闪烁快慢:由软件延时时间决定。 (2)根据开关状态控制灯亮或灯灭 开关控制灯:将P1口(即开关状态)内容送入P2口;无限持续:无条件循环。 四、实验结果图: 灯泡闪烁:

按下按键1、3、5、7:

经检验,其余按键按下时亦符合题目要求。 五、实验程序: #include"reg51.h" void delay(unsigned char time) { unsigned int j=15000; for(;time>0;time--) for(;j>0;j--); } void main(){ key,char i; for(i=0;i<3;i++) { P2=0x00; delay(500); P2=0xff; delay(500) } while(1) { P2=P3;

51单片机练习题

一.闪烁灯 1.实验任务 如图4.1.1所示:在端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1)延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为秒,相对于微秒来说,相差太大,所以我们在执行 某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是 如何设计呢下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个22+2×248=49820× DJNZ R7,$ 2个2×248(498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求秒=200ms,10ms×R5 =200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当端口输出高电平,即=1时,根据发光二极管的单向导 电性可知,这时发光二极管L1熄灭;当端口输出低电平,即=0时,发 光二极管L1亮;我们可以使用SETB指令使端口输出高电平,使用CLR 指令使端口输出低电平。 5.程序框图

大工19春《单片机原理及应用》大作业题目及要求【参考答案】

网络教育学院《单片机原理及应用》大作业 大工2019年春离线大作业 题目:题目一:单片机电子时钟设计 学习中心:奥鹏学习中心 层次: 专业: 年级:年春/秋季 学号: 学生姓名:

(注:本页为课程学习要求,阅读后请删除) 大工2019年春《单片机原理及应用》大作业具体要求: 1 作业内容 从以下五个题目中任选其一作答。 2 正文格式 作业正文内容统一采用宋体,字号为小四,字数在2000字以上。 3. 作业提交 学生需要以附件形式上交离线作业(附件的大小限制在10M以内),选择已完成的作业,点“上交”即可。如下图所示。 4.注意事项 请同学独立完成作业,不准抄袭其他人或者请人代做,如有雷同作业,成绩以零分计! 大连理工大学网络教育学院 2019年5月

题目一:单片机电子时钟设计 准则:设计一个基于51单片机或STM单片机的电子时钟,并且能够实现时分 秒的显示和调节 撰写要求:(1)首先介绍课题背景,并进行需求分析及可行性分析,包括软硬件功 能分配、核心器件的选型等; (2)对系统硬件进行设计,包括硬件功能模块划分、电路原理图设计等; (3)对系统软件进行设计,选用汇编语言或C语言编写程序,给出软件 开发流程; (4)总结:需要说明的问题以及设计的心得体会。 答: 单片机电子时钟设计 一、引言 单片机技术是计算机科学技术的独立分支,拥有着高性价比、高集成度、体积少、强大控制功能、功耗低、高可靠性、电压低、容易生产、方便携带等优点,越来越广泛的被应用于实际生活中。单片机全称,单片机微型计算机,从应用领域来看,单片机主要用来控制系统运行,所以又称微控制器或嵌入式控制器,单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。 二、时钟的基本原理分析 利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为100,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。 为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管

行政能力测试公共基础知识题库

08年公共基础知识热点问题 一、建设社会主义新农村 1、运用经济常识说明培养有文化、懂科技、会经营的新型农民的必要性。 A劳动者职业技能的高低直接影响劳动生产力水平的高低。 B市场经济具有竟争性。学会经营才能更好参与市场竟争。 C科学技术是第一生产力。 D提高农民素质是建设社会主义新农村的客观要求。有利于统筹城乡发展,构建和谐社会。 2、运用政治常识说明新农村建设如何实现“管理民主”。 (1)完善农村基层民主制度,推进村务公开和民主议事制度,维护农民民主权利,让农民有知情权、参与权、管理权、监督权。 (2)坚持依法治国,完善村民自治法,提高农民的法制意识,提供法律保证。 (3)加强党在农村的基层组织建设,充分发挥党组织的战斗堡垒作用和党员的先锋模范和用,用党内民主带动人民民主。 (4)转变基层政府职能,建设服务型政府,树立正确的政绩观。 3、运用经济学有关知识分析说明我国提出建设社会主义新农村的正确性。 ①农业是国民经济的基础。社会主义新农村建设与解决“三农"问题是相互统一的。构建和谐社会的进程中,解决“三农”问题始终是全局性、根本性的问题。 ②社会公平、共同富裕是社会主义的本质要求,也是社会主义新农村的基本特征。建设社会主义新农村,是统筹城乡发展、实现共同富裕的根本途径。 ③调整和优化经济结构才能持续健康发展,长期以来,在三大产业中,农业是薄弱环节,剩余劳动力多,农村产业结构不合理,影响了农村自身的发展和整个国家的可持续发展。 4、运用政治学有关知识分析说明党和国家在建设社会主义新农村过程中应发挥怎样的作用? ①建设社会主义新农村,既是我们党“立党为公,执政为民"的具体体现,也是贯彻科学发展观,构建和谐社会的必然选择。中国共产党应在建设社会主义新农村过程中发挥领导核心作用,要通过政治领导,为其发展提出正确的路线方针与政策。 ②建设社会主义新农村,是农村“三个文明”建设的可*保证。社会主义新农村建设既包括物质文明建设,也包括政治文明建设、精神文明建设。因此,国家既要促进农村经济发展,提高农民的生活水平,也要加强农村基层民主政治建设,提高农民的思想素质和科学文化素质,形成良好的社会风尚。 ③国家应行使好经济职能、社会公共管理职能,促进农村经济发展,为农村全面进步创造良好的外部环境。 5、简要说明中央实施系列惠农政策的经济意义。 A加大对“三农”的财政投入,能提高农业的综合生产能力,强化国民经济的基础,促进农业和农村经济的发展; B对农业的“多予少取”,能增加农民的收入,提高农民的生活水平;农村基础设施建设,能提高农村的消费需求,启动农村市场,进而扩大内需; C增加农村教育文化卫生等经费,有助于提高农民的素质,进而提高农业生产力的水平; D系列的惠农政策,使农民进一步分享社会发展的成果,体现社会公平,也为新农村建设与和谐社会的构建奠定物质基础。 6、运用国家的有关知识说明新农村建设要着力解决农民最关心的问题的基本理由。

相关文档
最新文档