单片机及嵌入式系统.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机及嵌入式系统

本 科 实 验 报 告 课程名称: 实验项目: 自动报时数字钟 实验目的 通过设计一个自动报时数字钟,提高单片机系统综合应用能力,了解单片机工作原理及开发流程,熟练掌握51单片机开发环境及下载软件的应用。 实验内容 (一)、基本部分 使用数码管的低六位分别显示时、分秒。 使用第七位指示上午下午,符号‘A’表示上午,符号‘P’表示下午。 可以通过按键分别调整小时位和分钟位。 整点报时:到达整点时以第八位数码管闪烁的方式报时,使用‘8’作为闪烁的内容,闪烁频率为2Hz,持续时间从xx.00.00到xx.00.05。 发挥部分 闹钟功能:在以上基础上考虑增加定时闹铃功能。 12/24小时制转换:通过一个按键设置时钟显示模式为12小时或24小时制。 万年历:增加万年历功能,可以按键选择或循环显示年、月、日、星期。 可以通过按键调整年、月、日、星期。 采用LCD12864或LCD1602液晶进行显示及其他(如计算器等)。 计算机 单片机开发软件、下载工具 单片机最小系统实验板 部分子程序模块流程图 硬件介绍 实物图: 本实验硬件部分使用KDMCU-51开发板仿真平台进行设计,通过开发板自带键盘进行输入控制,通过数码管进行显示输出,同时运用单片机的定时器、寄存器功能,对软件部分进行定时,存储操作。 硬件的选择 1、8位7段码数码管:7段码数码管为共阳极显示器。本系统中采用硬件实现地址译码,每一位数码管均分配一个独立地址,操作控制简单。并且,数码管的功能已经可以满足本实验的要求的功能。液晶显示,虽说也能满足需求,但由于液晶还有其他功能,如汉字显示等。如果使用液晶,会造成功能的浪费,以及成本的价格的上升,同时反应速度相对的缓慢。 2、矩阵式键盘:键位置判别方法为扫描法。扫描法是先使列(行)线全输出低电平,然后判断行(列)线状态,若行线全为高电平,表示无键被按下;若行线不全为高电平表示有键按下,然后依次使列线为低电平,再判断行线状态,当行线全为高电平时,表示按下的键不在本列;当行线不全为高电平时,表示按下的键在本列,把此时的行线状态与列线状态和在一起即为被按下的键的位置。 USB接口:通用串行总线,是一种快速、灵活的总线接口。与其他通信接口比较,USB接口的最大特点是易于使用。 五、设计思路: 基本的时钟显示: 首先要解决实现1秒的问题,我们采用了2ms的定时器中断时间间隔 根据2*10^-3=(65536-T0)*1/(12*10^6)*12 得到To=63536=F830H =THO=F8H;TL0=30H 总共用了5个计数器完成了时间的进位和表示。 上下午与24小时制: 时钟本身为24小时制; 设置了布尔变量timechange; =1时24进制; =0时12进制,显示A或P,并在下午进行转换(-12)运算。 调整时间: 加一减一……无须解释。 整点报时: 一秒内闪烁两次,要产生2hz脉冲,周期=0.5s,因此在程序中体现为对0.5s取模 万年历和日期的显示和调整: 与时间的现实和调整本质一样,在日期中加入了闰年的判断,非2月30或31天的判断。 附加:秒表 取最低位计数器(0.01s),不显示时,显示分、秒、毫秒。 缺点:在本次试验中我们尽取了最低位计数器,通过累加和除法算出分和秒,由于用的 是int类型(-32768~32767),因此时间过长会有溢出。 9 初始化T0 getkey==1? getkey==0 用户定义的键盘 和显示处理 主程序 main() NO YES 装载TH0、TL0 调用leddisp(); 更新显示 control_readkey==1? 调用readkey(); 扫描一次键盘 control_readkey取反 中断返回 T0中断 intT0() 每4ms更新 一位显示 NO YES 每8ms扫描 一次键盘 lednum==? lednum==0? 显 示 led1 显 示 led2 显 示 led8 显 示 led5 显 示 led7 显 示 led6 显 示 led3 显 示 led4 lednum==7 子程序返回 lednum-- 显示更新函数 leddisp() 4 5 3 2 1 7 0 6 YES NO first_row=0; second_row=0; M_key=KEY; 读键盘 M_key==0xff? 判断是否有按键 first_getkey==0? 是不是第一次按 first_getkey=1 first_getkey=0; keyon=0; 子程序返回 first_row=0; s

文档评论(0)

ytuozhuangek + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档