历史上的今天
今天是:2025年01月17日(星期五)
2018年01月17日 | 74hc595驱动串行led显示
2018-01-17 来源:eefocus
串行驱动LED显示
//一个74hc595位移寄存器驱动三极管驱动led位 ,
//两个74hc595驱动led段,方式位5位x8段x2=10个数码管
//5分频,每次扫描时间位1.25ms
//定义特殊符号
#define nul 0xf
#define qc 0xc
#define qb 0xb
#define q_ 0xa
#define q__ 0xd
#define q___ 0xe
#define qp 0x10
#define qe 0x11
#define qj 0x12
#define qn 0x13
#define qf 0x14
#define qa 0x15
#define qr 0x16
#define qd 0x17
#define qu 0x18
#define ql 0x19
#define qh 0x1a
#define qwen 0x1b
#define qt 0x1c
#define qla 0x1d
#define qlb 0x1e
#define qlc 0x1f
#define qld 0x20
#define qle 0x21
#define qlf 0x22
#define qlg 0x23
#define qldp 0x24
//显示段信息,不同led排列组合的段信息只需更改8个数值即可。
//因此,该定义具有通用性。
// 显示
// -d 20
// |c 40 |e 10
// - g 80
// |b 2 |f 4
// _a1 .dp 8
#define pa 1
#define pb 2
#define pc 0x40
#define pd 0x20
#define pe 0x10
#define pf 4
#define pg 0x80
#define PDP 8
//--------------
#define l0 PDP+pg
#define l1 255-pf-pe
#define l2 PDP+pc+pf
#define l3 pdp+pc+pb
#define l4 pdp+pa+pb+pd
#define l5 pdp+pb+pe
#define l6 pdp+pe
#define l7 pdp+pc+pg+pb+pa
#define l8 pdp
#define l9 pdp+pb
#define la pdp+pa
#define lb pdp+pd+pe
#define lc pdp+pg+pe+pf
#define ld pdp+pc+pd
#define le pdp+pe+pf
#define lf pdp+pe+pf+pa
#define l_ 255-pg
#define lnul 255
#define ll pdp+pg+pd+pf+pe
#define lp pdp+pa+pf
#define lt pdp+pd+pe+pf
#define lr pdp+pe+pf+pg+pa
#define ln pdp+pg+pa
#define lh pdp+pd+pe+pa
#define ly pdp+pb+pd
#define lu pdp+pg+pd
#define l__ pdp+pg+pb+pc+pe+pf
#define l___ l__-pg
#define l_1 255-pa
#define l_2 255-pa-pg
#define lj 255-(pe+pf+pa)
#define lwen 255-(pd+pe+pg+pb)
#define lall 0
#define lla 255-pa
#define llb 255-pb
#define llc 255-pc
#define lld 255-pd
#define lle 255-pe
#define llf 255-pf
#define llg 255-pg
#define lldp 255-pdp
//串行送出的位信息,目前是10位led显示。
unsigned char code un_dig[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
//串行送出的短信息。
unsigned char code un_disp[]={l0,l1,l2,l3,l4,l5,l6,l7,l8,l9,l_,lb,lc,l__,l___,lnul,lp,le,lj,ln,lf,la,lr,ld,lu,
ll,lh,lwen,lt,lla,llb,llc,lld,lle,llf,llg,lldp, lnul };
sbit d_clk=P0^0; //移位时钟
sbit d_dat=P0^1; //移位数据
sbit d_st=P0^2; //移位锁定
unsigned char dig; //位扫描计数器
unsigned char d[10]; //显示缓冲
//送出8位串行数据
void out_disp(unsigned char dd) {
unsigned char i;
for (i=0;i<8;i++) {
if (dd&1) d_dat=1; else d_dat=0;
d_clk=0;
dd>>=1;
d_clk=1;
}
}
//控制小数点和闪烁,显示数据|0x040表示有小数点;显示数据|0x80表示闪烁。
void out_displ(unsigned char dd) {
if (dd>=0x80) {
if (s001>flash_time) {out_disp(0xff);return;}
}
dd&=0x7f;
if (dd>=0x40) {
dd=un_disp[dd&0x3f]^pdp;
} else dd=un_disp[dd];
out_disp(dd);
}
unsigned int s001; //闪烁时间参考
void int_t0(void) interrupt 1 {
unsigned char dd;
TL0=TL0+30;TH0=0xfb; //800
time++;
if ((++s001)>=800) s001=0;
// 显示
if ((++dig)>4) dig=0;
d_st=0;
dd=d[dig+5];
out_displ(dd);
dd=d[dig];
out_displ(dd);
out_disp(un_dig[dig]);
d_st=1;
}
void main(void) {
unsigned char i;
TMOD=0x1;
TR0=ET0=1;
EA=1;
for (i=0;i<10;i++) d[i]=i; //display test
while (1) {}
}
上一篇:51多字节除法程序及使用
史海拾趣
|
谈谈专门的视频压缩芯片 https://home.eeworld.com.cn/?uid-69557-action-viewspace-itemid-12624 DM642硬件设计应该注意的一些问题 https://home.eeworld.com.cn/?uid-69557-action-viewspace-itemid-12557 网站diy失败的原因 https://home.eewo ...… 查看全部问答> |
|
受友人之托,发此求助内容:有效期至2010年4月25日 Linux下用S3C2440实现对IIC器件(如IIC的AD转换芯片)、SPI器件(如SPI的AD转换芯片)、GPIO(如LED数码管、矩阵键盘)等的读取和控制;以及LPC2440芯片内部定时器和中断系统及串口等控制,要求 ...… 查看全部问答> |
|
高清TDS1012B-SC彩屏示波器(俗称“熊猫”)拆解图,懂行的高人看看好在何处? 我们实验室买回的新设备之一,泰克的,比国产货贵一些。 手痒痒,拆了再说,因没贴封条,据说仍能保修。 想看看它好在哪些方面,怎么达到每通道1GS/s采样率?盼大虾指点。图太多,整合成了PDF格式,见谅!… 查看全部问答> |
|
我是一名大二学生,进入大学后,一直是软件方面的东西学的比较多,现在感觉自己到了一个瓶颈地带,硬件方面的知识奇缺,而且学校开的硬件课太少了,自学的话又力不从心不知从何学起。哪位大侠能帮助小弟指点迷津,系统介绍一下学习硬件书籍的顺序呢… 查看全部问答> |
|
我在使用5410开发,采用Flash启动,现在系统上电启动总是不正常,第一次启动需要拔插电源插头才能工作,我怀疑是不是JTAG口引脚接法不对造成的,现在JTAG口是按照EVM板连接的,不知道是不是这个问题,请问还有什么PIN脚需要注意的,谢谢!… 查看全部问答> |
|
记得之前我用 LM3S8962 开发的时候,复位不会导致 USB 失去连接的,不知道为什么今天一复位 USB 就要重新连接一次,而且时好时坏,而且串口调试助手收不到数据且总是导致它死掉,必须用任务管理器才能关掉,这个问题有没有谁遇到过,大家讨论下有没 ...… 查看全部问答> |




