#include "ht32.h"
#include "ht32_board.h"
#include "delay.h"
const u8 disp_nodp_dat[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
const u8 disp_dp_dat[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};
const u8 disp_hello_dat[22]={0x00,0x00,0x00,0x00,0x76,0x79,0x38,0x38,0x3f,0x00,0x76,0x4f,0x5b,0x71,0x6d,0x66,0x5b,0x4f,0x00,0x00,0x00,0x00};
u8 disp[4]={0x00,0x00,0x00,0x00};
//u8 disp[4]={0x3F,0x06,0x5B,0x4F};
u8 ledc_tim_cn=0;
u8 ledc_tim_flag=0;
void init_ledc(void)
{
{ /* Enable peripheral clock */
CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
CKCUClock.Bit.AFIO = 1;
CKCUClock.Bit.PA = 1;
CKCUClock.Bit.PC = 1;
CKCUClock.Bit.PD = 1;
CKCU_PeripClockConfig(CKCUClock, ENABLE);
}
{ /* Configure GPIO as output mode */
/* Configure AFIO mode as GPIO */
//AFIO_GPxConfig(GPIO_PB, AFIO_PIN_1, AFIO_FUN_GPIO);
/* Configure GPIO pull resistor */
GPIO_PullResistorConfig(HT_GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_7, GPIO_PR_UP);
GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PR_UP);
GPIO_PullResistorConfig(HT_GPIOD, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5, GPIO_PR_UP);
/* Default value RESET/SET */
GPIO_WriteOutBits(HT_GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_7, RESET);
GPIO_WriteOutBits(HT_GPIOC, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, RESET);
GPIO_WriteOutBits(HT_GPIOD, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5, RESET);
/* Configure GPIO direction as output */
GPIO_DirectionConfig(HT_GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_7, GPIO_DIR_OUT);
GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_DIR_OUT);
GPIO_DirectionConfig(HT_GPIOD, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5, GPIO_DIR_OUT);
}
}
void ledc_dig(u8 dig)
{
if(dig&0x01)
{
GPIO_ClearOutBits(HT_GPIOC, GPIO_PIN_4); // GPIO = LOW
}
else
{
GPIO_SetOutBits(HT_GPIOC, GPIO_PIN_4); // GPIO = HIGH
}
if(dig&0x02)
{
GPIO_ClearOutBits(HT_GPIOC, GPIO_PIN_5); // GPIO = LOW
}
else
{
GPIO_SetOutBits(HT_GPIOC, GPIO_PIN_5); // GPIO = HIGH
}
if(dig&0x04)
{
GPIO_ClearOutBits(HT_GPIOC, GPIO_PIN_6); // GPIO = LOW
}
else
{
GPIO_SetOutBits(HT_GPIOC, GPIO_PIN_6); // GPIO = HIGH
}
if(dig&0x08)
{
GPIO_ClearOutBits(HT_GPIOC, GPIO_PIN_7); // GPIO = LOW
}
else
{
GPIO_SetOutBits(HT_GPIOC, GPIO_PIN_7); // GPIO = HIGH
}
}
void ledc_dat(u8 dat)
{
//A
if(dat&0x01)
{
GPIO_SetOutBits(HT_GPIOD, GPIO_PIN_4); // GPIO = HIGH
}
else
{
GPIO_ClearOutBits(HT_GPIOD, GPIO_PIN_4); // GPIO = LOW
}
//B
if(dat&0x02){
GPIO_SetOutBits(HT_GPIOA, GPIO_PIN_7);
} else {
GPIO_ClearOutBits(HT_GPIOA, GPIO_PIN_7);
}
//C
if(dat&0x04){
GPIO_SetOutBits(HT_GPIOA, GPIO_PIN_2);
} else {
GPIO_ClearOutBits(HT_GPIOA, GPIO_PIN_2);
}
//D
if(dat&0x08){
GPIO_SetOutBits(HT_GPIOD, GPIO_PIN_5);
} else {
GPIO_ClearOutBits(HT_GPIOD, GPIO_PIN_5);
}
//E
if(dat&0x10){
GPIO_SetOutBits(HT_GPIOA, GPIO_PIN_3);
} else {
GPIO_ClearOutBits(HT_GPIOA, GPIO_PIN_3);
}
//F
if(dat&0x20){
GPIO_SetOutBits(HT_GPIOA, GPIO_PIN_0);
} else {
GPIO_ClearOutBits(HT_GPIOA, GPIO_PIN_0);
}
//G
if(dat&0x40){
GPIO_SetOutBits(HT_GPIOD, GPIO_PIN_2);
} else {
GPIO_ClearOutBits(HT_GPIOD, GPIO_PIN_2);
}
//DP
if(dat&0x80){
GPIO_SetOutBits(HT_GPIOA, GPIO_PIN_1);
} else {
GPIO_ClearOutBits(HT_GPIOA, GPIO_PIN_1);
}
}
u8 i=0;
u8 flag=1;
void ledc_hello(void)
{
while(flag)
{
disp[0]= disp_hello_dat[i];
disp[1]= disp_hello_dat[i+1];
disp[2]= disp_hello_dat[i+2];
disp[3]= disp_hello_dat[i+3];
i++;
if(i>18)
{
i=0;
flag=0;
}
delay_ms(500);
}
}
u16 cn=0;
void ledc_test(void)
{
ledc_hello();
cn++;
if(cn>1000)
{
cn=0;
}
disp[0]= disp_nodp_dat[cn/1000];
disp[1]=disp_nodp_dat[(cn%1000)/100];
disp[2]=disp_nodp_dat[((cn%1000)%100)/10];
disp[3]=disp_nodp_dat[((cn%1000)%100)%10];
delay_ms(200);
}
void ledc_test1(void)
{
ledc_dig(0x0F);
if(flag==0)
{
ledc_dat(disp_nodp_dat[i]);
delay_ms(500);
i++;
if(i>9)
{
i=0;
flag=1;
}
}
else
{
ledc_dat(disp_dp_dat[i]);
delay_ms(500);
i++;
if(i>9)
{
i=0;
flag=0;
}
}
}
void ledc_tim_hdl(void)
{
ledc_tim_flag=0;
ledc_tim_cn++;
if(ledc_tim_cn>4)
{
ledc_tim_cn=1;
}
switch (ledc_tim_cn)
{
case 1:
ledc_dig(0x00);
ledc_dat(disp[0]);
ledc_dig(0x01);
break;
case 2:
ledc_dig(0x00);
ledc_dat(disp[1]);
ledc_dig(0x02);
break;
case 3:
ledc_dig(0x00);
ledc_dat(disp[2]);
ledc_dig(0x04);
break;
case 4:
ledc_dig(0x00);
ledc_dat(disp[3]);
ledc_dig(0x08);
break;
default:
break;
}
}