硬件课程设计报告Word文档下载推荐.docx
- 文档编号:22099254
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:78
- 大小:811.05KB
硬件课程设计报告Word文档下载推荐.docx
《硬件课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《硬件课程设计报告Word文档下载推荐.docx(78页珍藏版)》请在冰豆网上搜索。
利用蜂鸣器可进行报警提示、播放音乐等;
利用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
-3-
开始
P2=0xff,P0=0xf
P0口的值0xfe循环左移1位
P0=0xff,P2=0xf
延时50ms
P2口的值0xfe循环左移1位
结束
口赋值为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)程序框图
①循环移位方式
主程序框图:
右移函数框图:
e
否
循环8次?
是
-4-
P2=0x7f,P0=0xf
P2口的值0x7f循环右移1位
P2=0xff,P0=0x7
P0口的值0x7f循环右移1位
左移函数框图:
f
②取表方式
-5-
i自增1
P0=0xff
P0=a[i]
P2=a[i]
P2=0xff
P2=b[i]
P0=b[i]
循环8次
-6-
(4)程序代码
①循环移位方式#include<
reg52.h>
#include<
intrins.h>
#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=0xff;
temp=0xfe;
P2=temp;
for(j=0;
j<
j++)
voidzuoyi()
{temp=0x7f;
{
delayms(50);
temp=_cror_(temp,1);
-7-
temp=0x7f;
voiddelayms(ucharz)//z取值(1~127)
{ucharx,y;
for(x=2*z;
x>
0;
x--)
for(y=248;
y>
y--);
#include<
ucharcodea[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ucharcodeb[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
{while
(1)
{youyi();
{P2=0xff;
{P0=a[i];
{P2=a[j];
-8-
{P0=0xff;
{P2=b[i];
{P0=b[j];
{ucharx,y;
2.闪烁灯
在实验板上点亮第一个LED灯后延时一段时间再熄灭第一个LED灯,然后再点亮第一个LED灯延时一段时间再熄灭第一个LED灯,让第一个灯总共这样亮灭4次,接着再让第二个LED灯亮灭4次,如此下去实现16个灯的亮灭闪烁并且能循环右移和左移。
定义两个数组a,b,数组a中存放依次点亮8个灯时P0和P2口应赋的8个值,然后让P0和P2循环取遍a中的值,每取a中的一个值时按如下方式循环4次:
P0和P2每次取值后先延时100ms再赋值为0xff再延时100ms。
这样下去可构成循环右移的闪烁灯。
数组b中反序存放数组a中8个值,然后让P0和P2按上述方式循环取遍b中的值,如此可构成循环左移的闪烁灯。
-9-
右移闪烁函数程序框图:
左移闪烁函数程序框图:
-10-
voidyoushan();
voidzuoshan();
{youshan();
zuoshan();
voidyoushan()
{for(j=4;
j>
j--)//每个灯闪烁4次
delayms(100);
{for(j=4;
j--)
{P2=a[i];
voidzuoshan()
{P0=0xff;
j--)//亮灭4次
-11-
P0=b[i];
voiddelayms(ucharz)//z取值(1~127){ucharx,y;
(二)数码管显示
1.数码管静态显示
1.1数码管1位静态显示
在实验板上让第一个数码管显示数字1,然后第一个数码管熄灭,接着第二个数码管显示数字2,然后第二个数码管熄灭,如此依次让8个依次循环显示数字1到8。
定义两个数组a,b,数组a中存放数码管要显示的数字的编码值,数组b中存放数码管的位选值,P0通过取a中的值来显示相应数字,P2通过取b中的值来决定哪一位显示,利用for循环来循环8次每次分别让P0和P2取数字1到8相对应的数组中的编码值和位选值,每取一次取值后延时300ms显示,接着给P2赋值0xff关闭位选为下一次显示消影。
-12-
uuuuuuuuu,i,j;
vvvvvvvvv100ms(uchar);
ucharcodea[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0X6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0-F
//位选
{for(i=1;
9;
{P0=a[i];
P2=b[i-1];
delay100ms(3);
//P0=0;
voiddelay100ms(uchart)//z取值(1~127)
{ucharx,y,z;
for(x=t;
for(y=200;
y--)
-13-
for(z=248;
z>
z--);
1.2数码管8位静态显示
在实验板上同时让8个数码管显示数字0,然后让8个数码管同时熄灭,接着再让8个数码管同时显示数字1,然后再让8个数码管同时熄灭,如此让8个数码管同时显示数字0到9以及16进制的A到F并且循环显示。
定义数组a,数组a中存放数码管要显示的数字的编码值,P0通过取a中的值来显示相应数字,P2赋值为0即打开所有的位选,在for循环中依次让P0取遍a中的值,每取一次取值后延时300ms显示。
ucharcodea[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0X6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0-F
-14-
P2=0;
while
(1)
{for(i=0;
16;
voiddelay100ms(uchart)//zȡ(1~127)
{ucharx,y,z;
2.数码管动态显示
2.1数码管动态显示“12345678”
在实验板上让8个数码管同时显示且第一个数码管显示数字1,第二个数码管显示数字2,……第8个数码管显示数字8。
定义两个数组a,b,数组a中存放数码管要显示的数字的编码值,数组b中存放数码管的位选值,P0通过取a中的值来显示相应数字,P2通过取b中的值来决定哪一位显示,利用for循环来循环8次每次分别让P0和P2取数字1到8相对应的数组中的编码值和位选值,每取一次值后延时50us,接着给P2赋值0xff关闭位选为下一次显示消影。
-15-
vvvvvvvvv50us();
;
delay50us();
voiddelay50us()//误差0us
{ucharx;
for(x=15;
_nop_();
-16-
2.2数码管拉幕式显示“12345678”
在实验板上让第1个数码管显示数字1,延时一段时间后在第1个数码管显示数字1的同时让第2个数码管显示数字2,延时一段时间后在前两个数码管显示数字1和2的同时让第3个数码管显示数字3……如此下去让8个数码管显示的位数依次增加并且能够从左到右和从右到左显示。
(2)编程思想
定义变量u来统计显示的位数,定义变量flg来标识是否8位显示已满,定义两个数组a,b,数组a中存放数码管要显示的数字的编码值,数组b中存放数码管的位选值,数组a中存放数码管要显示的数字的编码值,数组b中存放数码管的位选值,P0通过取a中的值来显示相应数字,P2通过取b中的值来决定哪一位显示。
在主函数中利用两个for循环来分别实现从左到右和从右到左的显示,通过标志位flg来决定执行哪个for循环,在每个for循环中通过循环u次来显示u位数,每次分别让P0和P2取数字1到8相对应的数组中的编码值和位选值,每取一次值后延时50us,接着给P2赋值0xff关闭位选为下一次显示消影。
同时在主函数中设置定时器0为工作方式1并开定时器0中断,在定时器0的中断函数中每到400ms时让显示位数u加1,当显示位数达到8位时将u清零同将标志位flg取反,以便在主函数中执行从右到左显示的for循环。
-17-
uchari,u=1,t=0;
voiddelay50us();
bitflg=0;
{TMOD=0x01;
//定时/计数器0设为方式1
TH0=(65536-50000)/256;
//定时50ms初值的高8位送TH0
TL0=(65536-50000)%256;
//定时50ms初值的低8位送TH0
TR0=1;
//启动定时器
ET0=1;
//开定时/计数器0的中断
EA=1;
//开CPU中断
P0=0;
{if(!
flg)
{for(i=1;
u;
{P2=0xff;
P0=a[i];
-18-
if(flg)
P0=a[9-i];
P2=b[8-i];
voidt0()interrupt1
{TH0=(65536-50000)/256;
//重新将定时50ms初值的高8位送TH0
//重新将定时50ms初值的低8位送TH0
t++;
if(t==8)//每400ms显示增加一位
{t=0;
u++;
if(u==10)
{u=0;
flg=~flg;
}}
{_nop_();
3.数码管显示99
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件 课程设计 报告