74LS164在单片机中的使用

发布者:NanoScribe最新更新时间:2015-05-12 来源: 51hei关键字:74LS164  单片机 手机看文章 扫描二维码
随时随地手机看文章

      在单片机系统中,如果并行口的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,~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);
    }
}
/**********************************************************
*函数名称:SegRefreshDisplayBuf
*输    入:无
*输    出:无
*功    能:数码管刷新显示缓存
***********************************************************/
void  SegRefreshDisplayBuf(void)
{
     SegBuf[0] = TimeCount%10;
     SegBuf[1] = TimeCount/10%10;
     SegBuf[2] = TimeCount/100%10;
     SegBuf[3] = TimeCount/1000%10;        
}[page]
/**********************************************************
*函数名称:SegDisplay
*输    入:无
*输    出:无
*功    能:数码管显示数据
***********************************************************/
void SegDisplay(void)
{
    unsigned char t;
    SEG_PORT = 0x0F;
   
    t = SegCode[SegBuf[SegCurPosition]];
    LS164Send(t);
    SEG_PORT = SegPosition[SegCurPosition];
    if(++SegCurPosition >= 4)
    {
        SegCurPosition = 0;
    }   
}
/**********************************************************
*函数名称:TimerInit
*输    入:无
*输    出:无
*功    能:定时器初始化
***********************************************************/
void TimerInit(void)
{
    TH0 = (65536 - 5000)/256;
    TL0 = (65536 - 5000)%256;
    TMOD = 0x01;
}
/**********************************************************
*函数名称:Timer0Start
*输    入:无
*输    出:无
*功    能:定时器启动
***********************************************************/
void Timer0Start(void)
{
    TR0 = 1;
    ET0 = 1;
}
/**********************************************************
*函数名称:PortInit
*输    入:无
*输    出:无
*功    能:I/O初始化
***********************************************************/
void PortInit(void)
{
    P0 = P1 = P2 = P3 = 0xFF;   
}
/**********************************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主题
***********************************************************/
void main(void)
{
    PortInit();
    TimerInit();
    Timer0Start();
    SegRefreshDisplayBuf();
    EA = 1;
    while(1)
    {
        if(Timer0IRQEvent)
        {
            Timer0IRQEvent = 0;
            if(Time1SecEvent)
            {
                Time1SecEvent = 0;
                if(++TimeCount >= 9999)
                {
                     TimeCount = 0;
                }
                SegRefreshDisplayBuf();
            }
            SegDisplay();
        }   
    }
}
/**********************************************************
*函数名称:Timer0IRQ
*输    入:无
*输    出:无
*功    能:定时器中断函数
***********************************************************/
void Timer0IRQ(void) interrupt 1
{
    static unsigned int cnt = 0;
    TH0 = (65536 - 5000)/256;
    TL0 = (65536 - 5000)%256;
    Timer0IRQEvent = 1;
    if(++cnt >= 200)
    {
        cnt = 0;
        Time1SecEvent = 1;
    }
}

关键字:74LS164  单片机 引用地址:74LS164在单片机中的使用

上一篇:STC单片机实现可调PWM输出的C51程序
下一篇:计数器(状态机按键检测)程序

推荐阅读最新更新时间:2024-03-16 14:01

基于51单片机的简易计算器proteus仿真 数码管显示
硬件设计 仿真图: 数码管显示,支持整数加减乘除,不支持小数和负数及连续运算; (20x3 和20÷3的结果 ) 程序设计 //************************************************************************************************* //************************************************************************************************* //** 程序名 :计算器处理主程序,根据计算器的输入状态分派不同的函数对按键进行处理。 **
[单片机]
基于51<font color='red'>单片机</font>的简易计算器proteus仿真 数码管显示
基于PlCl6LF874单片机的电容测量模块设计
  电容式传感器已广泛应用于工业、医学、军事等领城。但目前大部分电容测量方法集成化水平低、精度低,因而对电容特别是对微小电容的精确测量始终是一个很重要的内容。振荡法电路结构简单、抗干扰能力差,板间内电容影响测量结果;电桥法利用电桥平衡原理测量电容,测量结果受桥臂电容性能影响较大。本文用到美国 Micmchip公司PICl6LF874单片机,该单片机采用RISC精简指令集、哈佛总线结构、流水线指令方式,具有抗干扰能力强、功耗低、高性能、价格低等特性。   1 PICl6LF874单片机   PICl6系列单片机采用精简指令集(Reduced InstrucTIon Set Computer,RISC)结构,突破了传统单片机对PC
[单片机]
基于PlCl6LF874<font color='red'>单片机</font>的电容测量模块设计
MCU,DSP,ARM学习方法经验分享
  很多初学者,甚至是混了好几年的老手,都在抱怨,电子这行怎么竞争这么大啊? 颓废,这完全在抹杀自己的激情,没了激情,搞电子,完全就是在浪费生命。其实,竞争真的大吗??对比一下,难道做业务的竞争不大,做管理的竞争不大,现在这个社会,哪个领域,哪个行业,竞争都大,所以,假如你想逃避竞争,那你就不用活了,当然,你本身家庭很好,父辈好有米的话,那另当别论!所以, 不管什么行业,竞争大不大的问题,都不用问了。答案都是:竞争大,但是必须面对,我们要自己面对的竞争越小,那么你的技术能力应该是越牛X。搞电子的人要跟得上时代,但是人的脑袋会随着年龄的增大而迟钝,所以这就造成了电子人才(特别是搞电子软件)的一种生老病死的自然规律。也就是说,一般40
[单片机]
一种基于单片机的数控开关电源设计
1、引言 现实的生活和实验中,常常要用到各种各样的电源,电压要求多样。如何设计一个电压稳定,输出电压精度高,并且调节范围大的电压源,成了电子技术应用的热点。在市面上,各种电源产品各式各样,有可调节的和固定的。但是普遍存在一些问题,如转换效率低,功耗大,输出精度不高,可调节范围过小,不能满足特定电压的要求,输出不够稳定,纹波电流过大,并且普遍采用可调电阻器调节,操作难度大,易磨损老化。 针对以上问题,本文采用基于KA3525 PWM控制芯片的不对称半桥式功率变换器,并采用16位凌阳单片机作为数控核心,通过其内置的D/A输出调制PWM,提高了电源的输出精度和效率,并且方便使用者操作,实现了基于单片机的数控开关电源。 2、
[单片机]
一种基于<font color='red'>单片机</font>的数控开关电源设计
采用单片机的多普勒血流计系统的设计实现
  0 引言   多普勒血流计的出现标志着在微血管灌流方面取得重大进步。本设计采取双通道装置拾取多普勒信号,有效地抑制噪声信号,采用单片机来对信号进行控制及处理,既简化了电路,又有助于信号的处理及读取。运用12位的AD574A不但提高了信号精度,利用其双极性,也省去了以往信号处理中复杂的乘方、开方电路或绝对值电路。通过四位LED显示,直观、准确地读取血细胞灌流量的瞬时相对定量值,可精确到小数点后两位。并同时配有扬声器来形象表示信号的强弱和变化。还可通过绘图仪,对信号进行长时间检测、记录,以便研究和分析。   1 系统总体方案   系统组成框图如图1所示。系统工作时,从激光探头发射出一束激光照射到组织上,并穿透组织形成一
[单片机]
采用<font color='red'>单片机</font>的多普勒血流计系统的设计实现
意法半导体新系列MCU STM32H5提升下一代智能应用的性能和安全性
意法半导体新系列MCU STM32H5提升下一代智能应用的性能和安全性 • 采用Arm Cortex-M33嵌入式微控制器内核,运行频率250MHz • 内置 STM32Trust TEE Secure Manager,让安全功能既强大又简单 2023年3月16日,中国 – 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)发布了STM32H5系列高性能微控制器(MCU)。 新系列产品引入STM32Trust TEE Security Manager安全技术,为智能物联网设备带来先进的安全功能。 新推出的STM32H5 MCU系列搭载Arm® 的C
[单片机]
意法半导体新系列<font color='red'>MCU</font> STM32H5提升下一代智能应用的性能和安全性
单片机水塔控制系统
功能:单片机智能控制水塔系统,实时检测水塔水位,并能实时显示,自动控制继电器和电机使水位保持在黑水瓶 仿真图如下所示 程序参考C语言源代码如下: #include reg51.h //定义一个数组,使数码管显示的数字和数组元素的下标相等 unsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; sbit shuiman=P1^0;//水满 sbit sw5=P1^1;//水位5 sbit sw4=P1^2;//水位4 sbit sw3=P1^3;//水位3 sbit sw2=P1^4;//水位2 sbit sw1=P1
[单片机]
<font color='red'>单片机</font>水塔控制系统
意法半导体高性能微控制器为智能家居和工业系统新创新扫清障碍
新的STM32H7R/S微控制器将嵌入式应用性能提高到一个新水平,适合新一代智能工厂、建筑、基础设施和健康监测设备 2024年3月14日,中国-- 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST) 发布了一款新的集MPU和MCU两者之长的高性能产品。 微处理器(MPU)系统通常更加复杂,处理性能、系统扩展性和数据安全性更高,而微控制器(MCU)系统的优势是简单和集成度高。取两者之长,意法半导体新产品越级进化。 在采用这些新的STM32H7 MCU后,设备厂商可以更快、更经济地开发智能家电、智能楼宇控制器、工业自动化和个人医疗设备,满足终端市场用户日益增长的需求
[物联网]
意法半导体高性能<font color='red'>微控制器</font>为智能家居和工业系统新创新扫清障碍
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved