74ls164串行输出扩展运用课程设计
- 格式:doc
- 大小:117.50 KB
- 文档页数:8
74HC164的驱动和应用74HC164的几点说明:1.74HC164是串行输入,并行输出的;2.它的并行输出其实是有延时的,只是延时时间小,可以认为是并行输出;74hc164封装和真值表:真值表中文解释说明:H-高电平 L -低电平 X -任意电平↑-低到高电平跳变(上升沿有效)QA0,QB0,QH0 -规定的稳态条件建立前的电平QAn,QGn -时钟最近的↑前的电平看真值表的第三条和第五条:就可以知道,在保持clear为 H, clock为↑状态下,AB都为H时,移位寄存器移入H,而当移位寄存器移入L时,必须令B为L,而A不受约束。
所以可以把AB断相连再接入单片机数据端口。
还有一种是A脚直接接高电平,B脚连入单片机数据端(P2_7)时序图:1. 首先区分输入输出信号。
这里CLEAR、A、B、CLOCK是输入信号,Qa~Qh是输出信号;2. 拿尺子开始扫描……2.1. 首先可以看到CLEAR的下降沿后输出全部置低电平。
结合后面的一个CLEAR 下降沿,可以得出结论:当CLEAR输入下降沿时,无论A、B、CLOCK状态为何,输出全部拉低;2.2. 尺子向右移动……找到Qa的第一个上升沿,可以看到这个上升沿是与CLOCK的上升沿对齐的,可以得出结论:输出在逻辑上与上升沿同步。
此时将会注意到在此之前已经有3个上升沿但输出始终为低电平,尺子移动分别比较这3个上升沿,其A、B输入分别为10、01,于是可以得出结论:Q a = A · B。
2.3. 尺子继续向右移动……可以分别看出在随后的CLOCK上升沿处,Qa全部按照A与B进行输出,从而验证以上结论。
此外Qb~Qh的波形为Qa波形依次移位得到。
实验二 74LS164串进并出实验及165并串转换实验一、实验目的1、了解74LS164芯片的工作原理,以及与单片机的接口方法。
2、掌握单片机串行口的工作原理以及编程方法。
3、了解74LS165芯片的工作原理。
4、掌握74LS165芯片在单片机系统中的应用及编程。
二、实验内容1、用74LS164芯片扩展并行输出口,本实验中我们用74LS164扩展两个8位输出口的接口显示电路,两位数码管循环显示00~99之间的数字。
2、利用实验系统上的74LS165芯片,编程实现8位数据并行输入,串行口串行接收,并将接收的数据存放在CPU 内部存储区50H~59H 中,共10个数据。
(并行输入数据由P1口来送入)三、编程指南1、74LS164串进并出实验。
(1)本实验中MCS-51单片机串行口工作在方式0(移位寄存器方式,用于并行I/0口扩展)的发送状态时,串行数据由P3.0(RXD)送出,移位时钟由P3.1(TXD )送出。
在移位时钟的作用下,串行口发送缓冲器的数据一位一位地移入74LS164中。
需要指出的是,由于741S164无并行输出控制端,因而在串行输入过程中,其输出端的状态会不断变化,故在某些应用场合,在74LS164的输出端应加接输出三态门控制,以便保证串行输入结束后再输出数据。
(2)74LS164引脚功能图管脚说明:SIA 、SIB --- Serial inputsQ0 through Q7 ---- Data outputs CLK ---- CLOCKCLR ---- Clear input功能表:2、165并串转换实验。
(1)74LS165芯片引脚图管脚说明:D0 through D7 --Parallel inputs SI -- Serial inputQ7,/Q7 -- Data outputsCLK -- ClockCKIN -- Clock inhibitS/L -- (高有效)Shift/Parallel-loadCLRSIA SIB CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 0 X X X 0 0 0 0 0 0 0 1 1 1 ↑ 1 Q0 Q1 Q2 Q3 Q4 Q5 Q6 1 0 X ↑ 0 Q0 Q1 Q2 Q3 Q4 Q5 Q6 1 X 0 ↑ 0 Q0 Q1 Q2 Q3 Q4 Q5 Q6control(低有效)(2)编程说明74LS165是8位并行置入移位寄存器。
74LS164 串入并出实验在单片机系统中,如果并行口的IO资源不够,而串行口又没有其他的作用,那么我们可以用74LS164来扩展并行IO口,节约单片机资源。
74LS164是一个串行输入并行输出的移位寄存器。
并带有清除端。
其中; Q0—Q7 并行输出端。
A,B串行输入端。
MR 清除端,为0时,输出清零。
CP 时钟输入端。
BNE TRAN_PROC_1TRAN_PROC_END:RET**********************************************74LS165并入串出实验74L165是并行输入,串行输出移位寄存器。
80C51单片机内部的串行口在方式0工作状态下,使用移位寄存器芯片可以扩展一个或多个8位并行I/O口。
其引脚如图所示。
A,B,C,D,E,F,G,H 并行输入端。
QH串行输出端。
CLOCK:时钟输入端。
CLOCK INHIBIT:时钟禁止端。
当时钟禁止端CLK2为低电平时,充许时钟输入。
SHIFT/LOAD:移位与置位控制端。
SER:扩展多个74LS165的首尾连接端。
本练习TXD(P3.1)作为移位脉冲输出端与74LS165的移位脉冲输入端CLOCK相连;RXD (P3.0)作为串行输入端与74LS165的串行输出端QH相连;P3.2用来控制74165的移位与置入。
74LS165电路原理:本练习利用串行口扩展了1片74LS165,从而实现了8个按键的输入,在单片机的P1口连接了8个LED发光二极管,程序中实现了用按键控制发光二极管的亮与灭。
流程为8路开关-74165-3PIN数据线-8路指示灯。
由此可以看出通过165传输,只用了3条数据线,就实现了8个开关控制8个灯的目的。
从而节约了控制的连线。
\我们在进行数据转换的时候经常会用到74LS164,74LS165,在单片机课程和数字电子基础里都可以看到,这两个芯片是思绪上要形成互补的思想,一个是串入并出,另外一个是并入串出!一下两个例题用到的是单片机的串行线,TXD(发送标志是TI)和RXD(接收标志是RI)串行数据转换为并行数据(74ls164串入并出)/* 名称:串行数据转换为并行数据说明:串行数据由RXD发送给串并转换芯片74164,TXD则用于输出移位时钟脉冲,74164将串行输入的1字节转换为并行数据,并将转换的数据通过8只LED显示出来。
本例串口工作模式0,即移位寄存器I/O模式。
TXD发送*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//主程序void main(){uchar c=0x80;SCON=0x00; //串口模式0,即移位寄存器输入/输出方式TI=1;while(1){c=_crol_(c,1);SBUF=c;while(TI==0); //等待发送结束TI=0; //TI软件置位DelayMS(400);}}实验结果:1. 我们要送的数是0x80,串行方式0是移位寄存器输入输出方式。
2. _crol_()在#include<intrins.h>里,是左移函数。
3. 把这数每一位放在C里,TXD进行发送,也就是产生移位脉冲。
4. 每来一次下降沿,数据就发送一次!并行数据转换为串行数据(并入串出74ls165)/* 名称:并行数据转换为串行数据说明:切换连接到并串转换芯片74LS165的拨码开关,该芯片将并行数据以串行方式发送到8051的RXD引脚,移位脉冲由TXD提供,显示在P0口。
单片机应用设计课题:串口连接两个74LS164驱动2个LED数码管显示班级学号: 14110501xx 姓名: xx1设计要求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.1.2 74LS164串行口工作于方式0,发送数据时,是把串行端口设置成“串入并出的”输出口。
将它设置为“串入并出”输出口时,需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次设计,用74LS164。
附页:实验线路图:编译程序:源程序代码:1 汇编语言程序清单ORG 0000HLJMP MAINORG 000BHLJMP INTT0MAIN:MOV SP,#60HMOV TMOD,#01HSETB ET0SETB EAMOV TH0,#3CHMOV TL0,#0B0HSETB TR0MOV 30H, #0 ; 每中断一次加1MOV 31H, #0 ; 每秒加1, 当其值为100时清0 MOV 32H, #0 ; 个位MOV 33H, #0 ; 十位LP:MOV R0,#32HMOV R7,#2ACALL BINBCDMOV DPTR,#TABDSPLY:MOV A,@R0MOVC A,@A+DPTRCPL AMOV SBUF,ADSP1:JNB TI,DSP1CLR TIINC R0DJNZ R7,DSPLYLP1:MOV A,30HCJNE A, #10, LP1MOV 30H,#00HINC 31HMOV A,31HCJNE A,#100,LPMOV 31H,#0SJMP LPINTT0:MOV TL0,#0B0HMOV TH0,#3CHINC 30HRETITAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 0FFH,00H,73H; 入口参数二进制数存放在31H中; 出口参数 BCD数十位(33H), 个位(32H)BINBCD:MOV A,31HMOV B,#10DIV ABMOV 33H,AMOV A,BMOV 32H,ARETEND ; 程序结束2 C 语言程序清单#include <AT89X51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned int//共阴数码管段码:0~9,全亮,全灭,Puchartab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xFF,0x00,0x 73};uchar timer; //定时器每中断1次加1void main(void){uchar ten,one,count;SP=0x60;TMOD=0x01; //定时器T0方式1定时ET0=1; //开定时器T0中断EA=1; //开总中断TH0=0x3C; //每100ms中断一次TL0=0xB0;TR0=1; //启动定时器T0timer=0;count=0;do{do{ten=count/10; //求得十位one=count%10; //求得个位SBUF=~tab[one]; //发送个位while(~TI);TI=0;SBUF=~tab[ten]; //发送十位while(~TI);TI=0;while(timer<10); //延时1s,即10*100ms timer=0;count++; //每隔一秒,count值加1 }while(count<100); //从0计到99count=0;} while(1);}void intt0() interrupt 1{TH0=0x3C;TL0=0xB0;timer++;}。
目录1. 题目设计要求..................................................................2.系统的硬件设计..................................................................2.1系统采用的元器件..........................................................2.2器件选择..................................................................2.2.1 AT89C51概述及引脚功能..............................................2.2.2 74164的技术指标及工作原理..........................................3.系统硬件电路图设计..............................................................3.1振荡电路及复位电路设计....................................................3.2电路原理图................................................................ 4.系统的软件设计.................................................................4.1编程语言选择..............................................................4.2发送字符串模块设计........................................................4.4源代码....................................................................4.5编译结果..................................................................5.系统仿真调试 ...................................................................5.1仿真调试的过程............................................................5.2仿真调试的结果............................................................6.总结 ........................................................................... 7参考文献........................................................................1.题目设计要求用8051单片机的串行口外接串入并出的芯片74164扩展并行输出口,控制一组发光二极管,使发光二极管从下至上延时轮流显示。
单片机课程设计报告74IS164串行输出扩展运用班级:09移动1班姓名:王家树、黄志豪学号:09112002、09112003指导老师:陈海松一、课题的提出选择这个课程设计,是由于陈老师在课程上曾提到过74IS164芯,并且对串口通信比较喜欢,通过老师的咨询,便提出做一个关于74IS164的串行通信程序应用设计的报告。
二、设计任务和要求任务:设计一个能够由数码管显示,编写一个关于74IS164的串输入并行输出一串数字。
要求:利用单片机的并行串行I/O 口,利用C 语言中的指针函数,编写一段好用 又简洁的设计代码。
三、设计方案的论证1首先从参考文献中可以查到 54/74164是8位移位寄存器(串行输入,并行输 出),是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。
数据通 过两个输入端(DSA或DSB )之一串行输入;任一输入端可以用作高电平使能端, 控制另一输入端的数据输入。
时钟(CP )每次由低变高时,数据右移一位,输入 到QO , Q0是两个数据输入端(DSA 和DSB )的逻辑与,它将上升时钟沿之前保 持一个建立时间的长度。
主复位(MR )输入端上的一个低电平将使其它所有输入 端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
2、功能图图1.逻辑符号CP3 斗 5£©10—11□12 —□13&1D34S610111213SRGS四、硬件资源及其分配关键元件:89C51芯片,74IS164芯片、数码管、复位电路主要用到的硬件:P3 口、数码管、串行输出输入口;硬件分配:1•串行输出输入口(单片机51的10、11脚)分别接第一个74IS164的8脚1、2 脚,第二第三第四第五第六个进行级联;2. 74IS164的9脚复位端接高电平;3. 每个数码管(a b、c、d、e、f、g)接74ls164 并行输出口(3、4、5、6、10、11、12、13);五、硬件图:1£_:29Jfl-:31XTAL1PO.O/ADO P0.1/AD1 P0.2/AD2 XTAL2P03/AD3 P0.4/AD4 P0.5/AD6 P0.6/AD6 RSTP0.7/AD7 P2.0/A8 P2.1/A9 P2 2fA103E J —11: 35—11: 33 ■ ^12;PSEN ALE EAP2.3fA11 P2.4JA1 2 P25fA13 P2.6fA1 4P2.7JA1524丄—il丄士士丄土012345671 1 .1 1- 1 1 P3.0/RXD P3 1HXD P3.2flNTg P3.3/iNTT P3.4/T0 P3.5/T1 P3.6/WRP3.7/RD10 叫1 仁 txq_L2:…_L2 _L£ _L^ _LZ ARl^FlI P=ni^ri I FDhRy (AT89C51 控制) 弓RGB 1 1 n-LM-iMH〜L -13I-Lit ■BU11*lag(74IS164 级联)(整图分布)六、主程序:1第一次编写的程序 #in elude <reg51.h>#define _DISP_LED_h__void Disp_LED(unsigned int *key_num); void DelayNS(unsigned int dly); void main() {int nu mb[6]={1,5,8,3,1,2}; Disp_LED( nu mb); DelayNS(20);}void Disp_LED(u nsig ned int *key_ num) { 一 一Un sig ned char code LED_Val[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//0-9 un sig ned char data nu m[6];un sig ned char k; num[ 0]=*key_ num; nu m[1]=*(key_num+1); nu m[2]=*(key_num+2); nu m[3]=*(key_num+3); num[ 4]=*(key_ nu m+4); nu m[5]=*(key_ nu m+5);for(k=0;k<=5;k++)R&Trarr HF rrpul- PI .i fu 卜M E t-ii t-ii hlviwoe- I «.IMi j MdtiiJ RMfiaES L IW I T科出片3■治 时」靳I ■:皿2HHMli■梓Fi.imA »(-*nr frutfTT利丄砒[F-J^Ti MMffir 科.WT F JI fwT 蛋=1玉 4.■IK5-IiRCFlE^terLHiJiM-h■■>i・m ・・』■ h dI■>1I J aIfa■ hdI■I I.■b■・■!■3 I■ ■ ■":'^^1° -!:- ■■I - '1 v :n-fSI ^rMI ^r|5| nrf"| fr-|EI 訂={:I ;;::』:; Lfllj : ;; I J HJ :: IJWI--》25 ___ r-k£吐ID|聊IJ^L»>■^fTi^i^O4*84SBUF=LED_Val[ nu m[5-k]]; while(TI==O);TI=O;}}void DelayNS(u nsig ned int dly){int i,j;for(i=0;i<10000;i++) for(j=0;j<dly;j++);}2、第二次自学的头文件编写的程序:〃Disp_LED.c 主程序#in clude <reg51.h>#in clude "DISP_LED.h"void main(){int numb[6]={1,5,8,3,1,2};Disp_LED( nu mb); DelayNS(20);}〃DISP_LED.h 自编头文件#ifndef __DISP_LED_h__ #defi ne __DISP_LED_h__ void Disp_LED(u nsig ned int *key_ nu m); void DelayNS(u nsig ned int dly);/*函数名称:Disp_LED函数功能:数码管显示输入参数:key_num*/void Disp_LED(u nsig ned int *key_ num) { 一一un sig ned char code LED_Val[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//0-9un sig ned char data nu m[6];un sig ned char k;num[ 0]=*key_ num;nu m[1]=*(key_num+1);nu m[2]=*(key_num+2);nu m[3]=*(key_num+3);num[ 4]=*(key_ nu m+4);nu m[5]=*(key_ nu m+5);for(k=0;k<=5;k++){SBUF=LED_Val[ nu m[5-k]];while(TI==0);TI=0;}}/*函数名称:DelayNS 函数功能:延时程序输入参数:dly 返回信息:无*/void DelayNS(u nsig ned int dly) {int i,j; for(i=0;i<10000;i++) for(j=0;j<dly;j++);} #en dif七、调试运行1、按照电路图将电路用protues仿真。
单片机课程设计报告书课题名称 利用74LS164芯片扩展8位LED 串行显示接口电路姓 名学 号 0院、系、部 电气系专 业指导教师 焦永梅 马丽 高艳玲2011年 6 月30日※※※※※※※※※※※※※※※※※※※※※※※※2008级单片机 课程设计利用74LS164芯片扩展8位LED串行显示接口电路一、设计目的利用74LS164芯片扩展8位LED串行显示。
学习和掌握单片机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、设计要求1、要求将片内30H-37H单元中数据,8个数码管,用扩展串行的显示端口显示出来。
2、要求做出实物。
三、硬件电路设计硬件部分包括89C52芯片、74LS164芯片、4位数码管、电阻、电容等。
其中89C52芯片功能为:8K字节FLASH闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个全双工串行通讯口,振荡器及时钟电路;74LS164功能为:作八位串行入/并行输出移位寄存器用;数码管作用为:显示数字结果。
四、使用说明本实验显示的结果是12345678。
利用89C52和74LS164扩展8位LED 数码管显示,74LS164是将串行输入转换成并行输出,用来选择数码管的段显示,89C51的P2口是用对数码管的位选,从而驱动数码管按照程序的指令进行显示。
五、流程图设计NYQ 取数据NYN 开始初始化给30H 到37H 的单元送数据以上数据发送完成?取数据 发送数据发送成功? 送显示调整指针是否发送完?Y六、程序设计如下:ORG 0000H ;初始化AJMP MAINORG 0030HMAIN: MOV R0,#30H ;给30H-37H单元送数据 MOV R1,#01HMOV R7,#08LOOP: MOV A,R1MOV @R0,AINC R0INC R1DJNZ R7,LOOPMOV SCON,#00H ;设置串口方式为方式0 MOV PCON,#00H ;波特率不倍增MOV R7,08HMOV DPTR,#TABLEMOV R0,#30H ;取数据MOV A,@R0MOVC A,@A+DPTR ;查表MOV SBUF,A ;送数据JNB TI,$ ;判断发送是否成功CLR TIMOV P2,#0FEH ;位选LCALL DELAYINC R0MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV P2,#0FDHLCALL DELAYINC R0MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV P2,#0FBHLCALL DELAYINC R0MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$ CLR TI MOV P2,#0F7HLCALL DELAYINC R0MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$ CLR TI MOV P2,#0EFHLCALL DELAYINC R0MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$ CLR TIMOV P2,#0DFHLCALL DELAYINC R0MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV P2,#0BFHLCALL DELAYINC R0MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$ CLR TIMOV P2,#7FHLCALL DELAYAJMP MAINDELAY: MOV R6,#10 ;延时子程序 D2: MOV R7,#10D1: DJNZ R6,$DJNZ R7,D1RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH ;1-8表七、设计总结:当看到自己做出的实物能正确实现实验要求时,我不禁感到一丝喜悦。
单片机课程设计报告74ls164串行输出扩展运用
班级:09移动1班
姓名:王家树、黄志豪
学号:09112002、09112003
指导老师: 陈海松
一、课题的提出
选择这个课程设计,是由于陈老师在课程上曾提到过74ls164芯,并且对串口通信比较喜欢,通过老师的咨询,便提出做一个关于74ls164的串行通信程序应用设计的报告。
二、设计任务和要求
任务:设计一个能够由数码管显示,编写一个关于74ls164的串输入并行输出一串数字。
要求:利用单片机的并行串行I/O口,利用C语言中的指针函数,编写一段好用又简洁的设计代码。
三、设计方案的论证
1、首先从参考文献中可以查到54/74164是 8 位移位寄存器(串行输入,并行输出),是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。
数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。
时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。
主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
2、功能图
图 1. 逻辑符号
3、引脚说明
符号引脚说明
DSA 1 数据输入
DSB 1 数据输入
Q0~Q3 3~6 输出
GND 7 地 (0 V)
CP 8 时钟输入(低电平到高电平边沿触发)
/M/R 9 中央复位输入(低电平有效)
Q4~Q7 10~13 输出
四、硬件资源及其分配
关键元件:89C51芯片,74ls164芯片、数码管、复位电路
主要用到的硬件:P3口、数码管、串行输出输入口;
硬件分配:
1.串行输出输入口(单片机51的10、11脚)分别接第一个74ls164的8脚1、2脚,第二第三第四第五第六个进行级联;
2. 74ls164的9脚复位端接高电平;
3.每个数码管(a、b、c、d、e、f、g)接74ls164并行输出口(3、4、5、6、10、
11、12、13);
五、硬件图
(A T89C51控制)
(74ls164级联)
(数码管显示)
(整图分布)
六、主程序:
1、第一次编写的程序
#include <reg51.h>
#define __DISP_LED_h__
void Disp_LED(unsigned int *key_num);
void DelayNS(unsigned int dly);
void main()
{
int numb[6]={1,5,8,3,1,2};
Disp_LED(numb);
DelayNS(20);
}
void Disp_LED(unsigned int *key_num)
{
Unsigned char code LED_Val[] =
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//0-9 unsigned char data num[6];
unsigned char k;
num[0]=*key_num;
num[1]=*(key_num+1);
num[2]=*(key_num+2);
num[3]=*(key_num+3);
num[4]=*(key_num+4);
num[5]=*(key_num+5);
for(k=0;k<=5;k++)
{
SBUF=LED_Val[num[5-k]];
while(TI==0);
TI=0;
}
}
void DelayNS(unsigned int dly)
{
int i,j;
for(i=0;i<10000;i++)
for(j=0;j<dly;j++);
}
2、第二次自学的头文件编写的程序://Disp_LED.c 主程序
#include <reg51.h>
#include "DISP_LED.h"
void main()
{
int numb[6]={1,5,8,3,1,2};
Disp_LED(numb);
DelayNS(20);
}
//DISP_LED.h 自编头文件
#ifndef __DISP_LED_h__
#define __DISP_LED_h__
void Disp_LED(unsigned int *key_num); void DelayNS(unsigned int dly);
/*
函数名称:Disp_LED
函数功能:数码管显示
输入参数:key_num
*/
void Disp_LED(unsigned int *key_num) {
unsigned char code LED_Val[] =
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//0-9
unsigned char data num[6];
unsigned char k;
num[0]=*key_num;
num[1]=*(key_num+1);
num[2]=*(key_num+2);
num[3]=*(key_num+3);
num[4]=*(key_num+4);
num[5]=*(key_num+5);
for(k=0;k<=5;k++)
{
SBUF=LED_Val[num[5-k]];
while(TI==0);
TI=0;
}
}
/*
函数名称:DelayNS
函数功能:延时程序
输入参数:dly
返回信息:无
*/
void DelayNS(unsigned int dly)
{
int i,j;
for(i=0;i<10000;i++)
for(j=0;j<dly;j++);
}
#endif
七、调试运行
1、按照电路图将电路用protues仿真。
2、用keil软件编写程序,对程序进行调试。
3、对程序进行简化,自觉指针函数,上网查看教程,编写新的程序。
4、简化程序后,自学头文件编写方法,将程序多元化。
八、结论
虽说电路可以使用的,所编的程序也可以用了,但实际上在整个课程设计中还是有很多问题的,比如硬件电路焊接的时候出现焊接错误等,犯一些低级的错误。
功能按键的这一块还不是很完善,还有闹钟那一块也存在一些问题。
但总的
来说,整个课程设计还算顺利,没有遇到很大的问题。
九、设计心得体会
单片机课程设计,锻炼了我们的创新能力,积极思考问题。
所学有所用,正是我对课程设计的一种想法。
遇到许多问题,同时也发现自身所需,要弄动什么,与做什么。
相对来说,我们的硬件部分是用仿真做的,所以可省下不少的时间在软件部分,对于其中并没有接触过的指针函数我们通过请教别人,翻阅资料。
编程的内容参考网上符合的程序。
通过对比的程序间的差别,我们收获更多关于如何编写好的代码,简洁、避免重复等等。
仿真与实物还是有区别的。
如果可以焊出来的话,尽量不仿真,不过仿真的好处能节省时间。
我们选择了用它来做课程设计。
十、自我评价
这次程序设计,从当初想要完成一个具有一定功能、又有一定的实用性的作品,简化成做一个对串行通行进行扩展运用。
在这个期间花费了很多时间。
最后只能完成自己所学东西上的一些扩展。
但是,在这个过程中,让我们对单片机的串行输出这个功能有了更深的了解。