我通过2片595来驱动4位的数码管去动态显示
在protues上
仿真是没有任何问题的,但是在实际
电路的上总是会闪亮,而且有时候改变延时后第一位数字没有显示了。
程序如下
#include <iom162v.h>
#include <macros.h>
#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);
}
}
希望能给我具体的解决方法
我想用动态显示达到目的
-
一周热门 更多>