最近在某灯的显示模块,功能实现,整理分享代码~-~
#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
如有疑问,欢迎留言指正
资料整理分享不易,一分一毛都是激励