欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    课程设计单片机(共28页).doc

    • 资源ID:13923454       资源大小:194KB        全文页数:28页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计单片机(共28页).doc

    精选优质文档-倾情为你奉上专心-专注-专业东北石油大学课程设计任务书课程 单片机课程设计 题目 LED电子钟的制作 一、任务 用单片机设计一个电子钟,采用LED 数码管来显示时间。二、设计要求1显示格式为:XX:XX:XX, 即:时:分:秒。2时间可采用12 小时制显示或24 小时制显示,采用12 小时显示时必须在另外一个数码管上显示A(表示上午)或B(表示下午)。3设置一个按键用于时间显示方式的切换。4系统上电后从上电时初始化显示: 12-00-00开始计时。5能进行时间的调整,可暂停时间的变动,暂停时一位数码管上显示字母H三、参考资料1 吴杰.基于ISP 技术的电子公告牌系统J.科技资讯2008.NO.14:83-87.2殷晓安,吴明亮.基于单片机的LED点阵显示条屏控制系统设计J.2008,4月.154-155.3侯玉宝 基于Proteus的51系列单片机设计与仿真M电子工业出版社,2008.2702884李川,汪秋蒙.ISP技术的原理及实现方法J.科技资讯.2007,35期:93-94.5刘文秀.单片机应用系统仿真的研究J.现代电子技术.2005, 第286 期2011年 7月 13 日目 录第1章 绪论围绕电子钟系统的设计与开发工作进行研究和实践,详细介绍了电子钟系统的整体结构、硬件设计、软件设计,系统方案以及其的开发和具体实现。介绍一种基于在系统可编程技术和C51编译器配有集成开发的新型电子钟的设计方法,阐述了其工作原理和软硬件设计。在硬件上,用KEIL公司的C51大规模集成芯片对其外围电路进行集成,用1片8051实现了几十片分离元件才能实现的功能,几乎将整个系统下载于同一芯片中,实现了所谓的片上系统,从而大大简化了系统结构,增强了系统的可靠性和性价比。该电子钟特别适用于家庭、办公大楼、公共场所等。1.1 LED电子钟概述LED电子钟的构成型式有多种,其中典型的有两种。一种把所需展示的广告信息烧写固化到EPROM芯片内,能进行固定内容的多幅汉字显示,称为单显示型;另一种在机内设置了字库、程序库,具有程序编制能力,能进行内容可变的多幅汉字显示,称可编程序型。目前,国内的LED电子钟大部分是单显示型,其显示的内容相对较少,显示花样较单一。一般在产品出厂时,显示内容就已写入显示屏控制系统中的EPROM芯片内,当需要更换显示内容时就非常困难,这样使该类型的显示屏使用范围受到了限制。国内的另一种LED电子钟可编程序型LED电子钟,虽然增加了显示屏系统的编程能力,显示内容和显示花样都有所增加,但也存在着更换显示内容不便的缺点。随着社会经济的迅速发展,如今的广告牌都存在着显示内容丰富、信息量大、信息更换速度快等特点。因此传统的LED电子钟控制系统已经越来越不能满足现代广告宣传业的需要。而利用PC机通信技术控制LED电子钟,则具有显示内容丰富,信息更换灵活等优点。1.2 LED电子钟技术状况时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。 现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒的显示时间的功能,还可以进行时和分的校对,片选的灵活性好。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法以及借助键盘直接控制整时的调整,本设计由单片机AT89S51芯片,LED数码管和键盘为核心,辅以必要的电路,构成了一个单片机电子时钟。目前单片机应用于各个领域,其应用于仪器仪表中显得更为优越。以单片机制成的电子时钟具有计时准确,功耗低的优点。从而得到了各界的领域的广泛应用。单片机正处在微控制器的全面发展阶段,各公司的产品在尽量兼容的同时,向高速,强运算能力,寻址范围大以及小型廉价方面发展。单片机的发展推动了应用系统的发展,应用系统的发展又反过来对单片机提出了更高要求,从而促进单片机的发展。单片机正在向着功能更强,速度更快,功耗更低,辐射更小的方向发展。随着集成度的不断提高,把众多的外围功能器件集成在片内已经具备了充分的条件。这也是单片机以后发展的重要趋势。除了一般必须具有的ROM、RAM、定时器/计数器、中断系统外,随着单片机档次的提高,以适应检测、控制功能更高的要求,片内集成的器件通常还有电源监控与复位电路、WDT、A/D转换器、DMA控制器、中断控制器、锁相器、频率合成器、字符发生器、声音发生器、CRT控制器、译码驱动器等。由此来看,此次设计也是发展比较好的一种基于单片机的LED电子时钟。1.3 本设计任务本设计主要分为两部分:硬件电路及软件程序。而硬件电路又大体可分为单片机小系统电路、电源电路、上电复位电路、A/D转换电路、LED显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用汇编语言编程,利用伟福软件对其编译和仿真,详细的设计算法将会在程序设计部分详细介绍。第2 章 总体方案论证与设计2.1 单片机芯片选择方案方案一:80C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器。主要性能有:与MCS-51单片机产品兼容、全静态操作:0Hz33Hz、 三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符、易编程8。方案二:AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM)。主要性能有:兼容MCS51指令系统、32个双向I/O口、256x8bit内部RAM、3个16位可编程定时/计数器中断、时钟频率0-24MHz、2个串行中断、可编程UART串行通道、2个外部中断源、6个中断源、2个读写中断口线、3级加密位、低功耗空闲和掉电模式、软件设置睡眠和唤醒功能7。从单片机芯片主要性能角度出发4,本数字电子钟单片机芯片选择设计采用方案一。2.2 数码管显示选择方案方案一:静态显示。静态显示,即当显示器显示某一字符时,相应的发光二极管恒定导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小电流能获得较高的亮度,且字符不闪烁。但因当所需显示的位数较多时,静态显示所需的I/O口数较大,造成资源的浪费。方案二:动态显示。动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案二。2.3 数码管驱动选择方案方案一:上拉电阻驱动方式。数码管段码与接有上拉电阻的单片机芯片I/O口相连,通过编程,单片机芯片即控制段码电平的高低。该方式经费低,但实物制作较复杂。方案二:74LS245芯片驱动方式。数码管段码与74LS245芯片B口相连,74LS245芯片A口与单片机芯片I/O口,通过编程,单片机芯片即可控制段码电平的高低。该方式实物制作简单,增强驱动数码管段码能力。从实物制作简易程度与驱动数码管段码能力角度出发,本数字电子钟数码管驱动选择设计采用方案二。2.4 总体硬件组成框图单片机模块按键模块按键模块按键模块时钟模块LED显示模块图2-1总体硬件组成框图整个系统用单片机作为中央控制器,由单片机执行采集芯片内部时钟信号,时钟信号通过单片机I/O口传给单片机,单片机模块控制驱动模块驱动显示模块,通过显示模块来实现信号的输出、LED的显示及相关的控制功能。系统设有按键模块用于对时间进行调整及扩展多个小键盘,系统整体框图如图2-1所示。第3章 系统硬件设计3.1 电源电路设计本数字电子钟设计所需电源电压为直流、电压值大小5V的电压源 。从硬件实物设计简易程度与经费方面考虑,用两节电压值大小2.5V干电池与电路电压源引脚相连接即可达到硬件设计要求。即本数字电子钟设计用两节电压值大小2.5V干电池做硬件电路电压源。电路如图3-1所示。图3-1电源电路图3.2 按键电路设计 本数字电子钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求5。电路如图3-2所示。图3-2按键电路图3.3 时钟电路设计单片机芯片可使用内部时钟电路和外部时钟电路两种方式产生电路所需的时钟脉冲,内部时钟电路实现可用石英晶体和微调电容外接即可达到,外部时钟电路实现需要一个外部脉冲源引入脉冲信号以保证个单片机之间时钟信号的同步。从硬件实现难易角度考虑,内部时钟电路的实现比外部时钟电路的实现更简易。既本数字电子钟设计所需的时钟源采用内部时钟电路实现。所用定时方式为工作方式1,石英晶振为12M,即最小定时时间为1us,最大定时时间约为65.5ms,其电路图如下图3-3所示。 图3-3 时钟电路图3.4 驱动电路设计从实物制作简易程度与驱动数码管段码能力角度出发,本数字电子钟设计采用数码管段码与74LS245芯片B口相连,74LS245芯片A口与单片机芯片I/O口,通过编程,单片机芯片即可控制段码电平的高低的方式实现数码管段码控制,74LS245芯片图如下图3-4所示。图3-4 74LS245芯片图3.5 LED显示电路设计数字电子钟设计的显示模块用8个一位数码管实现,也可用两个四位一体数码管实现。两种实现方式实现效果一样1。从实物制作的难易程度出,本数字电子钟设计采用两个四位一体数码管实现。即数码管引脚与单片机芯片和74LS245对应引脚相连接2。电路如图3-5所示。图3-5 LED显示图3.6 元器件清单表3-1元器件列表名称数量型号芯片1片AT89S52四位一体数码管2个共阴极按键5个晶振1个12M电容2个30p74LS2451片电阻2个220欧电阻1个1.5k发光二极管1个LED第4章 系统的软件设计软件是该LED电子钟控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。4.1 主程序设计主程序流程首先由主程序进入,然后到堆栈区,显示缓冲单元清零,再设置定时器工作方式,装载计数初值,定时开始,开中断并设置循环次数,最后调出显示子程序,等待中断请求以重复上述过程。主程序流程图如图4-1所示:开始主程序定义堆栈区显示缓冲单元清0定时器0工作方式1装载计数初值定时开始开中断设置循环次数调出显示子程序等待定时中断请求图4-1主程序流程图4.2 中段服务程序设计进入中断程序后,首先初始化驱动器件,然后调整指向字模的指针,进入字模处理程序,给驱动器件跳变完驱动,检查P指针是否跳到结束位,若跳到结束位,指针指回字模数组首位,延时后返回到字模处理程序;若未跳到结束位,则直接返回到字模处理程序。中断服务程序流程图如图4-2所示:开始YN初始化驱动器件字模处理程序调整指向字模的指针给驱动器件跳变完驱动p是否指到结束位指针指回字模数组首位延时图4-2 中断服务程序流程图4.3 显示子程序设计进入显示子程序后,首先检查切换键是否按下,若有,则判断小时是否大于等于12,若大于等于12,则标志位显示B;若小于12,则标志位显示A。若无切换键按下,则标志位显示A,并依次分离显示秒、分、时。显示子程序流程图如图4-3所示:开始显示程序切换键是否按下?小时大于大于等于12?标志位显示B标志位显示A分离秒值个位、十位时分秒个位、十位显示秒十位、个位分离分值个位、十位显示分十位、个位分离小时个位、十位显示小时十位、个位NYNY图4-3显示子程序流程图第5章 系统调试与测试结果分析5.1使用的仪器仪表 数字万用表DT9203单片机仿真器WAVE6000烧写器 GF2100双踪稳压稳流电源DH1718E-55.2系统调试根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试10。5.2.1硬件调试对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。把相应编译好的目标程序代码加载到单片机芯片AT89S52,可接上5V电压源即开始进行硬件电路的调试工作。如果显示结果不符合设计要求,即检查电路各连接点是否正确连接,再次进行硬件电路的调试工作,或是检查代码程序是否符合硬件电路的设计,若有错即进行相应的修改,编译后,再进行硬件电路的调试工作。如此反复操作,直到调试出正确结果。5.2.2软件调试软件调试采用单片机仿真器WAVE6000L及微机,将编好的程序进行调试,主要是检查语法错误。(1) 在计算机上运行程序调试软件Keil,进行程序调试,若显示0错误(S),0警告(S)即证明程序代码正确。(2)在Proteus软件画好的电路原理图中加载程序代码到单片机芯片AT89S52中,进行模拟仿真3。若出现错误,查看错误后进行相应修改再进行调试与模拟仿真,直到调试出正确结果6。如图5-1所示:图5-1软件调试图5.2.3硬件软件联调 将调试好的硬件和软件进行联调,主要调试系统的实现功能9。5.3 测试结果此次系统设计结果较好,电子钟能够准确显示时间(显示格式为:时时,分分,秒秒),可随时进行时间调整,时间可采用12 小时制显示或24 小时制显示,采用12 小时显示时可在标志位数码管上显示A(表示上午)或B(表示下午),可暂停时间的变动,暂停时一位数码管上显示字母H。如图5-2所示:图5-2仿真效果图结 论本单片机LED电子钟系统的功能基本符合显示格式为:XX:XX:XX,即时:分:秒。时间可采用12 小时制显示或24 小时制显示,采用12 小时显示时必须在另外一个数码管上显示A(表示上午)或B(表示下午)。设置一个按键用于时间显示方式的切换。系统上电后从上电时初始化显示: 12-00-00开始计时,能进行时间的调整,可暂停时间的变动,暂停时一位数码管上显示字母H,可按自己的要求设置扩展的小键盘个数设计任务的要求,经过测试数据显示, 系统的可靠性已经基本能够达到实际电子钟的设计要求,同时本单片机数字电子钟系统具有扩展性。参考文献1吴杰 基于LED技术的电子公告牌系统J.科技资讯2008.NO.14:83-87.2殷晓安,吴明亮 基于单片机的LED控制系统设计J.2008,4月.154-155.3侯玉宝 基于Proteus的51系列单片机设计与仿真M电子工业出版社,2008.2702884张友德 单片微型机原理、应用与实验M.上海:复旦大学出版社,2007.225256.5蔡希彪,曹洪奎 单片机电子时钟系统的设计与仿真 J;中国科技信息; 2007年04期6曹洪奎,马莹莹 基于Proteus单片机系统设计与仿真 辽宁工学院学报2007年04期7谢维成 单片机原理及应用与51程序设计. 北京:清华大学出版社,2006.88万光毅 单片机实验与实践教程M.北京航空航天大学出版社.2005.1.9周润景 基于Proteus的电路与单片机仿真系统设计与仿真M.北京航空航天大学出版社. 2005.10刘文秀 单片机应用系统仿真的研究J.现代电子技术.2005, 第286 期附录1 程序/*描述 电子时钟,LED数码管显示,晶振使用12MHzK1-时调整K2-分调整 K3-秒调整 K4-时间暂停 K5-12小时制和24小时制切换 上电时初始化显示:12-00-00 */#include <reg51.h>#include <intrins.h>unsigned char data dis_digit;unsigned char key_s, key_v;unsigned char code dis_code11=0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00;/0,1,2,3 4, 5, 6, 7, 8, 9, off /共阴数码管unsigned char data dis_buf8;unsigned char data dis_index;unsigned char hour,min,sec;unsigned char sec100; unsigned char flag,flag1,flag2; /falg用于时间停止和启动标志,falg1为12小时和24小时的切换标志,falg2为12小时的上午和下午的切换标志sbit K1 = P10;/用于时的调整sbit K2 = P11;/用于分的调整sbit K3 = P12;/用于秒的调整sbit K4 = P13;/用于时间调整的开关,按下一次暂停时间,再按一次时则开始计时sbit K5 = P14;/用于24小时制和12小时制的切换bit scan_key();void proc_key();void inc_sec();void inc_min();void inc_hour();void inc_hour1();void delayms(unsigned char ms);void main(void) P0 = 0xff; P2 = 0xff; TMOD = 0x11; / 定时器0, 1工作模式1, 16位定时方式 TH1 = 0xd8;/使用12MHz的晶振,定时时间为:10ms TL1 = 0xf0;TH0 = 0xf8; /定时时间为2ms,用于数码管的动态扫描 TL0 = 0x30;hour = 12; min = 00; sec = 00;sec100 = 0;flag = 0; flag1 = 0;dis_buf0 = dis_codehour / 10; / 时十位 dis_buf1 = dis_codehour % 10; / 时个位dis_buf2 = dis_codemin / 10; / 分十位 dis_buf3 = dis_codemin % 10; / 分个位dis_buf4 = dis_codesec / 10; / 秒十位 dis_buf5 = dis_codesec % 10; / 秒个位 dis_buf6 = 0x00; / 关闭该位数码管 dis_buf7 = 0x7f; / 显示 B 表示下午dis_digit = 0xfe; dis_index = 0; TCON = 0x01;/T1:TF1 TR1 T0:TF0 TR0 定时中断:IE1 IT1 IE0 IT0 /外部中断0的触发方式为下降沿触发 IE = 0x8a; / 使能timer0,1 中断,控制IE寄存器的格式:EA - - ES ET1 EX1 ET0 EX0/1 0 0 0 1 0 10 TR0 = 1; /开定时器0 TR1 = 1; /开定时器1 key_v = 0x1f;/定义为K1,K2,K3,K4,K5相应的按键,当没有按下时则为,K1,K2,K3,K4,K5,都为高电平,0x1f while(1) if(scan_key()/先扫描一次是否有按键按下 delayms(10); /延时 if(scan_key() /再次扫描一次是否有按键 按下 key_v = key_s;/将key_s的值传给key_v proc_key(); bit scan_key() key_s = 0x00; /设置key_s先为0key_s |=K5; key_s <<= 1; key_s |= K4; key_s <<= 1; key_s |= K3; key_s <<= 1;key_s |= K2; /K2 -> P1.1,若K2按下则为0,当K2按下时key_s与K2或的结果会使得key_s为0x00,未按下时K2则为1,key_s与K2或的结果会使得key_s为0x01 key_s <<= 1; /将key_s左移一位, key_s |= K1;/K1 -> P1.0,若K1按下则为0,当K1按下时key_s与K1或的结果会使得key_s为0x00或是0x02,没有按下时则得到的结果为0x01或是0x03 return(key_s key_v); /进行逻辑异或运算,相同为0,不同为1. 已经定义了变量:key_v = 0x1f; 如果两个按键都没有按下则是得到0x03,异或的结果是为0void proc_key() if(K4=0) /K4是否按下 flag+; /关闭定时器 TR1=0; /关闭定时器1 dis_buf6 = 0x76; / 显示 H,用于表示设定时间的标志 if(K5=0) flag1+; /flag1的初始值是0,falg1为12小时和24小时的切换标志 if(flag1=1) /24小时制 if(dis_buf7=0x7f) /判断是不是下午 hour=hour+12;dis_buf7=0x00; dis_buf7 = 0x00; / 关闭显示 if(hour >23) hour = 0; if(hour > 9) dis_buf0 = dis_codehour / 10; / 时十位 else dis_buf0 = 0x00; / 当小时的十位为0时不显示 dis_buf1 = dis_codehour % 10; / 时个位if(flag1=2) /12小时制flag1=0;if(hour>12|hour=0) /判断是不是下午,并用于处理24小时制的大于13和等于0的处理 if(hour>12) hour=hour-12;if(hour=0)hour=12;dis_buf7=0x7f; /显示下午 B elsedis_buf7 = 0x77; / 显示 A 表示上午if(hour > 9) dis_buf0 = dis_codehour / 10; / 时十位 else dis_buf0 = 0x00; / 当小时的十位为0时不显示 dis_buf1 = dis_codehour % 10; / 时个位 if(key_v & 0x01) = 0) / K1,当只有K1按下时,则key_s为0x02,没有按下时key_s则为0x03 if(flag1=0) inc_hour(); if(flag1=1) inc_hour1(); else if(key_v & 0x02) = 0) / K2, 当只有K2按下时,则key_s为0x01,没有按下时key_s则为0x03 min+; if(min > 59) min = 0; dis_buf2 = dis_codemin / 10; / 分十位 dis_buf3 = dis_codemin % 10; / 分个位 else if(key_v & 0x04) = 0) / K3是否按下 sec+; if(sec > 59) sec = 0; dis_buf4 = dis_codesec / 10; / 秒十位 dis_buf5 = dis_codesec % 10; / 秒个位 if(flag=2) flag=0;TR1=1;dis_buf6 = 0x00;if(flag1=0)if(flag2) dis_buf7 = 0x77; / 显示 A 表示上午 else dis_buf7 = 0x7f; / 显示 B 表示下午 void timer0() interrupt 1/ 定时器0中断服务程序, 用于数码管的动态扫描/ dis_index - 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量/ dis_digit - 位选通值, 传送到P0口用于选通当前数码管的数值, 如等于0xfe时,/ 选通P2.0口数码管/ dis_buf - 显于缓冲区基地址 TH0 = 0xf8; /定时时间为2msTL0 = 0x30;P2 = 0xff; / 先关闭所有数码管P0 = dis_bufdis_index; / 显示代码传送到P0口P2 = dis_digit; / dis_digit = _crol_(dis_digit,1); / 位选通值左移, 下次中断时选通下一位数码管dis_index+; / dis_index &= 0x07; / 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 ,限定了只扫描8位,当为超过8位时则开始清零. /0x07=0000 0111 dis_index在一个个加一时,则为加到8次。/定时器1的定时时间为10msvoid timer1() interrupt 3 TH1 = 0xd8; TL1 = 0xf0; sec100+; if(sec100 >= 100) /定时1秒的时间 sec100 = 0; inc_sec(); void inc_sec() sec+; if(sec > 59) sec = 0; inc_min(); dis_buf4 = dis_codesec / 10; / 秒十位 dis_buf5 = dis_codesec % 10; / 秒个位 void inc_min() min+; if(min > 59) min = 0; if(flag1=0) inc_hour(); if(flag1=1)inc_hour1(); dis_buf2 = dis_codemin / 10; / 分十位 dis_buf3 = dis_codemin % 10; / 分个位void inc_hour() /12小时制 hour+; if(hour > 12) flag2=flag2; hour = 1; if(hour > 9) dis_buf0 = dis_codehour / 10; / 时十位 else dis_buf0 = 0x00; / 当小时的十位为0时不显示 dis_buf1 = dis_codehour % 10; / 时个位 if(flag2) dis_buf7 = 0x77; / 显示 A 表示上午 else dis_buf7 = 0x7f; / 显示 B 表示下午 void inc_hour1() /24小时制时间 hour+; if(hour >23) hour = 0; if(hour > 9) dis_buf0 = dis_codehour / 10; / 时十位 else dis_buf0 = 0x00; / 当小时的十位为0时不显示 dis_buf1 = dis_codehour % 10; / 时个位void delayms(unsigned char ms) / 延时子程序 unsigned char i; while(ms-) for(i = 0; i < 120; i+); 附录2 仿真效果图

    注意事项

    本文(课程设计单片机(共28页).doc)为本站会员(飞****2)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开