基于c51单片机简易计算器的课程设计论文(编辑修改稿)内容摘要:

数码管点亮的字位码。 由于采用的是共阴数码管,所以只有该位数码管对应的 为 1,其他位 位 0,点亮延时 10MS。 然后 P1 口输出数值十位七段码, 位 1,数值十位数码管点亮,延时 10MS。 接着 P1 口输出数值百位七段码, 为 1,数值百位数码管点亮,延时 10MS。 最后 P1 口输出数值千位七段码, 为 1,数值千位数码管点亮,延时 10MS。 发光二极管 LED 是单片机应用系统中的一种简单而最常 用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。 因而作为典型的外围器件,LED 显示单元是反映系统输出和操作输入的有效元器件。 LED 具备数字接口可以方便的和单片机引脚连接;它的优点是价格低,寿命长,对电压电流的要求低以及容易实现多路等,因而在单片机应用系统中获得了广泛的应用,所以在此设计中我首先选用了 LED作为显示器件。 如图 310所示: 图 36 数码显示管 11 4. 程序设计 本方案中的程序设计采用了模块化设计,各部分程序都分别进行独立的设计,最后主程序通过调用各模块程序来运行,编 程中所使用的语言全部都是 C语言,可以 利用 keil 软件进行灵活的编译,编译完成后也可生成 HEX 文件,利用 ISP编程软件通过串口写到单片机中。 本方案程序设计中部分 包括主程序模块、液晶显示模块、功能按键和控制输出等部分。 下面仅仅叙述了各部分程序设计的基本思想和流程图,详细程序请参阅附录。 读键输入程序流程图 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码 —— 键码。 为了得到被按键的键码,现使用行扫描法识别按键。 列扫描信号进行读入行的信号判断该列是否有列的输出 —— 是则进行按照行列计算键盘的值,查表取得键码并返回 —— 若否则进行再次扫描。 程序框图如下 4— 1 图: 12 键盘输入流程图 4— 1 开始 初始化地址 读入行扫描信号 输出列扫描信号 等待按键释放 该列有信号。 四列扫描完。 返回 根据行列计算键值 返回 列扫描信号位移 查表得键码 是 否 是 否 13 LED显示程序流程图设计 LED 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们需要的数位,因此根据 LED 数码管的驱动方式的不同,可以分为静态式和动态式两类。 A、 静态显示驱动: 静态驱动也称直流驱动。 静态驱动是指每个数码管的每一个段码都由一个单片机的 I/O 埠进行驱动,或者使用如 BCD 码二 十进位 *器 *进行驱动。 静态驱动的优点是编程简单,显示亮度高,缺点是占用 I/O 埠多,如驱动 5个数码管静态显示则需要 5 8=40 根 I/O埠来驱动,要知道一个 89S51 单片机可用的 I/O埠才 32 个呢。 故实际应用时必须增加 *驱动器进行驱动,增加了硬体电路的复杂性。 B、 动态显示驱动: 数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的 8 个显示笔划 a,b,c,d,e,f,g,dp 的同名端连在一起,另外为每个数码管的公共极 COM 增加位元选通控制电路,位元选通由各自独立的I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位元选通 COM 端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就会显示出字形,没有选通的数码管就不会亮。 透过分时轮流控制各个 LED 数码管的 COM 端,就使各个数码管轮流受控显示,这就是动态驱动。 在轮流显示过程中,每位元数码管的点亮时间为 1~ 2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的 I/O 埠,而且功耗更低。 综上所述我们在本设计方案中选用了动态显示。 14 6 位 LED 显示的程序框图如图 42所示: 图 42 LED显示 流程图 主程序进行程序中用到的一些存储单元的初始化,数值显示和 4*4键盘扫描。 首先,进行存储单元初始化,给数码管显示单元 30H33H 赋予“ 0000”字形数据,将数值计数单元,存储单元, 23H25H,34H37H,38H,39H,3AH,3BH,3CH,赋予初值零。 之后,调用键盘扫描子程序,和数码管显示数据转换程序,数码管动态显示子程序。 主程序不断进行键盘扫描,数码管显示数据转换子程序和动态显示子程序。 首先初始化参数,送 LED 低位显示“ 0”,功能键(“ +” 、“ ” 、“ *” 、“ /” 、 “ +” )位不显示。 然后扫描键盘看是否有键输入,若有,读取键码。 判断键码是数字键、清零键还是“ +” 、“ — ” 、“ *” “ /” ,是数值键则送 LED 显示并保存数值,是清零键则做清零处理,是功能键则又判断是“ =”还是运算键,若是“ =”则计算最后结果并送 LED 显示,若是运算键则保存相对运算程序的首地址。 15 运算主程序框图如 43所示: 图 43 运算主程序框图 在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。 设计的中心思想是把一个复杂应用程序按整体功能 划分成若干相对独立的程序模块,各模块可以进行单独的设计、编程和调试,然后组合起来。 这种方法便于设计和调试,容易实现多个程序共存,但各个模块之间的连接有一定的难度。 根据需要我们可以采取自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步完成,最终完成一个复杂程序的设计。 这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序 16 产生影响。 功能和操作:加减乘除运算和显示。 A: 上电后,屏幕初始化,按下“ ON/C”键。 B: 计算。 按下数字键,屏幕显示要运算的第一个 数字,再按下符号键,然后再按下 数字键,屏幕显示要运算的第二个数字,最后按下 “﹦ ”号键,屏幕上显示出计算结果。 C:如果要再次计算,可以按下 “ON/C”键清零,或者按下单片机的复位键,重新初始化。 硬件联系图如下图: 硬件连线图 17 5 结论 课程设计是培养学生运用所学的专业知识,发现,提出,分析和解决实际问题,锻炼实际动手能力的重要。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。