数字化产品设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字化产品设计报告
专业:计算机科学与技术
班级:0991121
姓名:于苗苗
指导教师:朱国晗、孟祥莲、毕津滔、王嘉鹏
哈尔滨工业大学华德应用技术学院
2011 年 12 月 23日
一、需求分析:
应用场合:应用于对运动物体的速度、加速度的测量实验,还可
用来验证机械守恒等物理实验,同时也适用于对时间
测量精度要求较高的场合,如测定短时间间隔的表。
设计目的:实现短时间的计时功能,以及加减功能。
立题意义:熟悉集成电路的引脚安排
掌握芯片的逻辑功能及使用方法
了解板子的结构及接线方法
掌握数字产品的设计与需求
二、硬件设计方案
硬件所需器件:12MHZ晶振、2个数码管、AT89C52芯片、MAX232芯
片、5个按键、1个数据口、6个电容、1个电阻芯片原理简要介绍:
AT89C52是一种带4K字节闪烁可编程可擦除只读存储器的低电压,
高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度
非易失存储器制造技术制造。由于将多功能8位CPU和闪烁存储器
组合在单个芯片中,ATMEL的AT89C51上一种高效微控制器,为很
多嵌入式控制系统提供了一种灵活性高且价廉的方案。
主要特性:
4K字节可编程闪烁存储器
寿命:1000写/擦循环
数据保留时间:10年
全静态工作:0Hz—2424Hz
三级程序存储器锁定
128*8位内部RAM32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
三、软件设计方案
四、系统调试
硬件调试:在硬件调试过程中出现了很多问题,由于导线太多,有
些地方出现短路现线,同时也存在导线虚焊,经过查找
重新焊接;才得以将问题解决。实现第四天的时候,数
码管烧坏,又及时更换数码管,才得以将程序与硬件完
美结合。
软件调试:利用所需的元器件绘制出设计图,当程序设计出来之起
来后,就可以通过仿真软件对其进行编译,生成仿真所
需要的HEX文件。将生成的文件加载到Protues上,就
可以进行系统仿真。通过仿真检测所作设计是否能实现
预期效果。
五、总结
时间过得真快,一个礼拜的课设又结束了,通过本次课程设计,我收获很多,能够让我将理论学习与实践有机的结合起来,真正了解自己不足与缺陷。此次实验让我学会,在设计过程中,首先要调整好心态,能够清楚的分析课题,根据所学知识绘制出系统部体设计框图。然后按照自己的设计思路,利用所给的元器件绘制出设计图,当程序设计出来之后,就可以通过仿真软件对其进行编译,生成仿真所需要的HEX文件。将生成的文件加载到Protues 上,就可以进行系统仿真。通过仿真检测所作设计是否能实现预期效果。本次课程设计使我对单片机的工作原理有了更深刻的认识,掌握了许多在以前学习中混淆不清的知识点。在翻阅相关书籍和查询相关资料过程中学到了丰富的单片机知识,开阔了眼界,增加了知识且真正做到了理论联系实际的重要性。但是在我设计和调试的过程中,也遇到许多问题和困难,在同学和老师的帮助下,还是顺利的完成了此次课程设计,在以后的学习中,我会更加细心和认真的,避免出现一些异常和小错误。
附录1:
#include
#define uchar unsigned char #define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit pc1=P1^7;
sbit pc2=P1^6;
uchar code led[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d ,0x7d,0x07,0x7f,0x6f};
uchar times=0,s=0,bz=0;
void delay(uint x)
{
uchar j;
while(x--)
{
for(j=0;j<125;j++);
}
}
xianshi()
{
if(s>100)s=s%100;
pc1=0;
P0=led[s/10];
delay(1);
pc1=1;
pc2=0;
P0=led[s%10];
delay(1);
pc2=1;
}
shijian()interrupt 1
{
TH0=0x3c; TL0=0xb0;
times++;
if(times==20)
{
s++;
times=0;
}
}
void main()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=0x3c;
TL0=0xb0;
while(1)
{
xianshi();
if(key1==0)
{
while(!key1);
TR0=~TR0;
if(!TR0)biaozhi=1;
else biaozhi=0;
}
if(key2==0)
{
while(!key2);
TR0=0;
s=0;
biaozhi=1;
}
if(key3==0&&biaozhi)
{
while(!key3);
TR0=0;
if(s<99)s++;