硬件课程设计报告.doc

上传人:b****2 文档编号:1704999 上传时间:2022-10-23 格式:DOC 页数:53 大小:2.43MB
下载 相关 举报
硬件课程设计报告.doc_第1页
第1页 / 共53页
硬件课程设计报告.doc_第2页
第2页 / 共53页
硬件课程设计报告.doc_第3页
第3页 / 共53页
硬件课程设计报告.doc_第4页
第4页 / 共53页
硬件课程设计报告.doc_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

硬件课程设计报告.doc

《硬件课程设计报告.doc》由会员分享,可在线阅读,更多相关《硬件课程设计报告.doc(53页珍藏版)》请在冰豆网上搜索。

硬件课程设计报告.doc

硬件课程设计报告

硬件课程设计报告

专业

班级

学号

姓名

中国矿工业大学计算机科学与技术学院

2011年12月

目录

一、概要 3

二、焊接工艺总结 3

三、程序设计 3

(一)LED灯应用 3

(二)数码管显示 12

(三)蜂鸣器播放音乐 21

(四)按键识别 23

(五)串口通信 26

(六)时钟——定时器中断应用 33

(七)时钟日历——时钟芯片DS1302应用 37

(八)数字温度计——温度传感器DS18B20应用 47

四、体会与建议 53

一、概要

实验开发板配置为STC89C52RC单片机,内置8K的ROM程序存储器,支持串口ISP在线下载。

实验板上有8位数码管,可做静态显示、动态扫描以及数字时钟显示等;16位LED发光二极管,可进行流水灯等实验;6个按键可实现按键查询、按键中断等;利用蜂鸣器可进行报警提示、播放音乐等;利用DS1302时钟芯片可进行时钟精确计时,制作简易的时钟日历;通过温度传感器DS18B20接口可编程获取环境温度,制作数字温度计;MAX232芯片构成标准的RS232串行通信接口,可与PC机、单片机开发板进行串行通信,也可由计算机直接下载程序至单片机进行程序的烧录。

通过编程设计与本开发板配套的程序,完成相关硬件设备的应用,充分理解与掌握单片机的原理与应用,提高动手实践与编程的综合能力。

二、焊接工艺总结

本实验板为双面板,2条腿以上的元件,焊上后拆下重焊比较困难。

应按照顺序先焊易焊元件如电阻、小电容、12M和32768HZ的晶振、小开关等无极性元件。

在焊电路板时,首先焊接电源部分的元器件,J1、J2、S1、E1、E2、R5,然后接电源,检查电路板是否正常;然后焊接7段LED显示器下面的元件,并安装好7段LED显示器下的一个橡胶垫;然后焊其它元件,焊接元件按低高顺序,先焊低的,后焊高的,再焊集成电路插座,最后焊接7段LED显示器和串口插座等。

焊接过程中应注意排阻的公共端不能焊反,以及四位的LED数码管和LED发光二极管等具有极性的元件的电极也不能焊反。

三、程序设计

(一)LED灯应用

1. 流水灯

(1)实现功能

在实验板上点亮第一个LED灯后,再熄灭第一个LED灯,然后延时一段时间,接着再点亮第二个LED灯,接着再熄灭第二个LED灯……直至16个灯依次被点亮和熄灭,如此循环构成16个LED灯亮灭显示的流水灯。

(2)编程思想

①利用循环移位

先将P2赋值为0xff关闭右边8个灯,再将P0口赋值为0xfe点亮第一个LED灯,延时50ms后,将0xfe循环左移一位再赋给P0,接着再延时50ms,如此循环下去,待P0口控制的8个灯循环完毕后,再将P0赋值为0xff关闭左边8个灯将P2口赋值为0xfe,重复上述的循环操作。

这样可使16个LED灯实现右移的流水灯。

实现左移的流水灯时,可先将P0赋值为0xff关闭左边8个灯,再将P2口赋值为0x7f,然后延时50ms,接着将0x7f循环右移一位再赋给P2,如此循环下去,循环完毕后再将P0口赋值为0x7f重复上述循环操作。

这样可使16个LED灯实现左移的流水灯。

②利用取表方式

定义两个数组a,b,数组a中存放依次点亮8个灯时P0和P2口应赋的8个值,然后让P0和P2循环取遍a中的值,如此可构成右移的流水灯,数组b中反序存放数组a中8个值,然后让P0和P2循环取遍b中的值,如此可构成左移的流水灯。

(3)程序框图

①循环移位方式

主程序框图:

右移函数框图:

P0=0xff,P2=0xfe

开始

P2=0xff,P0=0xfe

延时50ms

延时50ms

P2口的值0xfe循环左移1位

P0口的值0xfe循环左移1位

循环8次?

循环8次?

否否

结束

是是

左移函数框图:

P2=0xff,P0=0x7f

开始

P2=0x7f,P0=0xff

延时50ms

延时50ms

P0口的值0x7f循环右移1位

P2口的值0x7f循环右移1位

循环8次?

循环8次?

结束

是是

②取表方式

主程序框图:

右移函数框图:

P0=0xff

开始

P2=0xff

P2=a[i]

延时50ms

P0=a[i]

延时50ms

i自增1

i自增1

循环8次

循环8次?

结束

是是

左移函数框图:

P2=0xff

开始

P0=0xff

P0=b[i]

延时50ms

P2=b[i]

延时50ms

i自增1

i自增1

循环8次?

循环8次?

否否

结束

是是

(4)程序代码

①循环移位方式

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

uchartemp,i,j;

voiddelayms(uchar);

voidyouyi();

voidzuoyi();

voidmain()

{while

(1)

{youyi();

zuoyi();

}

}

voidyouyi()

{temp=0xfe;

P2=0xff;

P0=temp;

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

{ delayms(50);

temp=_crol_(temp,1);

P0=temp;

}

P0=0xff;

temp=0xfe;

P2=temp;

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

{delayms(50);

temp=_crol_(temp,1);

P2=temp;

}

}

voidzuoyi()

{temp=0x7f;

P0=0xff;

P2=temp;

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

{

delayms(50);

temp=_cror_(temp,1);

P2=temp;

}

P2=0xff;

temp=0x7f;

P0=temp;

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

{delayms(50);

temp=_cror_(temp,1);

P0=temp;

}

}

voiddelayms(ucharz)//z取值(1~127)

{ucharx,y;

for(x=2*z;x>0;x--)

for(y=248;y>0;y--);

}

②取表方式

#include

#defineuintunsignedint

#defineucharunsignedchar

uchartemp,i,j;

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

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

voiddelayms(uchar);

voidyouyi();

voidzuoyi();

voidmain()

{while

(1)

{youyi();

zuoyi();

}

}

voidyouyi()

{P2=0xff;

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

{ P0=a[i];

delayms(50);

}

P0=0xff;

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

{P2=a[j];

delayms(50);

}

}

voidzuoyi()

{P0=0xff;

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

{ P2=b[i];

delayms(50);

}

P2=0xff;

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

{ P0=b[j];

delayms(50);

}

}

voiddelayms(ucharz)//z取值(1~127)

{ucharx,y;

for(x=2*z;x>0;x--)

for(y=248;y>0;y--);

}

2.闪烁灯

(1)实现功能

在实验板上点亮第一个LED灯后延时一段时间再熄灭第一个LED灯,然后再点亮第一个LED灯延时一段时间再熄灭第一个LED灯,让第一个灯总共这样亮灭4次,接着再让第二个LED灯亮灭4次,如此下去实现16个灯的亮灭闪烁并且能循环右移和左移。

(2)编程思想

定义两个数组a,b,数组a中存放依次点亮8个灯时P0和P2口应赋的8个值,然后让P0和P2循环取遍a中的值,每取a中的一个值时按如下方式循环4次:

P0和P2每次取值后先延时100ms再赋值为0xff再延时100ms。

这样下去可构成循环右移的闪烁灯。

数组b中反序存放数组a中8个值,然后让P0和P2按上述方式循环取遍b中的值,如此可构成循环左移的闪烁灯。

(3)程序框图

主程序框图:

右移闪烁函数程序框图:

左移闪烁函数程序框图:

(4)程序代码

#include

#defineuintunsignedint

#defineucharunsignedchar

uchartemp,i,j;

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

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

voiddelayms(uchar);

voidyoushan();

voidzuoshan();

voidmain()

{whil

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

当前位置:首页 > 高中教育 > 英语

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

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