麻烦大家看下程序,数码管显示,检查了好几遍没发现问题,端口也是正确的,就是无法显示。
位选74hc138,段选74hc595
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
unsigned char table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管
void set(uchar m) //595
{
uchar n,t;
PORTB&=~BIT(4);
for(n=8;n>0;n--) //数据写入
{
PORTB&=~BIT(5);
t=(m&0x80);
if(t==1)
{
PORTB|=BIT(6);
}
else
{
PORTB&=~BIT(6);
}
PORTB|=BIT(5);
m=(m<<1);
}//数据输出
PORTB|=BIT(4);
}
void delay()
{
unsigned int a,b;
for(a=30;a>0;a--)
for(b=240;b>0;b--);
}
void main()
{
DDRB=0xff; //端口初始化
PORTB=0xff;
PORTB|=BIT(7); //595清0口,低电平有效
PORTB|=BIT(3); //138设置端口,高电平有效
while(1)
{
PORTB&=~BIT(0); //设置译码器显示位
PORTB&=~BIT(1);
PORTB&=~BIT(2);
set(table2[1]); //数据写入
delay();
}
}
谢谢!!
此帖出自
小平头技术问答
谢了先,你说的对,是我上边忘了说了,是需要将两个换过来,程序执行之后是正确的
一周热门 更多>