好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

简易的数码管显示系统实验报告.doc

7页
  • 卖家[上传人]:s9****2
  • 文档编号:458237352
  • 上传时间:2023-10-03
  • 文档格式:DOC
  • 文档大小:127.50KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • HEFEI UNIVERSITY工具软件应用课程设计 BACHELOR DISSERTATION题 目: 简易数码管显示系统 系 别: 电子信息与电气工程系 学 号: 专业(班级): 参与人姓名: 完 成 时 间: 简易数码管显示系统一. 课程设计目标及内容利用单片机设计一个简易的数码管显示系统,实现0-59秒自动计数.要求:l 可使用用软件延时或定时中断的方法实现0-59秒自动计数。

      l 使用6位数码管的第1、第2位显示当前数值二. 总体设计方案根据设计要求,要想只用数码管的两位显示,必然要先位选,再段选,最后到59后还要重新开始,所以这里应该有个置零,又因为要循环,添加一个死循环即可三. 硬件设计及分析 数码管是单片机控制系统中最常见的外部元件,常用来指示系统采集值、系统存储值或运行的结果.数码管是一种半导体发光器件,其基本单元是发光二极管数码管按段数分为7段数码管和8段数码管,8段数码管比7段数码管多一个发光二极管单位;按能显示多少个“8”可分为1位、2位、4位等数码管;按发光二极管单位元连接方式分为共阳极数码管和共阴极数码管,其中共阴级输入高电平有效,共阳级输入低电平有效.数码管中的8个发光管称为段,分别是a段、b段、c段、d段、e段、f段、g段、h段,其中h段是小数点(如右图).数码管的数码与显示段位对应关系如下表数值显示的段位数值显示的段位0a、b、c、d、e、f5a、c、d、f、g1b、c6a、c、d、e、f、g2a、b、d、e、g7a、b、c3a、b、c、d、g8a、b、c、d、e、f、g4b、c、f、g9a、b、c、f、g根据实验要求,所需元件清单如下:元件名称所属类所属子类7SEG-MPX6—CC-BLUEOptoelectronics7—SegmentAT89C51Microprocessor ICs8051 Family电路图如下图:四. 软件设计及分析要想只用6位数码管的两位显示0—59循环,首先要选定位置,指定哪一块显示十位数或个位数,即位选.然后在该位置上显示数字,这里需要个for循环,让数字递增,假定数字设为n,那么n/10就是十位数字,n%10就是个位数字,先显示个位数字,然后再显示十位数字,由于十位数不经常变动,所以选取适当的延迟时间,利用人眼的视觉延迟效果即可完成0-59的演示,循环结束后,令n置零,在最外面加个死循环,即可完成0-59循环演示。

      简易设计框图如下:先位选第二位,然后段选显示n/10(十位数),延时先位选第一位,然后段选显示n%10(个位数),延时五. 调试结果及说明将Keil中生成的hex文件添加至Proteus文件中,准备好后,进行Proteus与Keil联合仿真,仿真结果如下:观察后基本满足实验要求,但是刚开始时delay函数延时时间调的较长,会出现如下情况:查阅资料后我才发现,原来0—59显示实际上是显示个位上的数字然后再显示是十位上的数字,0—0、1—0、2—0…… ‘同时’将两个数字显示在数码管上并非真正同时显示在数码管上,而是两个数码管依次显示,当然频率很高因为视觉暂留,从而让人误认为两个数字是同时显示的六. 项目总结通过本次项目,我了解了数码管的工作原理,对Proteus和Keil的使用更加熟练,同时也让我认识了“视觉暂留”概念,在这次实验基础上,我们小组又做出了0—999的循环显示,不仅很有成就感,还增强了团队协作能力七. 参考文献陈海宴51单片机原理及应用-—基于Keil C与Proteus【M】.北京:北京航天航空大学出版社,20133附:/***********必要的变量定义************/#include〈reg51.h〉#define uint unsigned int#define uchar unsigned charUcharcode table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//共阴极数码管编码表uchar code address[2]={0xfe,0xfd};//数码管位选void delay(uint);/***********主程序************/void main(){uchar m=0;while(1)//死循环{for(;m<60;m++){P2=address[0]; //位选(个位数)P1=table[m%10];//个位数字delay(5000);P2=address[1];//位选(十位数)P1=table[m/10];//十位数字delay(5000);}m=0;//置零,重新开始}}/******延时子程序******/void delay(uint m){while(m--);}。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.