74hc164驱动控制16个数码管程序案例
一、什么叫数码显示管
数码显示管,也称之为辉光管,是一种能够表明数据和其它信息内容的电子产品。玻璃试管中包含一个金属丝网制品做成的阳极氧化和数个负极。绝大多数数码显示管负极的形态为数据。管内充以低电压汽体,一般绝大多数为氖再加上一些汞和/或氩。给某一个负极电池充电,数码显示管便会传出色调光,似乎管中的空气而定,一般全是橘色或翠绿色。
虽然在外表上和真空电磁阀类似,其基本原理并不是为加温负极放射性电子器件。因此它被称作冷阴极管或彩灯的一个变异。在常温下,即便 处在极端化的房间内工作中情况下,这类水管的溫度非常少超出40℃。
数码显示管的最普遍类型有10个负极,样子为数字0到9,一些数码显示管还有一个或2个小数位。殊不知也是有其他类型的LED数码管表明英文字母、标识和符号。如一种“数码显示管”,其负极为一个模版做成的面罩,上边有数据样子的孔。一些乌克兰的数码显示管,如IN-14,应用倒立起来的数字2意味着5,大约是因为节省产品成本,而沒有显著的技术性或艺术美学领域的缘故。乌克兰的数码显示管绝大多数都采用了倒立起来的2做为5。
将170伏的交流电压加在负极和阳极氧化中间,每一个负极能够传出氖的的红橙复色光。因为混合气的不一样,不一样种类的数码显示管中间的色调有所区别。使用寿命较长的数码显示管在生产中添加了汞,降低了磁控溅射,結果传出的光的颜色为天蓝色或蓝紫色调。在某种情形下,这种色调被夹层玻璃上的鲜红色或橘色过虑镀层过虑。
数码显示管归类
数码显示管也称LED数码显示管,不一样领域的人对数码显示管的叫法不一样,实际上全是相同的商品。
按发光二极管模块接口方式可分成共阳极氧化数码显示管和共负极数码显示管。共阳数码显示管就是指将全部发光二极管的阳极氧化收到一起产生公共性阳极氧化(COM)的数码显示管,共阳数码显示管在使用时要将公共性极COM收到 5V,当某一字段名发光二极管的负极为高电平时,相对应字段名就照亮,当某一字段名的负极为上拉电阻时,相对应字段名也不亮。共阴数码显示管就是指将全部发光二极管的负极收到一起产生公共性负极(COM)的数码显示管,共阴数码显示管在使用时要将公共性极COM收到接地线GND上,当某一字段名发光二极管的阳极氧化为上拉电阻时,相对应字段名就照亮,当某一字段名的阳极氧化为高电平时,相对应字段名也不亮。
推动方法
简述
数码显示管要一切正常表明,就需要用光耦电路来推动数码显示管的每个段码,进而表明出我们要的数据,因而依据数码显示管的推动方法的不一样,能够分成静态数据式和信息式两大类。
静态数据显示系统
静态数据推动也称直流电推动。静态数据推动就是指每一个数码显示管的每一个段码都由一个单片机设计的I/O端口号开展推动,或是应用如BCD码二-十进制数据选择器译码器开展推动。静态数据推动的特点是程序编写简易,表明更亮,缺陷是占有I/O端口号多,如推动五个数码显示管静态数据表明则须要5&TImes;8=40根I/O端口号来推动,要明白一个89S51单片机可以用的I/O端口号才3两个,具体运用时需要提升译码器控制器开展推动,提升了硬件配置控制电路的多元性。
动态性显示系统
数码显示管动态展示插口是单片机设计中运用极其普遍的一种动态显示之一,动态性推动是将全部数码显示管的八个表明笔画“a,b,c,d,e,f,g,dp”的电脑连在一起,此外为每一个数码显示管的公共性极COM提升位选通控制回路,位选通由分别单独的I/O线操纵,当单片机设计輸出字形码时,全部数码显示管都读取到一样的字形码,但到底是哪个数码显示管会展示出字型,在于单片机设计对合选通COM端电源电路的操纵,因此 大家如果将必须表明的数码显示管的选通操纵开启,该位就展现出字型,沒有选通的数码显示管就不容易亮。
根据分时图轮着操纵每个数码显示管的的COM端,就使每个数码显示管轮着可控表明,这就是动态性推动。在轮着表明流程中,每一位数码显示管的开启時间为1~2ms,因为人的视觉暂留状况及发光二极管的余晖效用,虽然事实上诸位数码显示管并不是与此同时照亮,但只需扫描仪的速率非常快,给人的记忆便是一组平稳的展示数据信息,不容易有闪动感,动态展示的功效和静态数据表明是一样的,可以节约很多的I/O端口号,并且功能损耗更低。
二、74hc164介绍
74HC164、74HCT164 是快速硅门 CMOS 元器件,与功耗低肖特基型 TTL (LSTTL) 元器件的脚位兼容。74HC164、74HCT164 是 8 位边缘触发式移位寄存器,串行通信键入数据信息,随后并行处理輸出。数据信息根据2个键入端(DSA 或 DSB)之一串行通信键入;任一键入端能够作为上拉电阻也就能端,操纵另一键入端数据信息键入。
74HC164机器设备特点
自动门串行通信数据信息键入 多线程中间校准 合乎 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
74HC164脚位表明
74HC164脚位图
74hc595脚位表明
74HC164極限主要参数
交流电压 VDD:l-0.5V——7V
键入钳位电流量 :-20MA—20MA
輸出钳位电流量 :-20MA—20MA
持续輸出电流量:-25MA—25MA
根据VCC 或GND的电流量:-50MA—50MA
脚位电焊焊接溫度: 265度
三、74hc164推动操纵16个数码显示管程序流程
#include 《stc.h》
#include “intrins.h” //_nop_();延时函数用
#define uchar unsigned char
#define uint unsigned int
//================18b20数据信息口界定===============
uint temp; // 界定一个16位自变量用以COPY数据信息
sbit DQ = P2^6;
char flash,presence;
uint temp1,temp2; //读取溫度暂放
uchar s1,s2,s3,s4; //表明模块数据信息,共6个数据信息和一个计算占用
//=======164端口号界定==========
sbit ge=P2^5; //个位数
sbit shi=P2^4; //十位
sbit bai=P2^3; //数百位
sbit qian=P2^2; //百位数
sbit clk=P2^1; //164数字时钟线
sbit data1=P2^0; //164手机充电线
sbit a0=ACC^0; //累加器
uchar code LED[10]={ //没有小数位的编码表
0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,};
uchar code led1[10]={ //带小数位的编码表
0x40,0x79,0x24,0x30,0x19,
0x12,0x2,0x78,0x0,0x10,};
//======164数据交换程序流程=======
void chuanshu164(uchar data_buf)
{
uchar i;
ACC=data_buf; //数据信息送累加器
for(i=8;i》0;i--)
{
clk=0;
data1=a0;
clk=1;
ACC=ACC》》1;
}
clk=0;
}
/*****************延时函数*************************/
void delay(uint t)
{
for (;t》0;t--);
_nop_();
}
//========表明4位数码显示管涵数===========
void xianshi(uint shu)
{
uchar ss;
for(ss=10;ss》0;ss--)
{
uint wei1,wei2,wei3,wei4;
wei1=shu/1000; //将百位数分离出来
wei2=shu00/100; //将数百位分离出来
wei3=shu0/10; //将十位分离出来
wei4=shu; //将个位数分离出来
chuanshu164(led[wei1]); //表明第一位数码显示管
qian=0;
delay(200);
qian=1;
chuanshu164(led[wei2]); //表明第二位数码显示管
bai=0;
delay(200);
bai=1;
chuanshu164(led1[wei3]); //表明第三位数码显示管
shi=0;
delay(200);
shi=1;
chuanshu164(led[wei4]); //表明第四位数码显示管
ge=0;
delay(200);
ge=1;
//}
}
}
//=================18b20相关函数逐渐==============
/****************DS18B20校准涵数************************/
ow_reset(void)
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_(); //从高拉到低
DQ=0;
delay(550); //550 us
DQ=1;
delay(66); //66 us
presence=DQ; //presence=0 校准取得成功,再次下一步
}
delay(500); //延迟500 us
presence=~DQ;
}
DQ=1; //拉上拉电阻
}
/****************DS18B20写指令涵数************************/
void write_byte(uchar val) //向1-WIRE 系统总线上写一个字节数
{
uchar i;
for(i=8;i》0;i--)
{
DQ=1;_nop_();_nop_(); //从高拉到低
DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us
DQ=val&0x01; //最少偏移出
delay(66); //66 us
val=val/2; //偏移1位
}
DQ=1;
delay(10);
}
//
/****************DS18B20读1字节涵数************************/
uchar read_byte(void) //从系统总线上取一个字节数
{
uchar i;
uchar value=0;
for(i=8;i》0;i--)
{
DQ=1;_nop_();_nop_();
value》》=1;
DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us
DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us
if(DQ)value|=0x80;
delay(66); //66 us
}
DQ=1;
return(value);
}
/****************读取溫度涵数************************/
read_temp()
{
ow_reset(); //系统总线校准
write_byte(0xcc); //发指令
write_byte(0x44); //发变换指令
ow_reset();
delay(1);
write_byte(0xcc); //发指令
write_byte(0xbe);
temp1=read_byte(); //读溫度值的低字节
temp2=read_byte(); //读溫度值的高字节
temp=(temp2*256 temp1)*0.625;
return temp; //回到溫度值
}
//=================18b20相关函数完毕==============
//=================主函数=========================
void main(void)
{
ow_reset(); //启动先变换一次
write_byte(0xcc); //Skip ROM
write_byte(0x44); //发变换指令
while(1)
{
xianshi(read_temp());
//xianshi(read_temp());
//xianshi(read_temp());
//delay(500);
}
}
下一篇:双向可控硅控制电烙铁