基于AT89C51单片机的电子万年历设计 下载本文

黑龙江东方学院本科生毕业论文(设计)

怎样测量数码管引脚,分共阴和共阳:找公共共阴和公共共阳首先,我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的。也可以直接用数字万用表,红表笔是电源的正极,黑表笔是电源的负极[6]。

3.5.3 显示电路的整体实现

如图3-7所示,显示电路共包含14位数码管外加4个LED发光二极管,数码管的段选部分由P0口控制,即数码管的段选端并联与P0口,数码管的段控端a、b、c、d、e、f、g、dp分别接到P0口的P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7口线上,段选部分与P0口之间接上拉电阻来输入高电平与增强驱动电流,电阻的大小可影响数码管的亮度,由于我没有外加其他驱动电路因此我选择1K的排阻来增加驱动能力;数码管的位选由P1口和P2口控制,每个数码管的位控线单独占用单片机P1口和P3口一根输出口线,如果发现数码管还是不够亮的话,可在位选端加NPN三极管放大电流,此时要加限流电阻以免数码管被烧。在时分秒之间我各设置了2个LED做为时间分隔符来随秒位每秒闪烁一次,更加的美观[7]。

图3-7 数码管显示部分

13

黑龙江东方学院本科生毕业论文(设计)

第4章 系统程序设计与软件仿真

4.1 主程序的设计

系统程序主要包括主程序,读出时钟子程序和显示数据刷新子程序。 程序详情请看程序附件;主程序流程图如图4-1和4-2所示:

14

开始 清显示缓冲区 初始化定时计数器 赋时钟初值 开定时器000 调整时间 数码管显示当前时钟值 图4-1 主程序流程图1

黑龙江东方学院本科生毕业论文(设计)

15

定时中恢复初值,保中断4000次 Y N 0.1秒加1 0.1秒单元清0.60秒到吗? Y 秒单元清0,60分到Y 分单元清0,24小时到Y 时单元清0 N N 秒加1 分加1 N 时加1 堆栈返回 图4-1 主程序流程图1

黑龙江东方学院本科生毕业论文(设计)

时区单元 日加1,并用查表方式区分大、小、平、润月是否分别为31、30、28、29? 日清0并加1 星期加1,并判断是否=7? 星期清0 月加1并判断是否=13? 现场恢复 月清0并且加1 年加1,并分别除以4及400,如余数为0,则为闰年,如不为0则为平年,余数放在B寄存器 返回

图4-2 主程序流程图2

4.2 程序代码

C语言是面向结构化程序设计的语言,具有结构化的控制语句,以函数作为程序模块以实现程序的模块化C语言允许直接对位、字节和地址进行操作,能实现汇编语言的大部分功能。因此C语言即具有高级语言又具有低级语言的功能,所以人们把C语言称为是中级语言。 数据类型丰富。C语言除具有基本数据类型整形(int)、实型(float和double)、字符型(char)外,还有各种构造类型。利用这些数据类型可以实现复杂的数据结构,如堆栈、队列、链表等,C语言生成的目标代码质量高,程序执行效率高.见附录C。

16