目 录
1 课程设计任务和要求
1.1 设计任务
1.2 设计要求
2 设计方案
2.1 工作原理
2.2 单片机系统方框图
3 电路设计和软件设计
3.1 电路设计
3.2 程序设计流程
3.3 程序清单
4 电路仿真及结果分析
4.1 电路仿真
4.2 结果分析
5 课程设计小结与心得体会
1课程设计任务和要求
1.1 设计任务
利用单片机及4位LED数码管和8个拨码开关做成4位数码管显示拨码开关编码,通过一个拨码开关来生成一个数,并通过4位数码管以十进制方式显示出来,并达到相应的设计技术指标要求。
1.2 设计要求
(1)拨码开关因每一位的开关状态,构成一个有8个二进制位的字节,即读取P1口的数值也就是拨码开关的状态;
(2)将P1口的数值转换成三位的十进制数显示在数码管上,通过除以10,余数为个位数,然后再除以10,余数是十位,商是百位数,要求系统显示拨码开关所设置的编码0~255;
(3)多位数码管的动态扫描显示,一位一位地显示,在间隔够短时,人眼看到的便是三位同时显示的效果了,同时注意消隐过程。
2 设计方案
2.1 工作原理
通过一个拨码开关来生成一个数,并通过4位数码管以十进制方式显示出来,其中拨码开关与P1口连接,P0口通过一个74LS245来与数码管相连(因为P9口自身的高电平不足以驱动数码管,需要这个器件来帮忙),段选连接到P2口的低四位上。通过开关的开闭,P1值范围为0x00~0xff,即0~255,之后将该数值显示在数码管上。
2.2 单片机系统方框图
根据拨码开关显示的工作原理,采用89C51单片机构成的系统原理框图如图2-1所示。
图2-1 系统原理框图
3 电路设计和软件设计
3.1 电路设计
拨码开关显示电路如图3-1所示。整个电路由以下几部分组成:振荡电路、复位电路、拨码信号、数码显示电路组成。
图3-1电路原理图
在本系统中,采用动态扫描法来实现4个LED数码管的动态显示,扫描时间为1ms。在本电路中,采用共阴极LED数码管,共阴极数码管真值表如表3-1所示。4个LED数码管与单片机端口的连接方式为:P0口通过74LS245连接4个数码管的七段和DP,P2口的4位来控制数码管的位选择,具体连接如图3-1所示。采用12Mhz晶振,可提高计数的精确度。12M晶振和两个电容组成晶体振荡器。
表3-1 共阴数码管真值表
3.2 程序设计流程
程序流程图如图3-2所示。
图3-2 程序流程图
3.3 程序清单
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//各数字的数码管段码(共阴)
ucharcodeDSY_CODE[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//显示缓冲
uchar DSY_Buffer[3]={0,0,0};
//延时
void DelayMS(uint ms)
{
uchar t;
while(ms--)for(t=0;t<120;t++);
}
//主程序
void main()
{
uchar i,m,Num;
P0=0xff;
P2=0xff;
while(1)
{
m=0xfe;
Num=P1; //读取拨码开关的值
DSY_Buffer[0]=Num/100;
DSY_Buffer[1]=Num/10%10;
DSY_Buffer[2]=Num%10;
for(i=0;i<3;i++) //刷新显示在数码管上
{
m=_crol_(m,1);
P2=m;
P0=DSY_CODE[DSY_Buffer[i]];
DelayMS(10);
}
}
}
4 电路仿真及结果分析
4.1 电路仿真
本小组在Keil软件中建立工程,编写C语言程序,并进编译与调试,同时在Proteus7.8中搭建好拨码开关显示电路,建立仿真。
(1)当拨码开关状态为00000000时,通过P1口将数值转换成三位的十进制数显示在数码管上,观察数码管显示为0,如图4-1所示。
(2)当拨码开关状态为10101101时,通过P1口将数值转换成三位的十进制数显示在数码管上,观察数码管显示为173,如图4-2所示。
(3)当拨码开关状态为11101101时,通过P1口将数值转换成三位的十进制数显示在数码管上,观察数码管显示为237,如图4-3所示。
(4)当拨码开关状态为11101101时,通过P1口将数值转换成三位的十进制数显示在数码管上,观察数码管显示为237,如图4-4所示。
图4-1 拨码开关0000 0000仿真结果
图4-2 拨码开关1010 1101仿真结果
图4-3 拨码开关1110 1101仿真结果
图4-4 拨码开关1111 1111仿真结果
4.2 结果分析
8位拨码开关分别与8个管脚相连,即与P1口连接,通过开关的开闭,P1值范围为0x00~0xff,即0~255,之后将该数值显示在数码管上。
5课程设计小结与心得体会
通过这段时间的课程设计,我对单片机原理知识以及拨码开关都有了更进一步的了解。搭建了电路,编写了程序,并对该程序进行了调试,能按预期的效果进行拨码开关显示功能。与此同时本系统还存在着很多的不足.现我对系统目前的优点和不足作些阐述。
优点:能完成拨码开关显示0~255。
不足:数码管只能显示一种8位拨码开关状态,不能显示多种状态,当要显示下一种状态时只能清除之前的状态而不能保存。
自己的心得体会:通过这次数码管显示拨码开关的课程设计,我们把学到的东西与实践相结合,在设计的实践中获得了更多的知识,同时锻炼了动手能力。在这过程中对所学知识了更进一步的理解,而且更进一步地熟悉了AT89C51的结构及掌握了数码管、74LS245及拨码开关的工作原理和其具体的使用方法,也锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。