数码管显示不全
# include <reg51.h>
sbit DIO = P0^1; //串行数据输入
sbit RCLK = P0^2; //时钟脉冲信号
sbit SCLK = P0^3; //打入信号
unsigned char seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳段码
unsigned char wei[] = {0x01,0x02,0x04,0x08}; //位码
unsigned char num[] = {4,3,2,1};
unsigned char a1;
unsigned char add;
//延时函数(毫秒)
void delay_ms(unsigned int delaytime)
{
unsigned int i,j;
for (i=0;i<delaytime;i++)
for (j=0;j<125;j++);
}
//数据传送函数(位码,段码)
void send_595_data (unsigned char send_address, unsigned char send_data)
{
unsigned char i,j,temp0,temp1;
temp0 = send_address;
temp1 = send_data;
if (a1==2) //加小数点
{
if (add < 300)
temp1 &= 0x7F;
}
for (i=0;i<4;i++) //传送位码
{
if (temp0 & 0x80)
DIO = 1;
else
DIO = 0;
temp0 <<= 1;
RCLK = 0;
RCLK = 1;
}
for (i=0;i<4;i++) //传送段码
{
if (temp1 & 0x80)
DIO = 1;
else
DIO = 0;
temp0 <<= 1;
RCLK = 0;
RCLK = 1;
}
SCLK = 0;
SCLK = 1; //产生上升沿,数据移位并行输出
SCLK = 0;
}
//主函数
void main (void)
{
for (;;)
{
for (a1 = 0;a1 < 4;a1++)
{
send_595_data (~wei[4-a1],seg[num[a1]]);
}
add++;
if (add == 600)
add = 0;
}
}
数码管驱动原理图看下面
看我的帖子
怎么没人啊
这段程序是你改动过的还是商家发给你的?我只能告诉你程序里有错!程序里有错!程序里有错!
呵呵,简单到不能再复杂了
改动过的
那怎么回事,要怎么该
那就是了,是你改动的错误!
但是编译可以通过,能说下怎么改吗
当然可以了,不过要你发来原来的程序我好对比着讲给你听。
#include <reg52.h>
sbit ser=P1^0;
sbit rck=P1^2;
sbit sck=P1^1;
unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳段码
unsigned char no[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码
unsigned char num[8]={2,0,1,2,0,7,1,3}; //显示2012.07.13
unsigned char al;
unsigned int add;
/****************************************************************************** * *
延时函数 *
******************************************************************************/
/* 延时t毫秒 */
void delay_ms(unsigned int delaytime)
{
unsigned int i,j;
for(i=0;i<delaytime;i++)
for(j=0;j<125;j++); /* 对于11.0592M时钟,约延时1ms */ } /****************************************************************************** * *
联级595数据传送函数 *
传送格式(位码,段码) * ******************************************************************************/
void send_595_data(unsigned char send_address,unsigned char send_data)
{
unsigned char i,j,temp0,temp1;
temp0=send_address;
temp1=send_data;
if((al==3)||(al==5)) //加小数点
{
if(add<300)
temp1&=0x7f;
}
for(i=0;i<8;i++) //传送位码
{
if(temp0&0x80)
ser=1;
else
ser=0;
temp0<<=1;
rck=0;
rck=1;
}
for(j=0;j<8;j++) //传送段码
{
if(temp1&0x80)
ser=1;
else
ser=0;
temp1<<=1;
rck=0;
rck=1;
}
sck=0;
sck=1; //产生上升沿,数据移位并行输出
sck=0; }
/****************************************************************************** *
* 主函数 * ******************************************************************************/
void main(void)
{
for(;;)
{
for(al=0;al<8;al++)
{
send_595_data(~no[7-al],seg[num[al]]); //显示2012.07.13 }
add++; if(add==600)
add=0;
}
}
}
这个就是了