




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子工程训练实验报告题目:秒表系统的设计和工程实现系班: 学号: 姓名: 大连理工大学电工电子实验中心电子安装实验室一 单片机系统设计方案描述系统设计基本指标:1.实现最大时间长度超过5分钟的正常倒计时2.可以在5分钟范围内自由方面设置秒表的开始时间3.进入最后一分钟时,三声蜂鸣器响提示4.秒表计时到,五声蜂鸣器响,同时小灯亮提示电子工程训练是一个综合性实验。秒表系统设计总体上分为硬件设计和软件设计两个部分,并要充分考虑它们的匹配设计。硬件设计特别是引脚的配置要充分考虑软件实现的需要,反过来,软件设计也要建立在硬件的基础上,并且充分利用硬件提供的资源。硬件电路大体上可分为最小系统板电路、数码管
2、显示电路和按键电路。最小系统板电路和数码管显示电路在老师指导下很快得以完成。按键电路为充分考虑以后软件设计的灵活性和可扩展形,采用了排线将引脚引出。软件设计上,为方便秒表的操作使用,设置了“修改”、“增加”、“移位”和“开始/暂停”四个按键功能。“修改”键按下,进入修改状态,相应的修改位闪烁,提示按“增加”键修改该位时间参数,操作“移位“按键可以移动修改位。“开始暂停”则用于秒表的开始运行和暂停运行。按键处理通常有查询和中断两种方式处理,查询占用较多的单片机运行资源,而且延迟防抖效果较差,容易多次触发,而中断方式消抖则操作更为灵敏。同时考虑到at89s52只有两个外部中断,将使用较多的“增加”
3、和“开始/暂停”两个按键处理分配给两个外部中断。另外两个按键则采用查询方式检测处理。软件设计整体上利用了“有限状态机”的思想,按键控制状态的转换,并在相应的状态下执行相应的操作。一共设置了3个状态:state=0(暂停状态),state=1(开始运行状态),state=2(修改状态),它们的相互转化如下:由于本人之前接触过一些仿真软件proteus的知识,而本系统设计所需要的单片机、按键、数码管、蜂鸣器等硬件均可在proteus得到仿真。在程序的编写调试过程中,可以完全脱离硬件,高效率的完成了程序的编写调试。二 硬件原理图(电路原理图、硬件仿真图)proteus仿真图三系统流程图:1.主程序流
4、程图2. 修改状态数据操作和数码管显示3. 开始状态的数码管显示4暂停状态的数码管显示较为简单,根据保留的时间参数,刷新数码管,保持刚才的时间显示。5中断int0修改时间的流程图6中断int1开始与暂停状态的切换,程序较为简单,按键触发时,在state为1(开始状态)和state为0(暂停状态)来回切换。四、程序#include<reg51.h>#define ulong unsigned longchar tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90;char tab_dp=0x40,0x79,0x24,0x30,0x
5、19,0x12,0x02,0x58,0x00,0x10;#define led p0 /p0为数码管的段选#define ws p1 /p1为数码管的位选sbit time_shift=p30; /p30为"移位"按键sbit time_set=p31; /p31为"修改"按键sbit set_inc=p32; /p32为"增加"按键sbit time_run=p33; /p33为"计时开始暂停"按键sbit light=p20;sbit speaker=p27;unsigned char sec,min,sec_
6、ge,sec_shi,min_ge,min_shi,t; /定义秒,分,时,秒的个位,十位,分的个位,十位int state; /秒表状态指示 0-计时暂停 1-正在倒计时 2-计时时间参数修改int flag; /秒表修改数据指示 0-分钟十位 1-分钟个位 2-秒钟十位 3-秒钟个位int blink;/-void init();void display_run();void display_pause();void delay(int);void time_modify();/-void main() init(); state=0; flag=0; blink=1; t=0; ligh
7、t=1; speaker=1; min=5; sec=0; sec_ge=0; /秒的个位和十位 sec_shi=0; min_ge=5; /分的个位和十位 min_shi=0; while(1) if(time_set=0) /如果"调时"按键按下 delay(5); /延时去抖 if(time_set=0) state=2; if(state=0) tr0=0; tr1=0; display_pause(); if(state=1) tr0=1; tr1=0; display_run(); if(state=2) tr1=1; time_modify(); /-void
8、 init() tmod=0x11; ea=1; /开总中断 et0=0; et1=0; /定义定时器0工定时器1作与方式1 th0=0x4d; /定时器0赋初值 tl0=oxfc; th1=15536/256; /定时器1赋初值 tl1=15536%256; /中断初始化 ex0=1; px0=0; it0=1; ex1=1; px1=1; it1=1;/外中断1void int_1() interrupt 2 using 0 if( time_run=0)/表示按钮有按下 delay(20); /延时 if(time_run=0) state=(state+1)%2; light=1; s
9、peaker=1; /外中断0void int_0() interrupt 0 using 1 if( set_inc=0)/表示按钮有按下 delay(20); /延时去抖 if(set_inc=0) switch(flag) /分支结构,根据flag的值来判断哪一位加1 case 0: min=(min+10)%60; break; case 1: min=(min+1)%10+min/10*10; break; case 2: sec=(sec+10)%60; break; case 3: sec=(sec+1)%10+sec/10*10; break; default:break; /
10、-延时子函数-void delay(int x) int i,j; for(i=x;i>0l;i-) for(j=255;j>0;j-) ;/-显示子函数-void display_run() if(tf0=1) /如果定时器溢出 tf0=0; /清中断标志位 t+; if(t=20) t=0; if(min=0&&sec=0) min=60; if(sec=0) sec=59; min-; else sec-; if(min=0&&sec>56) speaker=0; delay(20); speaker=1; if(min=0&&a
11、mp;sec=0) light=0; speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1; state=4; min=5;/回归初始化 sec=0; sec_ge=0; /秒的个位和十位 sec_shi=0; min_ge=5; /分的
12、个位和十位 min_shi=0; sec_ge=sec%10; /秒的个位和十位 sec_shi=sec/10; min_ge=min%10; /分的个位和十位 min_shi=min/10; ws=0xfe; /循环扫描 led=tabsec_ge; delay(1); ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1);void display_pause() ws=0xfe; /循环扫描 led=tabsec_ge; delay(
13、1); ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1);void time_modify() /修改位的闪烁状态 if(tf1=1) tf1=0; blink=(blink+1)%2; /修改具体哪个数码管指示 if(time_shift=0) delay(60); if(time_shift=0) flag=(flag+1)%4; / 修改状态下的数码管显示 switch(flag) /分支结构,根据flag的值来决定扫描状态 c
14、ase 0: sec_ge=sec%10; /秒的个位和十位 sec_shi=sec/10; min_ge=min%10; /分的个位和十位 min_shi=min/10; ws=0xfe; /循环扫描 led=tabsec_ge; delay(1); ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); if(blink=1) ws=0xf7; led=tabmin_shi; delay(1); break; case 1: sec_ge=sec%10; /秒的个位和十位 sec_shi=sec/10;
15、 min_ge=min%10; /分的个位和十位 min_shi=min/10; ws=0xfe; /循环扫描 led=tabsec_ge; delay(1); ws=0xfd; led=tabsec_shi; delay(1); if(blink=1) ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1); break; case 2: sec_ge=sec%10; /秒的个位和十位 sec_shi=sec/10; min_ge=min%10; /分的个位和十位 min_shi=min/10; ws=0x
16、fe; /循环扫描 led=tabsec_ge; delay(1); if(blink=1) ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1); break; case 3: sec_ge=sec%10; /秒的个位和十位 sec_shi=sec/10; min_ge=min%10; /分的个位和十位 min_shi=min/10; if(blink=1) ws=0xfe; /循环扫描 led=tabsec_ge; delay(1);
17、 ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1); break; default:break; 五问题及解决方案1.刚开始焊接电路时,直接使用焊锡引导作为导线,焊接效果很差。解决方法:后来请教同学得知可以使用铁丝引导焊锡焊接连线,得到了很好的效果。2数码管显示电路相对较为复杂,布线较多,很容易发生虚焊、忘焊的情况,检查电路问题时遇到了瓶颈,感觉问题错综复杂,难以入手。解决方法:后来在老师的帮助下,上电挨个测试每个数码管的每个发光二极
18、管工作情况,很快定位出了硬件电路问题,提高了工作效率。3.按键电路刚开始焊接后测试,声音较小。解决方法:后来增加了旁路电容,效果改善很多。4刚开始利用proteus调试编写程序,按键使用中断方式,并没有正确触发处理。后来在硬件上直接在线调试程序,立刻得到了正确的结果。在网上查询了很多资料,可能是proteus并不支持中断仿真。六体会 电子工程训练是一门综合性较强的实验,在软件编程和硬件设计上都受到了很好的锻炼。 技术上的问题在上一栏中已经详细地叙述过了,这里我们想说一下技术之外的心理上的感受:“实践出真知”,“实践是检验真理的唯一标准”,这些话都说明了实践在追求真理的过程中的重要性。在训练的过程中,我们发现以前学的很多知识在动手操作的过程中都立体丰富了许多,同时也补充了很多我们所不知道的细节,比如按键的消抖处理和电路中地线和电源线应该分离布设效果较好。通常我们在学习之后不会在实践中很好的把它们运用到一起,说白了就是用得不够自如,说到底还是学得不够灵活。但通过训练我们意识到了这一点,而且我们也认识了很多芯片,这为我们以后的工作和学习打下了很好的基础。 课设过程中我们也充分暴露了一些性格上的缺点,比如不够细心等等。有的时候真的很耽误事,浪费了很多时间,走了很多弯路,这会对我们以后的职业生涯产生一些负面的影
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025创意机构合作合同
- 保税区建设工程项目可行性研究报告(范文)
- 金属配件在铁路建设中的应用考核试卷
- 员工宿舍用火管理制度
- 车载设备车载芯片设计与集成考核试卷
- 场地材料堆放管理制度
- 多次实行静默管理制度
- 在押人员用餐管理制度
- 地产公司奖罚管理制度
- 宝钢集团门禁管理制度
- 创意美术《版画恐龙化石》课件
- 电梯机房操作规程
- 鲁科版四年级下册英语 复习
- 餐饮业劳务合同
- 广联达BIM智慧工地
- 安全生产教育培训记录表
- 电梯参数及配置要求
- -高考体育单招真题现代文专项阅读汇编(含答案)-备战2023届高考体育单招语文一轮复习之现代文阅读复习之一
- GB/T 3733.1-1983卡套式端直通管接头
- GB/T 1689-1998硫化橡胶耐磨性能的测定(用阿克隆磨耗机)
- GA/T 954-2011法庭科学工具痕迹中凹陷痕迹的检验规范
评论
0/150
提交评论