Stm32f10x_74Hc595倒计时实现实例

版权声明: https://blog.csdn.net/qq_40025335/article/details/82751819

最近在某灯的显示模块,功能实现,整理分享代码~-~


#include <led.h>
#include <stm32f10x.h>
#include <sys.h>

//info:R-PA6,G-PA7,Y-PA5(DS0)
//Env:Stm32f103x、74HC595数码管、LED0-2
//Time:20180907-
//Info:接受Lora帧数据、分割提取数据、控制LED灯及数码管倒计时时间
//LED1:PB5-PB7
//数码管:PA5-PA7
//程序设计框架:接受的数据与Vaule运算可得到倒计时、亮灯信息

//Function:显示模块
//Env:Keil、Stm32f103x, 74Hc595
//Author@New
//Tmie£º20180915
//INfo:
//IO口:LED1-3:PB5-PB7
//74Hc595:PA5-PA7¡¢LOAD0 PAout(5)¡¢CLK PAout(6)¡¢SDK PAout(7)
//ps:74Hc595 LoAD名字与SysTick->LOAD 存在重复,这里用LOAD0表示
//Load0锁存、CLK:移位时钟、SDK:数据位
//CLK = 0;低电平,数据位 SDK:数据输入寄存器;CLK = 1;上升沿将已移入数据寄存器送入锁存器

//字模
  unsigned char Tab[] = {0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x7f};
    //0 1 2 3 4 5 6 7 8 9 A B C D F ? . //  
    /*
//延迟函数测试
    void delay10ms(uint16_t temp)
{
    uint16_t  i,j,t;
    t=temp;
    while(t!=0)
    {
        for(i=200;i>0;i--)
           for(j=248;j>0;j--);
        t--;
    }
}
*/
//8位数据串行输入595
void SPI_595(unsigned char out_data)
{
    unsigned char i,temp;
     for(i=0;i<8;i++)
      {
        CLK=0;
         temp=out_data&0x80;
         if(temp==0x80)
        SDK=1;
        else SDK=0;    
         out_data=out_data<<1;
         CLK=1;
    }
}
//SysTick 定时器计时
//配置SysTick
void SysTick_Configuration(void) 

     SysTick->VAL = 0; //SysTick µ±Ç°¼Ä´æÆ÷µÄÖµ
     //SysTick ×Ô¶¯ÖØ×°³ýÖµ¼Ä´æÆ÷
     SysTick->LOAD = (72000000/8000000)*1000;//´ú±íÿ¸ömsÐèÒªµÄ9000¸ösystickʱÖÓÊý ¡
     SysTick->CTRL |= 0x06; //SysTick ¿ØÖƺÍ״̬¼Ä´æÆ÷

 } 
//中断处理函数
void SysTick_Handler(void) //???? 

extern unsigned long TimingDelay; // ????,????????? 
//SYSTICK_CURRENT=0; 
     SysTick->VAL = 0; 
if (TimingDelay != 0x00) 
TimingDelay--; 

//systick 延时函数
unsigned long TimingDelay;  // ????,????????? 
void Delay(unsigned long nTime)  //???? 

SysTick->CTRL |=0x07;   // ??SysTick??? 
TimingDelay = nTime; // ?????? 
while(TimingDelay != 0); // Óï¾ä×÷Óã¿£¿£¿
SysTick->CTRL |=0x06;// ??SysTick??? 

  

int main() 
 { 
          int j,k;
    //delay_init();             //?óê±o¯êy3?ê??¯      
    SystemInit();    //??(??)??? 
 //GPIO_Init()(); //GPIO??? 
    LED_Init();
  SysTick_Configuration(); //??systick??? 
    while(1)
    {
                //Yelio
        GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PA8ê?3?µí
        //DSP1
    //    GPIO_SetBits(GPIOD,GPIO_Pin_2);//
        //Red
        GPIO_ResetBits(GPIOB,GPIO_Pin_6); //PB6 ê?3?µí
        //Green
        GPIO_ResetBits(GPIOB,GPIO_Pin_7);//PB7 ê?3? µí
        /*//Test03?oµ1??ê±??ê:?o??ê?ê±??'ó0- 99
        */
        
        for(j=9;j>=0;j--)
        {
            for(k=9;k>=0;k--)
            {    
                LOAD0=1;
                LOAD0=0;    
                SPI_595(Tab[k]);//LED2-Right
                SPI_595(Tab[j]);//LED1-Left
                //delay10ms(500);
                 Delay(10000); //1S  
            
            }                
        } 
                                                                              
  } 

结果显示:

SysTick 相关内容见博客 https://blog.csdn.net/qq_40025335/article/details/79122244

如有疑问,欢迎留言指正

扫描二维码关注公众号,回复: 3248825 查看本文章

资料整理分享不易,一分一毛都是激励

猜你喜欢

转载自blog.csdn.net/qq_40025335/article/details/82751819