硬件课程设计报告.doc
- 文档编号:1704999
- 上传时间:2022-10-23
- 格式:DOC
- 页数:53
- 大小:2.43MB
硬件课程设计报告.doc
《硬件课程设计报告.doc》由会员分享,可在线阅读,更多相关《硬件课程设计报告.doc(53页珍藏版)》请在冰豆网上搜索。
硬件课程设计报告
硬件课程设计报告
专业
班级
学号
姓名
中国矿工业大学计算机科学与技术学院
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件 课程设计 报告