单片机复习参考答案Word文档下载推荐.docx

上传人:b****5 文档编号:18637263 上传时间:2022-12-30 格式:DOCX 页数:17 大小:317.37KB
下载 相关 举报
单片机复习参考答案Word文档下载推荐.docx_第1页
第1页 / 共17页
单片机复习参考答案Word文档下载推荐.docx_第2页
第2页 / 共17页
单片机复习参考答案Word文档下载推荐.docx_第3页
第3页 / 共17页
单片机复习参考答案Word文档下载推荐.docx_第4页
第4页 / 共17页
单片机复习参考答案Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机复习参考答案Word文档下载推荐.docx

《单片机复习参考答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机复习参考答案Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

单片机复习参考答案Word文档下载推荐.docx

(1,波特率相同2,帧格式也要相同)

10.8051单片机最小系统原理图

11.8051控制74HC164,PCF8563,DS18B20,TLC549,数码管要几根线

(分别为2根,2根,1根,3根,)

12.异步串行通讯标准波特率是哪些值

(11520,12800,14400,19200,28800,38400,57600,115200)

13.REG52.H文件的作用是什么

(定义了一些宏,把单片机中的寄存器地址封装)

14.display.h,pcf8563.h,ds18B20.h,tlc549.h文件中一般有什么内容

display.h

voidshift(unsignedcharn,flag);

voiddisplay(unsignedcharj0,j1,j2,j3,j4,j5,j6,j7);

sbitsda=P0^5;

sbitscl=P0^6;

codecharled_code[19]=

{//displaycode

0x11,0xd7,0x32,0x92,0xd4,//0,1,2,3,4

0x98,0x18,0xd3,0x10,0x90,//5,6,7,8,9

0x50,0x1c,0x39,0x16,0x38,//a,b,c,d,e

0x78,0xfe,0xef,0xff//f-dotdark

};

pcf8563.h

sbitsda_8563=P0^3;

sbitscl_8563=P0^2;

unsignedcharyear,mon,day,hou=0x16,min=0x16,sec=0x20,week,last_week=7;

constunsignedchartime[7]={0x09,0x11,0x20,0x05,0x11,0x14,0x30};

//设置初值:

年.月.日.星期.时.分.秒

//与PCF8563有关的函数声明

voidstart(void);

//开始子程序

voidstop(void);

//结束子程序

unsignedcharwritebyte_8563(unsignedchar);

//写一个字节=====

unsignedcharreadbyte_8563(void);

//读一个字节

voidread_time_8563(void);

//读日期,数据放于year,mon,day,hou,min,sec,week

voidwrite_time_8563(void);

//写日期初值

ds18B20.h

sbitDQ=P0^4;

voiddelay(unsignedint);

voidinit_DS18B20(void);

ucharread_one_char(void);

voidwrite_one_char(unsignedchar);

intread_temperature(void);

tlc549.h

Sbitcs_549=P3^7;

Sbitsda_549=P3^6;

Sbitscl_549=P3^5;

Voiddelay(unsignedchar);

unsignedcharread_549();

15.手工推导数码管显示代码

首先运行数组LED[]={0x00,0x01,0x02,0x40,0x08,0x10,0x20,0x40,0x80,0xff}

然后标出顺序,根据顺序计算代码

16.延时约约1秒左右的程序

voiddelay1s(void)//延时1000000us,误差0us

{

unsignedchara,b,c;

for(c=167;

c>

0;

c--)

for(b=171;

b>

b--)

for(a=16;

a>

a--);

}

17.接P2口的发光二极管显示花样程序

#include<

reg52.h>

voiddelay_1s(unsignedintx);

main(){

while

(1){

P2=0xfe;

//11111110

delay_1s(42000);

P2=0xfd;

//11111101

delay_1s(42000);

P2=0xfb;

//11111011

P2=0xf7;

//11110111

P2=0xef;

//11101111

P2=0xdf;

//11011111

P2=0xbf;

//10111111

P2=0x7f;

//01111111

}}

18.数码管移位程序(使用74HC164芯片)

voidshift(ucharn)

ucharm,i;

m=table[n];

scl=0;

for(i=0;

i<

8;

i++)

{

if(m&

0x80)

sda=1;

else

sda=0;

scl=1;

scl=0;

m<

<

=1;

}

19.写出8个数码管显示(使用74HC164芯片)

voidshift(unsignedchar);

sbitsda=P0^0;

//mustmodifysbit

scl=P0^1;

//mustmodify

codecharled_code[12]=

{0xff,0xff,0xff,0xff,0xfe,0xfd,

0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};

main(){

unsignedchari;

while

(1){

for(i=0;

10;

i++){

shift(i);

}}}

voidshift(unsignedcharn){

unsignedcharm,i;

m=led_code[n];

scl=0;

i++)

if(m&

0x80)

{sda=1;

}

else

{sda=0;

}

scl=1;

m<

}}

voiddelay_1s(unsignedintx)

{

while(x--)

20.写出一个60以内整数变成可以用两个数码管十进制显示的拆分程序

Separate(inti)

For(i=0;

60;

I0=i/10;

I1=i%10;

21.写出一个255以内整数变成可以用两个数码管(十六进制)显示的拆分程序

Separate(unsignedinta)

{

A0=a/16;

A1=a%16;

22.设单片机晶振频率为4MHZ,使用定时器1以工作方式2产生周期为200微秒的等宽的方波脉冲,并在P1.6端输出,写出完整程序

计算:

机器周期为T=12/4=3(us)现在要产生200us的等宽方波脉冲,

Main()

Sbitout=P1.6

TMOD=0x20;

//定时器1和工作方式2

TH1=(256-66)/16;

TL1=(256-66)%16;

EA=1;

ET1=1;

TR1=1;

While

(1);

Voidtime1()interuppt2

P1.6=!

P1.6;

这道题用定时器很难得到完全准确的时间,这里是用大概的时间!

23.写出两机通讯程序

#include<

voidSerial_Send(unsignedcharSdata);

main()

while

(1)

unsignedchari;

//

TH1=0xfa;

TL1=0xfa;

SCON=0x50;

PCON=0x80;

//Buaddouble

TR1=1;

100;

Serial_Send(i);

//*****************************//

voidSerial_Send(unsignedcharSdata)

TI=0;

//清发送标记位

SBUF=Sdata;

//要发的数据放入缓冲区

while(!

TI);

//等待一帧数据发送完毕

voidSerial_Receive(unsignedcharSdata);

delay_1s(40000);

//0x80

EA=1;

ES=1;

while

(1);

voidSerial_Receive()interrupt4

{//中断接收服务函数

unsignedcharSdata;

Sdata=SBUF;

//把缓冲区的收到数据取出

RI=0;

//清接收标记位

24.根据I2C总线协议和PCF8563波形图,写出PCF8563:

1.关闭总线程序;

//我觉得应该是启动总线

voidstart(void)//开始子程序

sda_8563=1;

scl_8563=1;

sda_8563=0;

scl_8563=0;

2.结束总线程序;

voidstop(void)//结束子程序

读一个字节程序;

//======读一个字节=======

unsignedcharreadbyte_8563(void)

unsignedchari=8;

unsignedchardat=0x00;

for(;

i>

i--)

dat=dat<

1;

if(sda_8563)dat|=0x01;

return(dat);

3.写一个字节程序;

unsignedcharwritebyte_8563(unsignedchardat)//写一个字节

unsignedinti;

unsignedcharack=1;

for(i=8;

if(dat&

0x80){sda_8563=1;

else{sda_8563=0;

dat<

while(sda_8563){i++;

if(i==50000)break;

ack=sda_8563;

return(ack);

//有应答则返回0,无的返回1

4.读PCF8563年月日时分秒程序

voidread_time_8563(void)//读日期

7;

start();

writebyte_8563(0xa2);

//选择写8563芯片

writebyte_8563(i+0x02);

//写地址

writebyte_8563(0xa3);

//选择读8563芯片

switch(i)

{

case0:

sec=(readbyte_8563())&

0x7f;

break;

case1:

min=(readbyte_8563())&

case2:

hou=(readbyte_8563())&

0x3f;

case3:

day=(readbyte_8563())&

case4:

week=(readbyte_8563())&

0x07;

case5:

mon=(readbyte_8563())&

0x1f;

case6:

year=(readbyte_8563())&

0xff;

default:

}

stop();

sec=((sec&

0xf0)>

>

4&

0x0f)*10+(sec&

0x0f);

min=((min&

0x0f)*10+(min&

hou=((hou&

0x0f)*10+(hou&

day=((day&

0x0f)*10+(day&

mon=((mon&

0x0f)*10+(mon&

year=((year&

0x0f)*10+(year&

//BCD码转换成10进制数

25.根据1—Wire总线协议和给出DS18B20波形图,写出DS18B20:

1.启动总线程序

voidinit_DS18B20(void)

unsignedcharx=0;

DQ=1;

//DQ复位

delay(8);

//稍做延时

DQ=0;

//单片机将DQ拉低

delay(80);

//精确延时大于480us

//拉高总线

delay(35);

2.写一个字节程序

voidwrite_one_char(unsignedchardat)

unsignedchari=0;

for(i=8;

i>

i--)

DQ=dat&

0x01;

delay(5);

dat>

3.读两个字节程序

ucharread_one_char(void)

unsignedchari=0;

unsignedchardat=0;

//给脉冲信号

//先进行移位操作,以免最后一位不能读出

if(DQ)

dat|=0x80;

delay(4);

returndat;

4.字节合并与折分程序

intread_temperature(void)

unsignedchara=0;

unsignedcharb=0;

intt=0;

init_DS18B20();

//初始化

write_one_char(0xCC);

//跳过读序号列号的操作

write_one_char(0x44);

//启动温度转换

//跳过读序号列号的操作

write_one_char(0xBE);

//读取温度寄存器等(共可读9个寄存器)前两个就是温度

a=read_one_char();

b=read_one_char();

t=b;

t<

=8;

t|=a;

returnt;

unsignedintTemp,LastTemp;

unsignedcharTEMP_H,TEMP_L,high_T,low_T;

while

(1)

Temp=read_temperature();

if(Temp!

=LastTemp)//温度变化时,才进行显示

TEMP_H=Temp>

TEMP_L=Temp;

high_T=((TEMP_H<

4)&

0xf0)|((TEMP_L>

//整数部分

ow_T=(unsignedchar)((TEMP_L&

0x0f)*0.625*10);

//小数部分

LastTemp=Temp;

//保存现在的温度值,准备与下一个读出的温度比较

separate(low_T,high_T);

display(j0,j1,j2,j3,j4,j5,j6,j7);

voidseparate(unsignedcharlow_T,high_T)

j0=low_T%10;

j1=low_T/10;

j2=high_T%10;

j3=high_T/10;

26.根据SPI总线协议和给出TLC549波形图,写出TLC549芯片的读A/D程序

ad549.h>

unsignedcharRead_549()

unsignedcharvalue_549=0;

sda_549=1;

//释放总线

scl_549=0;

//时钟低

cs_549=1;

//完成准备状态

cs_549=0;

delay(10);

if(sda_549==1)value_549|=0x01;

value_549<

scl_549=1;

return(value_549);

27.本课程的上机实验操作过程有关要点

28.本课程的上机实验时的出错信息的含义

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1