串入并出(74LS164)和并入串出(74LS165)

串入并出(74LS164)和并入串出(74LS165)
串入并出(74LS164)和并入串出(74LS165)

\

我们在进行数据转换的时候经常会用到74LS164,74LS165,在单片机课程和数字电子基础里都可以看到,这两个芯片是思绪上要形成互补的思想,一个是串入并出,另外一个是并入串出!

一下两个例题用到的是单片机的串行线,TXD(发送标志是TI)和RXD(接收标志是RI)

串行数据转换为并行数据(74ls164串入并出)

/* 名称:串行数据转换为并行数据

说明:串行数据由RXD发送给串并转换芯片74164,TXD则用于输出移位时钟脉冲,74164将串行输入的1字节转换为并行数据,

并将转换的数据通过8只LED显示出来。本例串口工作模式0,即移位寄存器I/O模式。TXD发送

*/

#include

#include

#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里,是左移函数。

3. 把这数每一位放在C里,TXD进行发送,也就是产生移位脉冲。

4. 每来一次下降沿,数据就发送一次!

并行数据转换为串行数据(并入串出74ls165)

/* 名称:并行数据转换为串行数据

说明:切换连接到并串转换芯片74LS165的拨码开关,该芯片将并行数据以串行方式发送到8051的RXD引脚,移位脉冲由TXD提供,显示在P0口。RXD接收

*/

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit SPL=P2^5; //shift/load

//延时

void DelayMS(uint ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

//主程序

void main()

{

SCON=0x10; //串口模式0,允许串口接收

while(1)

{

SPL=0; //置数(load),读入并行输入口的8位数据

SPL=1; //移位(shift),并口输入被封锁,串行转换开始

while(RI==0); //未接收1字节时等待

RI=0; //RI软件置位

P0=SBUF; //接收到的数据显示在P0口,显示拨码开关的值

DelayMS(20);

}

}

与74LS164的工作原理大致相同,这个这是接收,用LED来显示八个开关的状态。很简单的。

注意这个就可以

SPL=0; //置数(load),读入并行输入口的8位数据

SPL=1; //移位(shift),并口输入被封锁,串行转换开始

好了,程序很简单!只是起到启发作用!

参考资料:

《单片机C语言程序设计实训100例—基于8051+Proteus仿真.doc》

74LS164动态扫描数码管与proteus传真及C程序

74ls164 为8 位移位寄存器,其主要电特性的典型值如下: 当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。串行数据输入端(A,B)可控制数据。当A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0 为低电平。当A、B 有一个为高电平,则另一个就允许输入数据,并在CLOCK 上升沿作用下决定Q0 的状态。 引脚功能: CLOCK :时钟输入端 CLEAR:同步清除输入端(低电平有效) A,B :串行数据输入端 QA-QH:输出端

极限值 电源电压7V 输入电压…… 5.5V 工作环境温度74164….. -55~125℃74164…… -0~70℃储存温度….. -65℃~150 真值表:

时序图: 建议操作条件:

应用实例: C程序: #include #include #define uchar unsigned char #define uint unsigned int sbit DA T=P2^3;//A,B端接一块后接入DA T sbit CLK=P2^2; sbit W A1=P2^4; sbit W A2=P2^5; uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //共阴数码管无小数点void delayms(uint time) { uchar i,k; for(k=time;k>0;k--) for(i=110;i>0;i--); } void sendchar(ch)

I0口驱动74LS164数码管静态显示程序

74LS164 1、器件功能作用 8 位串入,并出移位寄存器 2. 概述 74HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。 主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。 3. 特性 ?门控串行数据输入 ?异步中央复位 ?符合 JEDEC 标准 no. 7A ?静电放电 (ESD) 保护: ·HBM EIA/JESD22-A114-B 超过 2000 V ·MM EIA/JESD22-A115-A 超过 200 V 。 ?多种封装形式 ?额定从 -40 °C 至+85 °C 和 -40 °C 至+125 °C 。 4. 功能图

图 1. 逻辑符号 图 2. IEC 逻辑符号 图 3. 逻辑图

图 4. 功能图 5. 引脚信息 图 5. DIP14、SO14、SSOP14 和 TSSOP14 封装的引脚配置引脚说明 6. 功能表(真值表)

H = HIGH(高)电平 h = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 HIGH(高)电平L = LOW(低)电平 l = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 LOW(低)电平q = 小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入(referenced input) 的状态 ↑ = 低-至-高时钟跃变 7. 电器特性

74LS164在单片机中的使用

74LS164在单片机中的使用 作者:huqin 来源:本站原创点击数:406 更新时间:2014年02月15日【字体:大中小】 在单片机系统中,如果并行口的IO资源不够,那么我们可以使用74LS164来扩展并行IO口,节约单片机IO资源。74LS164是一个串行输入并行输出的移位寄存器,并带有清除端。 74LS164的引脚可以查看数据手册。 proteus仿真图和代码附上。

#include #define HIGH 1 #define LOW 0 #define SEG_PORT P0 sbit DATA = P0^4; sbit CLK = P0^5; unsigned char Timer0IRQEvent = 0; unsigned char Time1SecEvent = 0; unsigned int TimeCount = 0; unsigned char SegCurPosition = 0; code unsigned char SegCode[10] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x 07,~0x7F,~0x6F}; code unsigned char SegPosition[4] = {0xFE,0xFD,0xFB,0xF7}; unsigned char SegBuf[4] = {0}; void LS164_DATA(unsigned char x) { if(x) { DATA = 1; } else { DATA = 0; }

void LS164_CLK(unsigned char x) { if(x) { CLK = 1; } else { CLK = 0; } } /********************************************************** *函数名称:LS164Send *输入:byte单个字节 *输出:无 *功能:74LS164发送单个字节 ***********************************************************/ void LS164Send(unsigned char byte) { unsigned char j; for(j=0;j<=7;j++) { if(byte&(1<<(7-j))) {

单片机控制74LS164驱动数码管

单片机控制74LS164驱动数码管 利用74LS164驱动数码管, 我们首先来弄清74LS164的工作方式,然后学习如何在自己板子上连接线路。 我们来讲一讲数码管的基础知识: 使用数码管时,要注意区分这两种不同的接法:共阴极和共阳极。共阴极时,为1则亮;共阳极时,为0则亮。

为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。 比如共阴极的方式接数码管,显示“1”,则编码为0x3f,即00111111(dp g f e d c b a )。 ================================================================================================== 静态显示程序如下: /*----------------------------------- 功能:数码管静态显示0-F 单片机:AT89S52 ------------------------------------*/ #include "reg52.h" #define uint unsigned int #define uchar unsigned char sbit DAT=P0^3; sbit CLK=P0^2; void sendbyte(uchar byte); void delay(uint z); uchar code tab[]={ 0xed,0x09,0xbc,0x9d,0x59,0xd5, 0xf5,0x0d,0xfd,0xdd,0x7d,0xf1, 0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭 /*======================== 主函数 =========================*/ void main() { unsigned char h; while(1) { for(h=0;h<17;h++) { delay(500); //延时大约是0.5s sendbyte(h); delay(500); } h=0;

(完整版)74ls164动态驱动多位数码管

74ls164 能否动态驱动多位数码管void display() //数码显示 { SCON=0; //初始化串行口方式SBUF=dispcode[ge]; while(!TI); TI=0; led4=0; delay(2); led4=1; SBUF=dispcode[shi]; while(!TI); TI=0; led3=0; delay(2); led3=1; SBUF=dispcode[bai]; while(!TI); TI=0; led2=0; delay(2);

SBUF=dispcode[qian]; while(!TI); TI=0; led1=0; delay(2); led1=1; SBUF=dispcode[wan]; while(!TI); TI=0; led0=0; delay(2); led0=1; } 74ls164数码管驱动(第二个程序) #define clock PORTD.1 #define date PORTD.0 #define clock_en DDRD.1 #define date_en DDRD.0 unsigned char lab[2][10]={ 0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09, 0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,0x08}; void send(unsigned char w) { unsigned char i; for(i=0;i<8;i++) { clock=0; date=w&1;

74ls164串行输出扩展运用课程设计

单片机课程设计报告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); 五、硬件图

单片机串口连接两个74LS164驱动两个LED数码管

单片机应用设计 课题:串口连接两个74LS164驱动2个LED 数码管显示 班级学号:xx 姓名:xx

1设计要求 设计内容 设晶体为12MHz,将拨码开关数据串行输入到74LS164,并行输出到2个LED 数码管进行相应的数码显示。 设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与建议、期望成绩等。 学习目的 该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应用系统设计奠定了较好的基础。 2 系统设计分析 单片机最小系统+串口+74LS164+LED数码管 单片机的最小系统是单片机能够工作的最小硬件组合,对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。 串口 数据通信方式包括并行通信和串行通信两种。并行通信就是多条数据线上同时传送,其优点:速度快,只适于近距离通信。串行通信就是数据以为以为的顺序传送,其优点:线路简单,成本低,适合远距离通信。 串行通信方式包括:异步串行通信和同步串行通信。异步方式,数据传送不连续,时间间隔任意。同步方式,发送与接收同步。数据传送方式:单工、半双工、全双工、多工。常见的串行通讯有:RS-232、RS-485、CAN总线等。 串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、电源控制寄存器PCON(控制波特率)。SM0、SM1选择工作方式,SM2用于多机通信,REN允许接收控制位,TB8/RB8发送/接收数据D8位,TI/RI为发送/接收中断标志位。

使用74LS164制作流水灯

使用74LS164制作流水灯 单片机初学者对于流水灯实验一定特别的熟悉,这个实验逻辑清晰,效果明显,在各类单片机以及微机控制相关材料中都会进行讲解。当我们学习了一段时间单片机之后,或者在进行单片机系统设计时,会发现51单片机的引脚有时并不是很够用,有时候需要尽量节省单片机I/O引脚。如何节省I/O引脚是我们在设计单片机系统时,经常需要考虑的一个问题。 下面以8个LED组成的流水灯效果的实现为例,讲解如何节省单片机的I/O引脚。 通常我们会采用如图1所示的电路图,通过单片机直接驱动8个LED,但是这种控制方式消耗了8个单片机引脚。 图1 常规流水灯电路

我们也可以使用三八译码器来完成流水灯的效果。其控制电路图如图2所示(这种控制方式在我之前上传的文档中有详细介绍,感兴趣读者可以查看)。这种控制方式虽然可以在一定程度上可以节省单片机I/O接口的使用,如下图所示,最少只需要使用3个I/O口。但是这种方式也存在一定的缺点,这种控制方式只能同时点亮1个LED 灯,如果想实现两个以及以上的LED灯点亮的效果,那么这种电路将无法直接实现效果。 图2 三八译码器拓展I/O口 下面我们看一下能够使用其他的芯片,来进一步降低单片机I/O 口的消耗。使用串行转并行芯片74LS164来制作流水灯效果,其控制原理图如图3所示。从原理图中可以看出,使用了74LS164芯片控制流水灯之后,只占用了单片机的两个I/O口。一个用于输出时钟脉冲,另外一个用于输出串行数据。

图3 74LS164控制流水灯原理图 与前面采用译码器控制的流水灯相比,使用74LS164控制的流水灯效果具有如下两个显著优点: 1.占用单片机I/O口少,最少仅为2个。 2.控制功能强大,74LS164驱动的流水灯点亮的个数没有限制,可以任意数量点亮。 编程思路:单片机以最快的速度通过串口控制8个LED灯的点亮状态,由于此过程极短,人眼无法分辨,通过延时函数稳定输出效果,并延时一定时间,再次以最快的速度通过串口控制8个LED灯的亮灭状态,并执行延时函数实现等待效果,如此反复,就可以实现流水灯的效果,且可以实现任意的流水灯的效果。 编程技巧:由于需要反复执行“单片机通过串口控制8个LED灯”的程序,可以将该程序通过子函数来实现简化程序的效果。 下面给出笔者编写的程序参考,读者可以根据自己的编程思路,完成不同的控制程序的编写。

单片机课程设计——74LS164实现串入并出

目录 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参考文献........................................................................

74LS164和74LS165工作原理及其单片机中的应用(基于Proteus仿真)

74LS164和74LS165工作原理及其在单片机中的应用 基于Proteus仿真 前言:本文详细介绍了74LS164和74LS165工作原理,并分别举例它们在单片机中的应用,所举例子包含proteus仿真电路图,源程序,程序注释详细清楚。 1、74LS164在单片机中应用举例 本例在单片机串行口外接一片8位串入并出移位寄存器74LS164芯片,构成单片机输出接口电路,控制8只LED滚动显示。 (1)74LS164芯片如右图所示,它是8位串入并出移位寄存器,串行输入数据, 然后并行输出。各引脚功能如下: A、B(1、2引脚):数据输入端,数据通过这两 个输入端之一串行输入;任一输入端可以用作高电平 使能端,控制另一输入端的数据输入。当其中任意一 个为低电平,则禁止新数据输入;当其中有一个为高 电平,则另一个就允许输入数据。因此两个输入端或 者连接在一起,或者把不用的输入端接高电平,一定 不要悬空。 Q0~Q7(3~6,10~13引脚):数据输出端 CP(8号引脚):时钟输入端。CP每次由低变高时,数据右移一位,输入到Q0,Q0 是两个数据输入端的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。 MR:复位清除端,当MR为低电平时,其它所有输入端都无效,同时所有输出端均为低电平。 GND(7号引脚,在proteus中已隐藏):接地端 VCC(14号引脚,在proteus中已隐藏):电源端,接+5V电源

74LS164 内部逻辑图 (2)如下图所示,本例单片机串行口工作于方式0,即移位寄存器输入/输出模式。串行数据通过RXD输出,TXD则用于输出移位时钟脉冲。数据输入端1接高电平,数据输入端2接单片机RXD引脚。时钟输入端接TXD引脚,复位端悬空。数据输出端通过限流电阻接8只LED灯。 C程序如下: #include #include #define uint unsigned int #define uchar unsigned char void delay(uint x) {uchar i; while(x--) for(i=0;i<120;i++); } void main() {uchar c=0x80; SCON=0x00; //串行口工作在方式0 while(1) {c=_crol_(c,1); SBUF=c; while(TI==0); //等待发送结束 TI=0; //发送结束,TI置0 delay(400); } }

74HC164驱动数码管C程序

//**时间:2015-6-5 //**编写:Z X C //**功能:74HC164驱动数码管显示0-9数字 #include #define uchar unsigned char #define uint unsigned int #define SDA P0_0 //74LS164 SAD #define SCK P0_1 //74LS164 SCK sbit wm=P2^0; uint i; //定义数码管显示字符跟数字的对应数组关系 uchar code sled_dm_xs[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0 1 2 3 4 5 6 7 8 9 //****1MS延时函数******** void delay(uint z) { uint i,j; for(i=0;i

//******主函数********* void main() { wm=0; while(1) { for(i=0;i<10;i++) { senddata(sled_dm_xs[i]); wm=1; delay(300); } } }

单片机串口连接两个74LS164驱动两个LED数码管学习资料

单片机串口连接两个74L S164驱动两个 L E D数码管

单片机应用设计 课题:串口连接两个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用于多机通信,

单片机之用74LS164驱动数码管

单片机之用74LS164驱动数码管 2011-09-26 16:31:39| 分类:单片机(AT89S52 | 标签:单片机|字号大中小订阅用74LS164驱动数码管,首先弄清74LS164的工作方式,然后是自己板子上的线路是如何连接的。 最后,说一说数码管的基础知识: 使用数码管时,要注意区分这两种不同的接法:共阴极和共阳极。共阴极时,为1则亮;共阳极时,为0则亮。

为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。 比如共阴极的方式接数码管,显示“1”,则编码为0x3f,即00111111(dp g f e d c b a )。 ================================================================================================== 静态显示程序如下: /*----------------------------------- 功能:数码管静态显示0-F 单片机:AT89S52 ------------------------------------*/ #include "reg52.h" #define uint unsigned int #define uchar unsigned char sbit DAT=P0^3; sbit CLK=P0^2; void sendbyte(uchar byte); void delay(uint z); uchar code tab[]={ 0xed,0x09,0xbc,0x9d,0x59,0xd5, 0xf5,0x0d,0xfd,0xdd,0x7d,0xf1, 0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭 /*======================== 主函数 =========================*/ void main() { unsigned char h; while(1) { for(h=0;h<17;h++) { delay(500); //延时大约是0.5s sendbyte(h); delay(500); } h=0;

74ls164程序

89c2051总共才有20个引脚所以在实现复杂功能的单片机应用中节约针脚的使用显得尤为重要我最近在做单片机项目时已开始客户要求的功能少所以采用89c2051的p1口直接驱动两个led数码管(外加两个扫描控制脚p3_3 p3_4)这样光显示部分就占用了9个脚开始的几个控制系统还可以满足需要可是后来客户要一次加三个功能1.水平开关输入2.缺水开关输入 3.状态报警输出因为之前做的程序20个脚正好全部用上所以这次再加功能再不更换单片机芯片的情况下就只能把显示电路改为其他方式考虑到成本问题采用常用的74ls164驱动led比较实用(74LS164 是TTL 八位串行入/并行输出移位寄存器)经过两天的研究现在终于完成了该项目的程序编写工作再此次编写过程中我发现网上讲的大多数都是74ls164 汇编程序的例子c语言的几乎没有 所以在此奉上74ls164的c语言的源代码其中驱动共阴数码管和驱动共阳数码管时程序是不同的这一点其他地方还有书上并未明确说明所以在这要重点提一下。 c51源码和Proteus仿真程序下载请点击下面链接(压缩包包括共阴、共阳源文件及仿真文件) #include "reg52.h" #define uint unsigned int #define uchar unsigned char sbit DAT=P1^1; sbit CLK=P1^2; uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xe7f,0xff,0x00};//0-9,-,全灭 void sendbyte(uchar byte) { uchar num,c; num=tab[byte]; for(c=0;c<8;c++) { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } } void delay_50ms(unsigned int t) { unsigned int j; for(;t>0;t--) for(j=6245;j>0;j--) {;} }

74LS164在单片机中的使用

74LS164在单片机中的使用 在单片机系统中,如果并行口的IO 资源不够,那么我们可以使用 74LS164 来扩展并行IO 口,节约单片机IO 资源。74LS164 是一个串行输入并 行输出的移位寄存器,并带有清除端。74LS164 的引脚可以查看数据手册。proteus 仿真图和代码附上。 #include #define HIGH 1#define LOW 0#define SEG_PORT P0 sbit DATA = P0;sb it CLK = P0 ; unsigned char Timer0IRQEvent = 0;unsigned char Time1SecEvent = 0;unsigned int TimeCount = 0;unsigned char SegCurPosition = 0;code unsigned char SegCode[10] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};code unsigned char SegPosition[4] = {0xFE,0xFD,0xFB,0xF7};unsigned char SegBuf[4] = {0}; void LS164_DATA(unsigned char x){ if(x) { DATA = 1; } else { DATA = 0; }}void LS164_CLK(unsigned char x){ if(x) { CLK = 1; } else { CLK = 0; }}/***********************************************************函数名 称:LS164Send*输入:byte 单个字节*输出:无*功能:74LS164 发送单个 字节***********************************************************/void LS164Send(unsigned char byte){ unsigned char j; for(j=0;j<=7;j++) { if(byte&(1<<(7-j))) { LS164_DATA(HIGH); } else { LS164_DATA(LOW); } LS164_CLK(LOW); LS164_CLK(HIGH); }}/***********************************************************函数名

74LS164串转并实验

74LS164串转并实验 一、实验目的 1、掌握89C51串行口方式0工作方式及编程方法 2、掌握89C51的P1口的I/O 功能输出 3、掌握利用串行口入I/O 口,扩展I/O 通道的方法 二、实验说明 本实验是用74LS164把输入的串行数转换成并行数输出,74LS164为串行输入并行输出移位寄存器,其引脚图及功能如下: A 、 B :串行输入端; QA ~QH :并行输出端; CLR :清零端,低电平有效; CLK :时钟脉冲输入端,上升沿有效。 实验采用单片机串行工作方式0和P1端口两种方式串行输出 数据。串行口工作方式0时,数据为8位,从RXD 端输出,TXD 端输出移位信号,其波特率固定为Fosc/12。在CPU 将数据写入SBUF 寄存器后,立即启动发送。待8位数据输完后,硬件将状态寄存器的TI 位置1,TI 必须由软件清零。 串行口工作方式0数据/时钟是自动移位输出,用P1端口输出数据时,要编程位移数据,每输出一个数据位,再输出一个移位脉冲。 三、实验内容及步骤 本实验需要用到单片机最小系统(F1区)、十六位逻辑电平显示(I4区)和74LS164(G3区)。 1、选用89C51单片机最小应用系统模块,用八位数据线连接74LS164的并行输出JD5G 与十六位逻辑电平显示模块JD2I ,将74LS164的串行输入端A/B (1和2脚)接到RXD 上,CLK 接到TXD 上,CLR 接INT0。 2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。 3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加 “TH23_74164 .ASM ”源程序,进行编译,直到编译无误。 4、全速运行程序,观察发光二极管亮灭情况,先右移动两次,再左移动两次,然后闪烁两次。 5、也可以把源程序编译成可执行文件,用ISP 烧录器烧录到89S52/89S51芯片中。(ISP 烧录器的使用查看附录二) 四、实验程序(见光盘中的程序文件夹) 五、电路图 CLR 9CLK 8 A 1B 2 QA 3QB 4QC 5QD 6QE 10QF 11QG 12QH 13 VCC 14GND 7 74LS164 CLR 9CLK 8A 1B 2QA 3QB 4QC 5QD 6QE 10QF 11QG 12QH 13 VCC 14GND 7 U3G SN74LS164N VCC XTAL1A 12MHz C3A 33pF C2A 33pF P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.7 8 RST 9P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR 16P3.7/RD 17XTAL218XTAL119VSS 20 P2.0 21P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN 29ALE/PROG 30EA 31P0.032 P0.133P0.234P0.335P0.436P0.537P0.638P0.739VCC 4089C51 U1F VCC P3.0P3.1P1.0 P1.1P1.2P1.3P1.4P1.5P1.6P1.7 P0.0 P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA ALE PSEN P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0 P3.2P3.3P3.4P3.5P3.6P3.7 510*8 VCC P3.0 P3.2 P3.1L0L1L2L3 L4L5L6L7 C3F 10uF VCC RESET R2F 100R1F 1K

单片机与74ls164控制八路流水灯程序(需编译)

//title:static1602display //author:LFD //revision:1.1 #include #include #define uint unsigned int #define uchar unsigned char //--------------定义------------------ sbit DS=P2^2; //数据端 sbit SCLK=P2^1; //时钟信号 //--------------函数声明------------------ void In_164(uchar dat); void Delay_1ms(uint x); //--------------主程序------------------ void Delay_1ms(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } void In_164(uchar dat) //送数据进74LS164 { uchar i; for(i=0;i<8;i++) { dat=dat>>1; //移位8 位 DS=CY; //溢出位给数据端 SCLK=0; //时钟脉冲 _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); SCLK=0; } } void main(void) { uchar temp=0x01; uchar i; while(1) {

for(i=0;i<8;i++) { In_164(temp); Delay_1ms(1000); //延时1s temp=(temp<<1)|(temp>>7); //循环移位 } } }

相关主题
相关文档
最新文档