logo资料库

51单片机串口连接两个74LS164驱动2个LED数码管proteus.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
1设计要求
1.1 设计内容
1.2 学习目的
2 系统设计分析
2.1 单片机最小系统+串口+74LS164+LED数码管
2.1.1 串口
2.1.2 74LS164
2.1.3 LED数码管
2.2 ‘串入并出’驱动LED数码管显示
3 系统原理图设计
3.1 元器件及其型号
4 系统程序流程图设计
4.1 系统程序设计流程图如下图所示
5 系统源程序设计
5.1 程序设计思路
5.2 源程序代码(思路3)
5.2.1 汇编语言程序:
5.2.2 C 语言程序:
6 仿真及调试结果分析
6.1 仿真及调试结果
6.2结果分析及调试过程
单片机应用设计 课题:串口连接两个 74LS164 驱动 2 个 LED 数码管显示 班级学号: 14110501xx 姓名: xx
1 设计要求 1.1 设计内容 设晶体为 12MHz,将拨码开关数据串行输入到 74LS164,并行输出到 2 个 LED 数码管进行相应的数码显示。 设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、 系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与 建议、期望成绩等。 1.2 学习目的 该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实 用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应 用系统设计奠定了较好的基础。 2 系统设计分析 2.1 单片机最小系统+串口+74LS164+LED 数码管 单片机的最小系统是单片机能够工作的最小硬件组合,对于 8051 系列单片 机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。 2.1.1 串口 数据通信方式包括并行通信和串行通信两种。并行通信就是多条数据线上同 时传送,其优点:速度快,只适于近距离通信。串行通信就是数据以为以为的顺 序传送,其优点:线路简单,成本低,适合远距离通信。 串行通信方式包括:异步串行通信和同步串行通信。异步方式,数据传送不 连续,时间间隔任意。同步方式,发送与接收同步。数据传送方式:单工、半双 工、全双工、多工。常见的串行通讯有:RS-232、RS-485、CAN 总线等。 串行口控制寄存器包括:串行口控制寄存器 SCON(控制工作方式)、电源控 制寄存器 PCON(控制波特率)。SM0、SM1 选择工作方式,SM2 用于多机通信, REN 允许接收控制位,TB8/RB8 发送/接收数据 D8 位,TI/RI 为发送/接收中断标 志位。 2
2.1.2 74LS164 串行口工作于方式 0,发送数据时,是把串行端 口设置成“串入并出的”输出口。将它设置为“串入 并出”输出口时,需外接 1 片“串入并出”同步移位 芯片 74LS164 或 CD4094,本次设计,用 74LS164。 74LS164 是 8 位边沿触发式移位寄存器,具有 DIP、SO14 等多种封装形式。其 DIP 封装形式如右图所示。 数据通过 A 或 B 之一串行输入,任一输入端可以 用作高电平使能端控制另一输入端的数据输入,两个 输入端或者连接在一起,或者把不用的输入端接高电 平,一定不要悬空。时钟 CP 每次由低变高时,数据右移一位输入到 Q0。Q0 是 两个数据输入端 A 和 B 的逻辑与。 输入的数据在 Q0 输出,并依次右移在其它输出端口输出。 2.1.3 LED 数码管 LED 数码管是单片机应用系统中常用的输出设备,其特点结构简单,价格便 宜。单片机系统常用 7 段 LED 数码管,由 8 个发光二极管构成。 LED 数码管分 为共阳极和共阴极两种。共阳极 LED 数码管,就是 8 个 LED 阳极连接在一起再接 高电平。共阴极 LED 数码管,就是 8 个 LED 阴极连接在一起再接地。通过相应的 LED 显示,呈现出对应的数字、符号。 2.2 ‘串入并出’驱动 LED 数码管显示 本次设计,对拨码开关进行拨动,从而将信息传递给单片机,再由单片机通 过串口工作在方式 0 将数据串行输出给 74LS164,由 74LS164 并行输出给 LED 数 码管,进行相应的显示。实际操作中,拨码开关低四位控制一个 74LS164 驱动一 个 LED 数码管,而拨码开关高四位控制另一个 74LS164 驱动另一个 LED 数码管, 使两个 LED 数码管独立显示。 本次设计涉及到,串口工作方式。串口工作于方式 0 时,其功能为 8 位移位 寄存器,相当于 I/0 口的扩展,再连接 74LS164 芯片既可实现“串入并出”的功 能。使用查表法,将拨码开关的 2 进制数和 LED 代码建立一一对应关系,其中用 到了一些编程小技巧。设计中,又遇到另外一个问题,74LS164 级联问题,我在 网上搜寻了一些问题的答案,再看了书上对 74LS164 的介绍,于是得到了算是一 些结论吧。将 74LS164 最后一个输出端,连在另外一个 74LS164 的 A、B 之一的 数据输入端,就构成了级联。在程序中每一次循环向串口缓存器发送两次 8 位数 据,即可实现两个 LED 数码管独立显示(0~F)。 3
3 系统原理图设计 3.1 元器件及其型号 系统所需元器件包括:AT89C51、瓷片电容 CAP30pF、晶振 CRYSTAL、电阻 RES、电解电容 22uF、共阳数码管 7SEG-COM-AN-GRN、拨码开关 DIPSW_8、 74LS164-IEC、总线。系统设计原理图如图 3.1 所示。 图 3.1 系统设计原理图 4 系统程序流程图设计 4.1 系统程序设计流程图如下图所示 4
5
5 系统源程序设计 5.1 程序设计思路 本次设计,我一共有三个思路: 1. 在 74LS164 的输出口并接两个数码管,然后分别将两个共阳数码管的共阳端 随意接两个I/O 口,通过I/O 口控制某个数码管对应低四位或高四位拨码开关, 进行相关显示(0~F)。 2. 用两个 74LS164 分别接两个共阳数码管,通过控制每个 74LS164 的 A、B 输入 端,从而进行相关显示(0~F),和思路 1 相似。 3. 用两个 74LS164 级联的方式,实现两个共阳数码管分别对应低四位或高四位 拨码开关,独立显示,比思路 1、2 复杂,也是我最满意并采用的思路。 5.2 源程序代码(思路 3) 5.2.1 汇编语言程序: ORG 0030H MAIN:MOV SCON,#00H MOV DPTR,#TABLE MOV 30H,#00H READ: MOV A,P1 CJNE A,30H,SEND JMP READ SEND:MOV 30H,A CPL A MOV R0,A ANL A,#00FH MOVC A,@A+DPTR MOV SBUF,A WAIT1: JBC TI,X1 AJMP WAIT1 X1: MOV A,R0 ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV SBUF,A WAIT2: JBC TI,READ AJMP WAIT2 ;起始地址 ;设置串口工作方式为方式 0 ;将表 TABLE 的首地址传给 DPTR ;30H~7FH 数据缓存区相当于变量的地址 ;查询拨码开关是否有变化 ;取反,变为 16 进制数据 ;取拨码开关低四位 ;查表赋值 ;判断是否发送完毕 ;取拨码开关高四位 ;高低四位互换,建立对应关系 ;查表赋值 ;判断是否发送完毕 6
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;LED 代码(0~F) DB 82H,0F8H,80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH,1BH END 5.2.2 C 语言程序: #include"reg51.h" #define uint unsigned int #define uchar unsigned char const uchar tab[]={0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0x80,0X90,0X88, 0X83,0XC6,0XA1,0x86,0X8E}; void main(void) { //LED 代码(0~F) uchar i=0; uchar j=0; uchar m=0; uchar k=0; SCON=0X00; SBUF=0XC0; while(TI==0); TI=0; while(1) { while(P1==i); i=P1; j=~i; m=j&0xf0; k=j&0x0f; m=m>>4; SBUF=tab[k]; while(TI==0); TI=0; SBUF=tab[m]; while(TI==0); TI=0; } } //变量初始化 //设置串口工作方式为方式 0 //查询拨码开关是否有变化 //取拨码开关高四位 //取拨码开关低四位 //高四位移到低四位建立对应关系 //查表赋值 //判断是否发送完毕 //查表赋值 //判断是否发送完毕 7
6 仿真及调试结果分析 6.1 仿真及调试结果 系统仿真结果图如图 6.1 所示。 图 6.1 系统仿真结果图 6.2 结果分析及调试过程 这次作业是第四次设计了,基本已经熟悉设计过程,而且也锻炼了自己的编 程能力。这次设计 3 个思路,有 3 个 C 语言程序,一个汇编程序,从构思到调试 成功,大概用了 4 个小时,并没有什么难度。 用前两个方案时,调试成功后,发现有缺陷(不能同时独立显示)。于是, 最终采用思路 3,又用到一些编程小技巧,使程序较为精简,即可满足要求,两 个 LED 独立显示(0~F)。 编程过程,十进制数与十六进制的兼容性也体现了出来,起初为了建立一一 对应关系,还用了下 switch 语句,使之一一对应。然而,后来想起了兼容性,就 把程序大大缩短,变得精简。另外,当 LED 数码管共阳端接的电阻为 100 欧时, LED 无法显示“8”,而调下电阻后,就可以正常显示了。明白,负载电阻大小会 影响 LED(亮度)显示。 本次设计,拨码开关接低电平,当开关闭合,使对应 P1 口置零,然后编程 8
分享到:
收藏