我调的是四位共阳数码管 用的两片锁存芯片74HC573
附电路图:
程序如下:
main 函数的:
#include "stm32f10x.h"
#include "74hc573.h"
u8 DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u8 WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char tempdata[8];
void Display(unsigned char firstbit,unsigned char n);
u16 NUM=0;
int main(void)
{
//HC573Init();
LED_GPIO_Config();
while(1)
{
NUM++;
if(NUM==10000)NUM=0;
tempdata[0]=DuanMa[NUM/1000];
tempdata[1]=DuanMa[(NUM%1000)/100];
tempdata[2]=DuanMa[((NUM%1000)%100)/10];
tempdata[3]=DuanMa[((NUM%1000)%100)%10];
//HC573_DPY_num(NUM);
Display(0,4);
delay_nus(0xff);
}
}
void Display(unsigned char firstbit,unsigned char n)
{
unsigned char i=0;
GPIO_SetBits(GPIOC, 0xff & 0xff);
GPIO_ResetBits(GPIOC, (~0xff & 0xff));
HC573_LE_D_H();
//delay_nus(1);
HC573_LE_D_L();
GPIO_SetBits(GPIOC, (WeiMa[i+firstbit]) & 0xff);
GPIO_ResetBits(GPIOC, (~(WeiMa[i+firstbit]) & 0xff));
//DATAOUT(WeiMa[i+firstbit]);
HC573_LE_W_H();
//delay_nus(1);
HC573_LE_W_L();
GPIO_SetBits(GPIOC, (tempdata) & 0xff);
GPIO_ResetBits(GPIOC, (~(tempdata) & 0xff));
//DATAOUT(tempdata);
HC573_LE_D_H();
//delay_nus(1);
HC573_LE_D_L();
//delay_nus(1);
i++;
if(i==n)
i=0;
}
74HC573.C的
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|
GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void delay_nus(u16 time)// ???±1us
{
u16 i=0;
while(time--)
{
i=12;
while(i--);
}
}
感觉的都没问题的,调了好久显示不对,我想显示0-9999的。帮帮忙啊!谢谢!
|