当前位置:文档之家› 独立按键控制数码管

独立按键控制数码管

青岛农业大学海都学院
单片机课程设计实习报告
院系工程系
专业 2014级电气Z1班
学号 201471019
姓名隋永博
实习时间第11周
实习课程单片机应用课程设计
2015年11月6日
按键控制数码管加减显示
目录
一、前言 (3)
二、设计要求 (3)
三、系统硬件设计与说明 (4)
3.1系统组成及总体框图 (4)
3.2 AT89C51 (4)
四、系统软件设计与说明 (5)
4.1 软件部分的程序流程图 (5)
4.2 源程序 (5)
五、仿真过程描述 (7)
六、总结 (8)
一、前言
随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。

基于当前市场上的智能数字市场需求量大,其中数码管显示技术就是一个很好的应用方面。

单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。

以液晶显示技术的发展为背景,选择了比较常用的T6963C内置控制器型图形LCD(液晶显示嚣)模块,从应用角度介绍了该控制器的特点和基本功能,并描述了单片机控制T6963CLCD模块的显示机理。

在此前提下以C51硬件开发语言为基础,给出了8051单片机与T6963C
的接口电路框图,并以字符、图形的具体显示方法为例简要介绍了软件的设计流程及实现。

二、设计要求
名称:K1-K4控制数码管移位显示
说明:按下K1时加1计数并增加显示位,
按下K2时减1计数并减少显示位,
按下K3时清零。

三、系统硬件设计与说明
3.1系统组成及总体框图
图1 系统硬件总图
3.2 AT89C51
该课程设计中我们选用的芯片是AT89C51。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash
只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。

AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

四、系统软件设计与说明
4.1 软件部分的程序流程图
4.2 源程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//段码
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//位码
uchar code DSY_Index[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //待显示到各数码管的数字缓冲(开始仅在0 位显示0,其他黑屏)uchar Display_Buffer[]={0,10,10,10,10,10,10,10};
//延时
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
void Show_Count_ON_DSY()
{
uchar i;
for(i=0;i<8;i++)
{
P0=0xff;
P0=DSY_CODE[Display_Buffer[i]];
P2=DSY_Index[i];
DelayMS(2);
}
}
//主程序
void main()
{
uchar i,Key_NO,Key_Counts=0;
P0=0xff;
P1=0xff;
P2=0x00;
while(1)
{
Show_Count_ON_DSY();
P1=0xff;
Key_NO=P1;
//P1 口按键状态分别为K1-0xfe,K2-0xfd,K3-0xfb
switch(Key_NO)
{
case 0xfe: Key_Counts++;
if(Key_Counts>8) Key_Counts=8;
Display_Buffer[Key_Counts-1]=Key_Counts;
break;
case 0xfd: if(Key_Counts>0)Display_Buffer[--Key_Counts]=10; break;
case 0xfb: Display_Buffer[0]=0;
for(i=1;i<8;i++) Display_Buffer[i]=10;
Key_Counts=0;
}
//若键未释放则仅刷新显示,不进行键扫描
while(P1!=0xff) Show_Count_ON_DSY();
}
}
五、仿真过程描述
1、在protel99se环境下,根据电路图依次从库中调出元器件,然后将各元器件按照电路图连接起来。

2、打开keil uvision,然后新建一个工程,新建一个文件,将新建的文件添加到工程里面去,在新建的文件里面编写C语言程序。

3、当程序可以运行无误后,在target中的OUTPUT里面打钩,生成.HEX文件。

4、在protel99se里面的at89c51芯片上面双击,在Program File选项里面选取刚生成的.HEX 文件,然后进行仿真。

5、第一次仿真时没有看到理想的结果,分析原因是由于延时太短,于是更改程序中的延时,再次进行以上操作,结果成功。

六、总结
作为一名电气工程及其自动化专业的大四学生,我觉得做这次课程设计是十分有意义的,而且是十分必要的。

虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我们发现效率很高,这是我们做这次课程设计的又一收获。

然后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我们受益终身。

本次课程设计是大学学习阶段一次非常难得的理论与实践相结合的机会,通过这次比较系统的项目设计提高了我们运用所学的专业基础知识来解决面临实际问题的能力。

为了尽早完成作品,我们坚持努力,经过课下大量的实践操作,我们丰富了各种器件常识,收获了难得的实践经验。

在单片机C语言方面也有了更深层次的理解,也大大增加了自己在编程方面的兴趣,这次课程设计中,我请教老师,同学,去图书馆,上网查资料,直至最后完成课程设计,心里有一股成就感,我想在这会成为我以后在这条路上努力的动力。

相关主题