单片机系统开发之利用串口驱动数码管显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机应用系统开发利用串口驱动数码管显示
专业:信息对抗技术
学号:1411050121
姓名:吴志飞
1.系统设计要求
设晶振频率为12MHZ,将拨码开关数据串行输入到74LS164,并行输出到2个LED数码管进行相应的数码显示。

2.系统设计分析:
单片机的最小系统+74LS164接口芯片+两个7段共阴极LED数码管。

串口工作于方式0,为移位寄存器方式,波特率为固定的fosc/12,不需要定时计数器T1做波特率发生器。

拨码开关的的高低4位分别控制一个数码管,数码管要显示的数据可以用查表法。

两个数码管并连接在74LS164的输出端,通过选通位来控制哪一个数码管亮。

74LS164是8位边沿触发式移位寄存器,串行输入,并行输出。

数据通过俩个输入端A或B之一串行输入,任一输入端可以作为高电平使能端来控制另一输入端的数据输入。

俩个输入端或者连接在一起,或者把不用的一端接高电平,一定不要悬空。

时钟CP 每次有低变高时,数据右移一位输入到Q0。

Q0是两个数据输入端的逻辑与。

3.系统原理图设计:
图1.1 74LS164接口芯片
系统所需原件为单片机AT89C51,瓷片电容CAP30pf,晶振CRYSTAL12MHZ,电解电容CAP-ELEC,电阻RES,拨码开关DIPSW_8,共阴极数码管7SEG-COM-CAT-GRN俩个,74LS164接口芯片一个以及开关SWITCH。

原理图如1.2所示。

图1.2 利用串口数据驱动数码管进行相应数码显示
4.系统流程图设计:
串口寄存器设置
初始化P0、P1口
开始
把P1口给累加器A
5.系统源程序设计:
汇编源程序:
ORG 0030H
START:MOV SCON,#00H //串口工作于方式0:移位寄存器方式MOV P1,#00H
READ: MOV P0,#0FFH
MOV A,P1
MOV B,P1
ANL A,#0F0H
CJNE A,B,LOW4
/////////////////////////
HIG4: MOV DPTR,#TABLE
SWAP A
XH: MOVC A,@A+DPTR
MOV SBUF,A
CLR P0.0
LCALL DELAY
MOV A,P1
CJNE A,SBUF,READ
AJMP READ
///////////////////////////
LOW4: MOV A,P1
ANL A,#0FH
CJNE A,B,LOOP3
MOV DPTR,#TABLE
XL: MOVC A,@A+DPTR
MOV SBUF,A
CLR P0.1
LCALL DELAY
MOV A,P1
CJNE A,SBUF,READ
AJMP READ
LOOP3:NOP
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ////////延时子程序//////////////
DELAY:MOV R7,#20
DELAY1:MOV R6,#40
DELAY2:MOV R5,#248
DJNZ R5,$
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
C语言源程序:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay();
sbit p01=P0^1;
sbit p00=P0^0;
uchar code
tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,
0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71}; //共阴
uchar a;
void main(void)
{
SCON=0X00;
while(1)
{
a=P1&0X0F; //低四位
SBUF=tab[a];
while(TI==0);
TI=0;
p00=1;
p01=0;
delay();
a=P1&0XF0 ; //高四位
a>>=4;
SBUF=tab[a];
while(TI==0);
TI=0;
p01=1;
p00=0;
delay();
}
}
void delay() //延时子程序{
uint c,d;
for(c=0;c<400;c++)
for(d=0;d<400;d++)
{;}
}
6.在keil中进行调试:
(1)创建“数码管”项目,选择单片机型号为AT89C51,汇编源程序,保存为“数码管.ASM”或“数码管.C”。

(2)将源程序添加到项目中。

(3)打开项目菜单,选择Options for target’target 1’选项,点击output一项,在Create HEX File前打上对勾。

(4)编译源程序,如果有问题,则需要调试修改,若没有错误,则成功创建“数码管.HEX”文件。

图1.3 编译成功提示图
7.在Proteus中进行仿真:
打开Proteus软件,用左键单击单片机,在出现的对话框中,添加“数码管.HEX”文件,开始仿真,效果如下图所示。

图1.4 数码管仿真图
图1.5 数码管仿真图
拨码开关的高低4位分别可以控制一个数码管,分别显示0到F,符合设计要求。

8.后言:
感想:经过一段时间的学习,从开始对单片机的一无所知,不感兴趣,到现在的自己编程实现实际问题。

在这一过程中,随着对单片机知识的逐步深入,兴趣也越来越浓厚,自己去查资料的冲动也越来越强烈。

还记得第一次张老师让我们点亮一盏灯时全班同学的一脸茫然,无从下手,但这并不能阻挡我们探索单片机,爱上单片机。

现在看着自己编的程序在单片机上运行,内心的激动那是不言而喻。

张老师说单片机是一门很枯燥的课程,的确如此,如果不是有兴趣作为支撑,很容易半途而废,一无所获。

但是一旦入了门,什么时候想要学了,或者有时间学了,都可以很轻松的捡起来。

单片机的知识浩瀚如海,而我们就像一个呱呱坠地的婴儿,只要怀着一颗好奇、探索的心不断汲取,不断充实自己,将来一定会让自己强壮无比。

相关文档
最新文档