电子表系统课程设计.docx
- 文档编号:8539809
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:20
- 大小:327.92KB
电子表系统课程设计.docx
《电子表系统课程设计.docx》由会员分享,可在线阅读,更多相关《电子表系统课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
电子表系统课程设计
目录
电子表系统
一.总体设计说明………………………………………………………1
1.设计指标……………………………………………………………1
2.总体描述……………………………………………………………1
二.硬件设计………………………………………………………………1
1.硬件设计总体框图……………………………………………………1
2.8279键盘、显示接口芯片……………………………………………2
3.键盘设计………………………………………………………………5
4.LED显示数码管设计…………………………………………………6
5.电路原理图…………………………………………………………7
三.软件设计…………………………………………………………………7
1.硬件设计总体框图……………………………………………………8
2.程序流程图……………………………………………………………9
3.程序清单………………………………………………………………12
4.程序调试过程与结果…………………………………………………16
四.心得体会………………………………………………………………16
五.参考文献………………………………………………………………17
一、设计总体说明
1.设计指标
利用MCS-51单片机及其相关芯片构成电子表.要求电子表实现如下功能
(1)电子表采用12进制,利用按键进行时、分的设置。
(2)具有整点报时。
2.总体描述
该系统为电子表。
当程序开始执行后,六个LED管均显示“0”作为初始状态值,当要调整时间时,按调整时间键C,这时绿灯亮,表示调整时间开始,于是可以键入时间,如果键入的时间是正确时,每按一个键就会有声音,而且系统显示出你所输入的值,但是如果键入的“时”的值大于11,“分”或“秒”的值大于59,或者错按了字母键时,没有按键声,而且系统不会显示刚刚输入错误的值,要求重新键入时间值。
时间值键入正确后,按启动键F,绿灯灭,表示调整时间结束,时钟开始走时。
利用单片机里蜂鸣器输出的声音进行按键声和整点报时。
二.硬件设计
1.硬件设计总体框图
电子表系统是由计时功能,整点报时功能和调整时间功能,其硬件设计总体框图如图1-1所示。
电子表系统
2.8279键盘、显示接口芯片
利用8279键盘显示接口电路。
使用8279可实现对键盘/显示器的自动扫描,以减轻CPU负担,其具有显示稳定、程序简单、不会出现误动作等特点。
8279芯片是一种通用的可编程序的键盘、显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。
8279包括键盘输入和显示输出两个部分。
键盘部分提供的扫描方式,可以和64个按键或传感器的阵列相连。
能自动消除开关抖动以及N个键同时按下的保护。
显示部分按扫描的方式工作。
可以显示8或16位LED显示块。
8279的操作方式是通过CPU对8279送入命令时来实现编程的。
当数据选择端A0置1时,CPU对8279写入数据为命令字,读出的数据为状态字。
㈠.命令格式与命令字
1.键盘/显示方式设置命令字
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0
0
0
D
D
K
K
K
其中:
D7、D6、D5=000方式设置命令特征位。
D D(D4、D3):
来设定显示方式,其定义如下:
00:
8个字符显示,左入口
00:
16个字符显示,左入口
00:
8个字符显示,右入口
00:
16个字符显示,右入口
所谓左入口,即显示位置从最左一位(最高位)开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,即显示位置从最右一位(最低位)开始,以后逐次输入的显示字符时,已有的显示字符逐个向左顺序移动。
KKK(D2、D1、D0):
用来设定七种键盘、显示工作方式:
000 编码扫描键盘,双键锁定
001 译码扫描键盘,双键锁定
010 编码扫描键盘,N键轮回
011 译码扫描键盘,N键轮回
100 编码扫描传感器矩阵
101 译码扫描传感器矩阵
110 选通输入,编码显示扫描
111 选通输入,译码显示扫描
双键锁定与N键轮回是多键按下时的两种不同的保护方式。
双键锁定为两键同时按下提供的保护方法。
再消颤周期里,如果有两键同时按下,则只有其中一个键弹起,而另一个键保持在按下位置时,才被认可。
N键轮回为N键同时按下的保护方法。
当有若干键按下时,键盘扫描能够根据发现他们的顺序,依次将它们的状态送入FIFORAM中。
2.程序时钟命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0
0
1
P
P
P
P
P
其中:
D7、D6、D5=001为时钟命令特征位。
PPPPP( D4、D3、D2、D1、D0)用来设定外部输入CLK端的时钟进行分频的分频数N。
N取值为2~31。
例如外部时钟频率为2MHZ,PPPPP被置为10100(N=20),则对输入的外部时钟20分频,以获得8279内部要求的100KMZ的基本频率。
3.读FIFO/传感器RAM命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0
1
0
AI
X
A
A
A
其中:
D7D6D5=010为读FIFO/传感器RAM命令特征位。
该命令字只在传感器方式时使用。
在CPU读传感器RAM之前,必须使用这条命令来设定传感器RAM中的8个地址(每个地址一个字节)。
AAA(D2、D1、D0)为传感器RAM中的八个字节地址。
AI(D4)为自动增量特征位。
当AI=1时,每次读出传感器RAM后地址自动加1使地址指针指向下一个存储单元。
这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。
在键盘工作方式中,由于读出操做严格按照先入先出顺序,因此,不需使用此命令。
4.读显示RAM命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0
1
1
AI
A
A
A
A
其中:
D7D6D5=011为读显示RAM命令字的特征位。
该命令用来设定将要读出的显示RAM地址。
AAAA(D3、D2、D1、D0)用来寻址显示RAM命令字的特征位。
由位显示RAM中有16个字节单元故需要4位寻址。
AI(D4)为自动增量特征位。
当AI=1时,每次读出后地址自动加1指向下一地址。
5.写显示RAM命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1
0
0
AI
A
A
A
A
其中:
D7D6D5=100为写显示RAM命令字的特征位。
在写显示器RAM之前用该命令用来设定将要写入的显示RAM地址。
AAAA(D3、D2、D1、D0)为将要写入的存储单元地址。
AI(D4)为自动增量特征位。
当AI=1时,每次写入后地址自动加1指向下一次写入地址。
6.显示禁止写入/消隐命令特征位
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1
0
1
X
IW
A
IW
B
BL
A
BL
B
其中:
D7D6D5=101为显示禁止写入/消隐命令特征位。
IW/A、IW/B(D3、D2)为A、B组显示RAM写入屏蔽位。
由于显示寄存器分成A、B两组,可以单独送数,故用两位来分别屏蔽。
当A组的屏蔽位D3=1时,A组的显示RAM禁止写入。
因此,从CPU写入显示器RAM数据时,不会影响A的显示。
这种情况通常在采用双4位显示器时使用。
因为两个双四位显示器是相互独立的。
为了给其中一个双四位显示器输入数据而又不影响另一个四位显示器,因此必须对另一组的输入实行屏蔽。
BL/A、BL/B(D1、D0)为消隐显示位。
用于对两组显示输出消隐。
若BL=1时,对应组的显示输出被消隐。
当BL=0时,则恢复显示。
7.清除命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1
1
0
CD
CD
CD
CF
CA
其中:
D7D6D5=110清除命令特征位。
CDCDCD(D4D3D2)用来设定清除显示RAM方式。
共有四种消除方式,见表。
CF(D1)用来置空FIFO存储器,当=1时,执行清除命令后,FIFORAM被置空,使中断输出线复位。
同时,传感器RAM的读出地址也被置0。
CA(D0)为总清的特征位。
它兼有CD和CF的联合效能。
在CD=1时,对显示的清除方式由D3、D2的编码决定。
清除显示RAM约需160µS。
在此期间FIFO状态时的最高位DU=1,表示显示无效。
CPU不能向显示RAM写入数据。
8.结束中断/错误方式设置命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1
1
1
E
×
×
×
×
其中:
D7D6D5=111为该命令的特征位。
此命令有两种不同的作用。
(1).作为结束中断命令。
在传感器工作方式中使用。
每当传感器状态出现变化时,扫描检测电路将其状态写入传感器RAM,并启动中断逻辑,使IRQ变高,向CPU请求中断,并且禁止写入传感器RAM。
此时,若传感器RAM读出地址的自动递增特征没有置位(AI=0),则中断请求IRQ在CPU第一次从传感器RAM读出数据时就被清除。
若自动递增特征已置位(AI=1),则CPU对传感器RAM的读出并不能清除IRQ,而必须通过给8279写入结束中断/错误方式设置命令才能使IRQ变低。
因此在传感器工作方式中,此命令用来结束传感器RAM的中断请求。
(2).作为特定错误方式设置命令。
在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=1),则8279将以一种特定的错误方式工作。
这种方式的特点是:
在8279的消颤周期内,如果发现多个按键同时按下,则FIFO状态字中的错误特征位S/E将置1,并产生中断请求信号和阻止写入FIFORAM。
上述八种用于确定8279操作方式的命令字皆由D7D6D5特征位确定,输入8279后能自动寻址相应的命令寄存器。
因此,写入命令字时唯一的要求是使数据选择信号A0=1。
㈡.状态格式与状态字
8279的FIFO状态字,主要用于键盘和选通工作方式,以指示FIFORAM中的字符数和有无错误发生。
其格式为:
D7 D6 D5 D4 D3 D2 D1 D0
DU
S/E
O
U
F
N
N
N
其中:
DU(D7)为显示无效特征位。
当DU=1表示显示无效。
当显示RAM由于清除显示或全清命令尚未完成时,DU=1。
表1-1 CD位定义的清除方式
D4
D3
D2
清除方式
1
0
×
将显示RAM全部清零
1
0
将显示RAM清成20H(A组=0010;B组=0000)
1
1
将显示RAM全部置1
0
不清除(若CA=1,则D3、D2仍有效)
3.键盘设计
因为在程序开始运行时需要键入初始时间,所以为该实验选择4*4的键盘,且键盘输入由8279控制,按键连接电路图如图1-2所示。
图1-2键盘连接电路图
4.LED显示数码管设计
LED数码管仍然用8279进行控制,由于8279本身的后继驱动能力有限,为了能驱动数码管,必须在输出上加反相器,让反相器的输出连接LED数码管,则可以驱动共阳极的LED,线路连接方式如图具体连接见原理图。
图1-3共阳极数码管电路(Ⅰ)
图1-4共阳极数码管电路(Ⅱ)
图1-4利用反相器提高驱动能力电路
5.电路原理图
根据设计思想,可得图1-5的电子表系统的硬件原理图。
其中大部的连线单片机内部已经连接好,现在只需将P1.0和P1.1与蜂鸣器的输入口FM连在一起,P1.2和绿色发光二极管连在一起。
图1-5电子表系统硬件原理图
三.软件设计
1.软件设计总体框图
电子表系统软件设计总体框图如图1-6所示。
2.程序流程图
主程序流程图如图1-7所示,8279工作流程图如图1-8所示。
计时中断子程序和调整时间子程序的流程图如图1-9和图1-10所示。
3.程序清单
#include
#include
#definecon_8279XBYTE[0x5fff]//8279控制口地址
#definedata_8279XBYTE[0x5eff]//8279数据口地址
#defineucharunsignedchar
codeuchartable[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90};//查表转化为LED显示的0-9的数据
sbitP1_0=P1^0;//报时
sbitP1_1=P1^1;//按键声(创新点)
sbitgreen=P1^2;//控制绿灯(创新点)
uchari=250,j=250,m=5;//i表示定时器1循环的次数,j表示定时器2循环的次//数,m表示LED的显示从最高位开始。
ucharb[6]={0,0,0,0,0,0};//设置电子表的初始值
voiddisplay(void)
{
uchari;
con_8279=0x92;//写显示RAM
for(i=0;i<=5;i++)
data_8279=table[b[i]];//查表
}
voidtime(void)interrupt1using1
{
i--;//循环
if(i==0)//循环250次,到达1s
{
b[0]=b[0]+1;//秒个位加1
TH0=-(4000/256);//重新装入初始值
TL0=-(4000%256);
}
else
{
TH0=-(4000/256);//重新装入初始值
TL0=-(4000%256);
}
if(b[0]>9)
{
b[1]=b[1]+1;//秒十位加1
b[0]=0;//秒个位清零
}
if(b[1]==6)
{
b[2]=b[2]+1;//分个位加1
b[1]=0;//秒十位清零
}
if(b[2]>9)
{
b[3]=b[3]+1;//分十位加1
b[2]=0;//分个位清零
}
if(b[3]==6)
{
b[4]=b[4]+1;//时个位加1
b[3]=0;//分十位清零
P1_0=0;//启动蜂鸣器
TR1=1;//启动时器1计时
}
if(b[4]>9)
{
b[5]=b[5]+1;//时十位加1
b[4]=0;//时个位清零
}
if(b[5]==1)
{
if(b[4]==2)
{b[5]=0;//时十位清零
b[4]=0;//时个位清零
}
}
display();//在LED上显示计时
}
voidtime1(void)interrupt3using2//定时器1中断子程序
{
j--;//循环
if(j==0)//循环到250次,即到达1s
{
P1_0=1;//关蜂鸣器,即整点报时声音延续时间为1秒
P1_1=1;//关蜂鸣器,即按键声音延续时间为1秒(创新点)
TR1=0;//停止定时器1计时
TH1=-(4000/256);//重新装入初始值
TL1=-(4000%256);
}
else
{
TH1=-(4000/256);//重新装入初始值
TL1=-(4000%256);
}
}
voidint1(void)interrupt2using0//外部1中断,用于调整时间
{
uchara;
TR0=0;
con_8279=0x40;//清除显示RAM
a=data_8279;//把键入值送给变量a
green=0;//绿灯亮,表开始调整时间(创新点)
if(m==5)
if(a<=1)//控制时十位的输入
{
b[5]=a;
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
}
elsem++;//重新输入时十位
if(m==4)
{
if(b[5]==1)//控制时个位的输入
if(a<=1)
{
b[4]=a;
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
}
elsem++;//重新键入时个位
elseif(b[5]==0)//控制时个位的输入
if(a<9)
{
b[4]=a;
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
}
elsem++;//重新键入时个位
}
if(m==3)
{
if(a<=6)//控制分十位的输入
{b[3]=a;
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
}
elsem++;
}
if(m==2)
if(a<=9)//控制分个位的输入
{
b[2]=a;
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
}
elsem++;//重新键入分十位
if(m==1)
if(a<6)//控制秒十位的输入
{b[1]=a;
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
}
elsem++;//重新键入分个位
if(m==0)
if(a<=9)//控制秒个位的输入
{b[0]=a;
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
}
elsem++;//重新键入秒个位
m--;
display();//显示调整好的时间
if(a==15)//按F键
{
TR0=1;//启动定时器0计时
P1_1=0;//启动蜂鸣器,即有按键声(创新点)
TR1=1;//启动定时器1计时
green=1;//绿灯灭,表示调整时间结束(创新点)
m=5;//给下一次调整时间时,从最高位开始调整
}
}
voidmain(void)
{
con_8279=0x00;//键盘/显示,8个字符显示,左端入口方式,编码扫描键盘。
con_8279=0x34;//设置键盘扫描速率,20分频。
con_8279=0xDC;//清除LED显示
for(i=0;i<200;i++){}//等待清屏结束
display();//LED显示
TMOD=0x11;//设置定时器0和定时器1都工作在方式1
TH0=-(4000/256);//设置定时器0的定时为0.4s
TL0=-(4000%256);
TH1=-(4000/256);//设置定时器1的定时为0.4s
TL1=-(4000%256);
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;//开定时器1中断
TR0=1;//启动定时器0计时
EX1=1;//开外部0中断
while
(1){}//由于没有接受函数的返回值,所以必须有个循环来保证程序不被//终止。
}
4.程序调试过程与结果
KeluVision2是流行的单片机开发环境之一,支持51汇编,PLM和C语言的混合编程,功能强大,界面友好,易学易用。
启动KeluVision2工作界面,往原代码编辑器输入已经用C语言编写好的程序,接着进行编译,编译通过后,检查主机与单片机是否连上,如果连上,按照电路原理图把主要接线连上,即P1.0和P1.1与蜂鸣器的输入口FM连在一起,P1.2和绿色发光二极管连在一起。
然后打开单片机开关,最后启动Debug开始运行程序,于是可以观察程序的运行结果。
在单片机上可以看到,六个LED的显示是从0开始计时,为了尽快见识整点报时和计时12进制的功能,在单片机的小键盘上按一下“C”键,这时听到有按键声,而且见到绿灯亮,于是接着键入时间,比如键入11:
58:
00,每键入一个值都会伴有按键声,如果键入的值不在时、分、秒控制的范围内,不会有按键声,系统不会接着调整下一位的时间直到你重新输入一个正确的值,当已经把时间调整为11:
58:
00,按一下小键盘上的“F”键,这时同样会有按键声,但绿灯灭,调整时间结束,并且开始走时。
等待两分钟后,就会听到延时为1s的整点报时声,可以在LED上看到此刻的时间为00:
00:
00,这说明了时间计时是12进制的。
综上所示,电子表程序运行的结果不但符合技术指标的要求,而且在此基础上有拓展功能,有独特的创新点。
四.心得体会
1.进一步熟悉了单片机开发环境KeluVision2。
2.掌握了8279的命令功能,及其芯片与LED、键盘和8031芯片的连线。
3.能够独立思考,从不熟悉到熟悉,从简单到复杂,标新立异,别出心裁。
4.遇到问题时,先自己解决,当解决不了时,才请教老师和同学们。
5.培养了设计总体和方案论证的意识。
6.提高硬件、软件设计与开发的综合能力。
7.提高软件和硬件联合调试的能力。
8.提高了资料收集和汇总的能力.除了教科书,资料的来源有两处,一处是通过图书馆查找,一处是通过网络查询。
9.此次单片机课程设计最大的收获是学会了用C语言编写单片机应用程序,第一次把C语言运用于实践中,有很大的成就感。
单片机C语言跟以前学的C语言差
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子表 系统 课程设计