按照我那个板子的话···控制两个·一个控制显示什么字 一个是控制那个位亮灯
#include<reg52.h>
sbit LE1=P2^0 // the number 锁存器573
sbit LE2=P2^1 //which number we want to show 锁存器573
unsigned char num[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}
//0123456 7 89 的字段码(我那个板子连线有点问题 所以测试出来的是这样子的数码组···自己找找两位数码管的原理图看看明白了)
unsigned char wei[9]={0xff,0x01,0x04,0x02,0x08,0x10,0x40,0x20,0x80}
//1 2 3 45 6 7 8 (我用的是两个四位数码管,所以有8位)
void numshow(int nu,int th)
{
LE1=1
P1=num[nu] // the number
LE1=0
//P1=wei[th]//消隐// 多个数码管显示是要加这句 防止开位选的时候吧段选的内容存入 位选中 ,速度快时 会产生重叠的现象
P1=wei[0] //消隐//一瞬间什么都不亮 也可以有上一句的效果
LE2=1
P1=wei[th]//which number we want to show
LE2=0
}
void main()
{
numshow(5,4)在第四位显示数字5
}
下面是595的程序,给你参考一下,根据这个程序来写数码管显示就很简单了。#define u8 unsigned char
#define u16 unsigned int
sbit MR=P1^6//寄存器清0,避免数据错位
sbit RCK=P1^5//并行输出时钟
sbit DS=P1^4//数据线
sbit CLK=P1^3//移位输入时钟
void writ_595(u8 dat)
{
u8 i
MR=0//寄存器清0,避免数据错位
MR=1
for(i=0i<8i++)
{
CLK=0
if((dat&0x80) == 0x80)
DS = 1//串行数据输出
else DS = 0
CLK=1//移位输入时钟,上升沿输入
dat<<=1
}
RCK=0//并行输出时钟
RCK=1
} 该子函数可以直接调用,比如writ_595(0xfe);Q0-Q7脚则输出对应的二进制码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)