电子钟设计(c语言设计)

上传人:陈** 文档编号:98187074 上传时间:2022-05-29 格式:DOCX 页数:13 大小:105.13KB
返回 下载 相关 举报
电子钟设计(c语言设计)_第1页
第1页 / 共13页
电子钟设计(c语言设计)_第2页
第2页 / 共13页
电子钟设计(c语言设计)_第3页
第3页 / 共13页
点击查看更多>>
资源描述
编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第13页 共13页计算机工程实践实习报告 专 业: 班 级: 姓 名: 学 号: 指导老师: 设计时间: 指导教师对实习报告的评语指导教师签字: 年 月 日一 前 言漫步在繁华的现代化的大都市的大街上,随时都可以看到街上有很多可以用卡取钱的机器(ATM自动柜员机),十字路口的交通灯。我们的手机,我们家里数码电视机、数码音响、遥控器、空调、智能玩具.这些“高科技”看上去是如此的神秘,它到底是怎样构成的,它是通过什么样的程序和什么样的方式来完成这一系列指令的呢?让我们取钱更方便、避免城市的交通混乱和交通阻塞给我们生活带来了处处方便。其实这也是用单片机来控制的,单片机在我们生活中触手可及,它是如此地贴近我们的生活,单片机给我们的生活带来的有如此多的便利。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。科技越发达,智能化的东西就越多,使用的单片机就越多。看来学单片机是社会发展的需求。据统计,我国的单片机年容量已达13亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。特别是沿海地区的玩具厂等生产产品多数用到单片,并不断地辐射向内地, 这说明单片机应用在我国才刚刚起步,有着广阔的前景。培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。面对着学习单片机一个终生受用的职业,不受年龄的限制。同时面对着生活的现代化,我们衣、食、住、行也就越来越依赖各式各样的“高科技”了,也就有很多地方都用到高集成电路IC和单片机。学习单片机,做现代生活的领航人,你还在等什么呢?二 要 求设计1个电子钟,用4位7段码LED显示器,显示当前时间时和分。时和分之间用 2个LED作为分隔,每秒钟小数点闪动1次。用89C2051内部定时器定时,每10ms中断1次,中断100次后秒单元+1,秒单元累加到60时自动清零,分单元+1,分单元累加到60时自动清零,小时单元+1,小时单元累加到24时,又回到0时,0分,0秒。设有校表功能,通过按键可与北京时间校准。按一下S1键,进入“校时”状态,在“校时”状态按一下S2键小时单元+1,按一下S3键小时单元-1。再按一下S1键,进入“校分”状态,在“校分”状态,按一下S2键分单元+1,按一下S3键分单元-1。再按一下S1键,退出“校表”状态。三 原 理 图四 编程思路说明及程序流程图 1. 编程思路定时器0,1在12MHz晶振频率时,最大的计时能力在80ms左右。所以按50ms计算最好。故首先初始化定时器0如下:TH0 = 0xD8;TL0 = 0xF0;通过中断方法来获取时间的计数,使用变量tim来进行计数,当tim=20时,即为一秒。如此即可得出分,时的值。具体看如下程序流程图。2程序流程图 主程序流程图: 图 1;按键设置流程图:第一次按下S1键 Y进入调节小时 N N 按下S3键按下S2键 Y Y小时减一小时加一第二次按下S1键 Y进入调节分 N N 按下S3键按下S2键 Y Y分减一分加一第三次按下S1键 Y退出校分状态 五 程序清单#include AT892051.h#include stdio.h#include string.hunsigned char num10 = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;unsigned char mins = 0;unsigned char secd = 0;unsigned char hours = 0;unsigned char tim = 0;unsigned char count = 0;voiddelayms(unsigned int ms);voidkey(void);voidled(unsigned char n);voidconfig(void); /* delayms */ void delayms(unsigned int ms) unsigned char temp = 125;for(;ms 0; ms-)while(temp 0)temp-;temp = 125;/*interrupt*/void timer0(void)interrupt 1 TH0 = 0xD8; /reload timerTL0 = 0xF0;tim+; /*display 7seg*/void led(unsigned char n) unsigned char i; unsigned char x; x = n; for(i = 0; i 8 ; i+) P3_1 = 0; P3_0 = x & 0x80; P3_1 = 1; x = x1;/*if config button is pressed*/ void key(void) unsigned char temp; P1 = 0xFF; temp = P1 & 0x70;/press config button if(temp = 0x30) delayms(100); /5 P1 = 0xFF; temp = P1 & 0x70; if(temp = 0x30) count = 1;else count = 0; /* config(); */ void config(void) unsigned char temp;P1 = 0xFF;temp = P1 & 0x70;delayms(100);while(count = 1)/config hourP1 = 0xFF;temp = P1 & 0x70;if(temp = 0x60)tim = 0;count = 2;switch(temp)case 0x50: / hour + hours+; if(hours = 24) hours = 0;led(nummins % 10);led(num(unsigned char)mins / 10);led(numhours % 10);led(num(unsigned char)hours / 10); break;case 0x30: /hour -if(hours = 0)hours = 23;else hours-;led(nummins % 10);led(num(unsigned char)mins / 10);led(numhours % 10);led(num(unsigned char)hours / 10); break;default : break;P1 = 0xFF;temp = P1 & 0x70;delayms(100);/100while(count = 2) /config minutesP1 = 0xFF;temp = P1 & 0x70;if(temp = 0x60)TH0 = 0xDF;TL0 = 0xF0;TR0 = 1;EA = 1;tim = 0;count = 3;switch(temp)case 0x50: mins+; if(mins = 60) mins = 0;led(nummins % 10);led(num(unsigned char)mins / 10);led(numhours % 10);led(num(unsigned char)hours / 10); break;case 0x30:if(mins = 0)mins = 59; else mins-;led(nummins % 10);led(num(unsigned char)mins / 10);led(numhours % 10);led(num(unsigned char)hours / 10); break;default : break;P1 = 0xFF;temp = P1 & 0x70;delayms(100); /100count = 0;return;void main(void )led(num0);led(num0);led(num0);led(num0);TH0 = 0xD8;TL0 = 0xF0;TMOD = 0x01;/timer0,16bitTR0 = 1; /enable timer0ET0 = 1; /enable timer0 to interruptEA = 1;/ enale interruptwhile(1) if(tim = 50) P3_4 = 0; P3_5 = 0; if(tim = 100) P3_4 = 1; P3_5 = 1; tim = 0; secd+; key(); if( count = 1) EA = 0;TR0 = 0;delayms(50);/50config(); delayms(10); if(secd =60) secd = 0; mins+; if(mins = 60) mins = 0; hours+;if(hours = 24) hours = 0; led(nummins % 10);led(num(unsigned char)mins / 10);led(numhours % 10);led(num(unsigned char)hours / 10); 六 总结通过本电子表系统的设计,我学到了很多东西。首先,了解了怎样去设计一个应用系统。应用系统需要考虑的稳定性、实用性和编软件时的程序优化性,均在设计过程中涉及到了。其次,更深入体会到了模块化设计系统的优越性,在设计电子表的过程中,我们把系统分为了主程序、中断服务程序、显示程序、延时程序、等几个部分,再逐个编写,单独调试通过,再连接在一起。大大的减小了工作量,这主要体现在调试工作中。最后再将所有程序连接在一起调试,并根据此时系统的稳定性修改程序中的参数,最终系统达到比较好的效果。当然,在调试程序的过程中任务是很艰巨的,经常遇到很多意想不到的错误。另外,在此次课程设计中,更加感到了团结协作的重要性,当一个人陷入困境时他人的帮助十分重要的。大家共同商量还可以发现许多个人无法发现的问题第 13 页 共 13 页
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!