proteuswilliam hill官网 |仿真william hill官网
直播中

张先生

9年用户 44经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

通过2片595串行连接来驱动4位数码管闪亮问题

我通过2片595来驱动4位的数码管去动态显示
在protues上仿真是没有任何问题的,但是在实际威廉希尔官方网站 的上总是会闪亮,而且有时候改变延时后第一位数字没有显示了。
程序如下
#include
#include
#define uchar unsigned char
#define uint unsigned int
uint num;
int PianXuan[10]={0x5f,0x42,0x9b,0xd3,0xc6,0xd5,0xdd,0x43,0xdf,0xd7};
int WeiXuan[4]={0x0e,0x0d,0x0b,0x07};
void delay_ms(unsigned int x)    // 延时 (x) ms
{
unsigned char j;
while(x--)
{
  for(j=0;j<123;j++)
  {
    ;  
  }
}
}
void delay_us(unsigned char x)   // 延时 (x*2+5) us
{
    while(--x);
}
//------------------------------------------------------------
//PA5    CLK                     //时钟位定义
//PA6    Load                    //转载/移位位定义
//PA7   Data                      //接收位定义
/**********************74hc595接收程序***********************/
//-------------------------------------------------------------
void ShuMa_595_Xie(unsigned char Data)   //74hc 595的写操作
{
int i;
uchar j;
for(i = 0; i < 8; i++)
{
  PORTB&=~BIT(2);
  j=Data&0x80;
  if(j==0x00)
  PORTB&=~BIT(0);
  else
  PORTB|=BIT(0);
  Data<<=1;
  PORTB|=BIT(2);
}
}
void ShuMa_595_Du(void)           //74hc595 读操作
{
PORTB&=~BIT(1);
;
PORTB|=BIT(1);
}
//------------------------------------------------------------
//PA5    CLK                     //时钟位定义
//PA6    Load                    //转载/移位位定义
//PA7   Data                      //接收位定义
/************************4位数码管接收程序********************/
//-------------------------------------------------------------
void ShuMa(int BianMa)     //数码管驱动
{
int x,y,i=4;
x=BianMa;
for(i=4;i>0;i--)
{     
  ShuMa_595_Xie(WeiXuan[i-1]);
  y=x%10;
  x=x/10;
  ShuMa_595_Xie(PianXuan[y]);
  ShuMa_595_Du();
  delay_ms(10);
  ShuMa_595_Xie(i-1);
  ShuMa_595_Xie(0x00);
  ShuMa_595_Du();
  delay_ms(1);
}
}
main()            //主函数
{

int i,k=4621;
DDRB=0xff;
while(1)
{
  ShuMa(k);
}
}

希望能给我具体的解决方法  
我想用动态显示达到目的
  • QQ截图20150716102555.png

回帖(5)

武力戡乱

2015-7-16 16:49:12
这个东西吧,有时候要考虑电气特性。晚上我回去看看你程序。下班啦!
举报

武力戡乱

2015-7-16 21:55:21
有可能是传说中的那种余辉。
1、仿真和实际设定的频率相同吗?
2、如果排除第一种。那就改变一下显示方式。你是同时控制段和位,分开来控制,而且先位后段。
举报

qzyhlf05

2015-7-21 13:05:50
漂亮,学习了。谢谢
举报

张先生

2016-2-16 11:01:48
自己解决问题了,还是频率的问题。没有设定AVR单片机的具体频率
举报

dmdz2015

2016-8-5 17:19:17
学习了。。。。。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分