74ls164单片机编程(一):采用74ls164驱动led数码管
用单片机驱动led数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。本实例用两片74ls164采用动态扫描的方法驱动两个7段数码管显示,如下图所示。因为74ls164没有数据锁存端,所以数据在传送过程中,数码管上有闪动现象,驱动的位数越多,闪动现象越明显。为了消除这种现象,可以在电路中增加一个pnp型的三极管来控制数码管的接地端,这样在数据传送过程中,关闭三极管使数码管断电而不显示,数据传送完后立刻使三极管导通。这种办法可驱动十几个74ls164显示而没有闪动现象。
本实例采用动态刷新方式在两个7段数码管上显示数字,p3.4用来控制741s164的清零端,用两个pnp三极管来控制数码管的通电,从而消除在传输数据的过程中数码管的显示抖动问题。
程序代码:
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来输出一个8位的数据,
点亮数码管相应的管脚,以显示数字
=====================================*/
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(uint z)
{
uint x,y;
for(x=z;x》0;x--)
for(y=110;y》0;y--);
}
74ls164单片机编程(三)
51单片机驱动74ls164跑马灯,好处是只用了2个端口即可实现,电路如下图所示:
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit dat=p2^6;
sbit clk=p2^7;
uchar ii;
uchar code seg7code[]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0xff};//0-9,-,全灭
void sendbyte(uchar seg)
{
uchar num,c;
num=seg7code[seg];
for(c=0;c《8;c++)
{
dat=num&0x80;
num=_crol_(num,1);
clk=0;
clk=1;
}
}
void delayms(int ms)
{
uchar mi,mj;
for(;ms》0;ms--)
for(mi=6;mi》0;mi--)
for(mj=82;mj》0;mj--);
}
void main()
{
for(ii=0;ii《10;ii++)
{
sendbyte(ii);
delayms(200);
}
}
Invensense推出IDG-650/ ISZ-650应用游戏摇杆陀螺仪
网管交换机的基本配置方法
物联网患者可以利用物联网技术将实时数据上传服务器
CES2020:英特尔展示Tiger Lake移动处理器和独立GPU
电源发展趋势的分析,减小EMI并提高密度和集成隔离
74ls164单片机编程汇总(跑马灯/驱动数码管)
以太坊系统为什么要设置难度炸弹
平头哥“玄铁”出鞘
OPPOR11最新消息:OPPOR11硬件配置全面升级,价格首次曝光!销量冠军还会属于OPPOR11吗?
中国5G+工业互联网发展报告
基于声发射信号的汽轮机动静摩擦监测
dfrobot 空中飞鼠键盘介绍
关于自适应前照灯系统的性能分析
车队管理正在努力利用物联网技术的全部潜力
研华iMachine设备云智联系统 AI赋能设备价值新未来
预编译的理解及作用原理
银行金融行业液晶拼接屏系统解决方案概述
微软发布补丁修正Windows和Office中5处缺陷
投资31亿美元,德州仪器将新建 12英寸模拟半导体晶圆制造厂
浪涌保护器的前端防线:SCB后备保护器