📄 main.c
字号:
/*
通过头文件 "lcd162a.h",实现lcd162的字符显示!
*/
#include "stm8s.h"
#include "stm8s_tim2.h"
#include "stm8s_clk.h"
#include "stm8s_uart2.h"
#include "stm8s_tim3.h"
#include "stm8s_gpio.h"
#include "stm8s_adc1.h"
#include "stm8s_tim1.h"
#include "stm8s_beep.h"
#include "lcd162a.h"
#define BUTTON_PORT (GPIOE|GPIOD|GPIOC|GPIOA)
#define BUTTON_PIN1 (GPIO_PIN_0)
#define BUTTON_PIN2 (GPIO_PIN_2)
#define BUTTON_PIN3 (GPIO_PIN_6)
#define BUTTON_PIN4 (GPIO_PIN_6)
void xwDelay(void)
{
int i=20;
int j=10000;
while(i--)while(j--);
}
u32 nian=2012,time;
u8 yue=12,ri=12,shi=12,fen=12,miao,hour=12,min=13;
u8 i,j;
@far @interrupt void Time2YiChu (void)
{
miao++;
if(miao==60)
{miao=0;
fen++;
}
if(fen==60)
{fen=0;
shi++;
}
if(shi==24)
{shi=0;
ri++;
}
if(yue==0||yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
{if(ri==32)
{ri=1;
yue++;
}
if(yue==13)
{yue=1;
nian++;
}
}
if(yue==4||yue==6||yue==9||yue==11)
{if(ri==31)
{ri=1;
yue++;
}
if(yue==13)
{yue=1;
nian++;
}
}
if(nian%4==0&&nian%100!=0||nian%400==0)
{if(yue==2&&ri==30)
{
ri=1;
yue++;
}
}
else if(yue==2&&ri==29)
{
ri=1;
yue++;
}
time=nian;//年
lcd162a_DispOneChar(1,1,'2');
lcd162a_DispOneChar(1,2,'0');
if(i==1)
{
lcd162a_DispOneChar(1,3,32);
lcd162a_DispOneChar(1,4,32);
delay_ms(200);
lcd162a_DispOneChar(1,3,48+(u8)(((time%1000)%100)/10));
lcd162a_DispOneChar(1,4,48+(u8)(((time%1000)%100)%10));
//delay_ms(500);
}
else
{
lcd162a_DispOneChar(1,3,48+(u8)(((time%1000)%100)/10));
lcd162a_DispOneChar(1,4,48+(u8)(((time%1000)%100)%10));
}
lcd162a_DispOneChar(1,5,45); //"-"
time =yue;//月
if(i==2)
{
lcd162a_DispOneChar(1,6,32);
lcd162a_DispOneChar(1,7,32);
delay_ms(200);
lcd162a_DispOneChar(1,6,48+(u8)(time/10));
lcd162a_DispOneChar(1,7,48+(u8)(time%10));
}
else
{
lcd162a_DispOneChar(1,6,48+(u8)(((time%1000)%100)/10));
lcd162a_DispOneChar(1,7,48+(u8)(((time%1000)%100)%10));
}
lcd162a_DispOneChar(1,8,45); //"-"
time =ri;//日
if(i==3)
{
lcd162a_DispOneChar(1,9,32);
lcd162a_DispOneChar(1,10,32);
delay_ms(200);
lcd162a_DispOneChar(1,9,48+(u8)(time/10));
lcd162a_DispOneChar(1,10,48+(u8)(time%10));
}
else
{
lcd162a_DispOneChar(1,9,48+(u8)(time/10));
lcd162a_DispOneChar(1,10,48+(u8)(time%10));
}
time =shi; //时
if(i==4)
{
lcd162a_DispOneChar(2,1,32);
lcd162a_DispOneChar(2,2,32);
delay_ms(200);
lcd162a_DispOneChar(2,1,48+(u8)(time/10));
lcd162a_DispOneChar(2,2,48+(u8)(time%10));
}
else
{
lcd162a_DispOneChar(2,1,48+(u8)(time/10));
lcd162a_DispOneChar(2,2,48+(u8)(time%10));
}
lcd162a_DispOneChar(2,3,58); //":"
time =fen;//分
if(i==5)
{
lcd162a_DispOneChar(2,4,32);
lcd162a_DispOneChar(2,5,32);
delay_ms(200);
lcd162a_DispOneChar(2,4,48+(u8)(time/10));
lcd162a_DispOneChar(2,5,48+(u8)(time%10));
}
else
{
lcd162a_DispOneChar(2,4,48+(u8)(time/10));
lcd162a_DispOneChar(2,5,48+(u8)(time%10));
}
lcd162a_DispOneChar(2,6,58); //":"
time =miao;//秒
lcd162a_DispOneChar(2,7,48+(u8)(time/10));
lcd162a_DispOneChar(2,8,48+(u8)(time%10));
time=hour; //时
if(i==6)
{
lcd162a_DispOneChar(2,11,32);
lcd162a_DispOneChar(2,12,32);
delay_ms(200);
lcd162a_DispOneChar(2,11,48+(u8)(time/10));
lcd162a_DispOneChar(2,12,48+(u8)(time%10));
}
else
{
lcd162a_DispOneChar(2,11,48+(u8)(time/10));
lcd162a_DispOneChar(2,12,48+(u8)(time%10));
}
lcd162a_DispOneChar(2,13,58); //":"
time =min;//分
if(i==7)
{
lcd162a_DispOneChar(2,14,32);
lcd162a_DispOneChar(2,15,32);
delay_ms(200);
lcd162a_DispOneChar(2,14,48+(u8)(time/10));
lcd162a_DispOneChar(2,15,48+(u8)(time%10));
}
else
{
lcd162a_DispOneChar(2,14,48+(u8)(time/10));
lcd162a_DispOneChar(2,15,48+(u8)(time%10));
}
delay_ms(1000);
if(hour==shi&&min==fen)
{
BEEP_DeInit(); //反初始化BEEP
BEEP_Init(BEEP_FREQUENCY_1KHZ); //初始化BEEP
BEEP_LSICalibrationConfig(2000000); //配置蜂鸣器振时钟
//开始响
BEEP_Cmd(ENABLE);
//反初始化时钟
CLK_DeInit();
//开启晶体振荡器
CLK_HSECmd(ENABLE);
CLK_HSICmd(ENABLE);
CLK_LSICmd(ENABLE);
}
else
{
BEEP_Cmd(DISABLE);
}
}
@far @interrupt void GPIOE0(void)
{
delay_ms(500);
i++;
if(i==8)
{
i=1;
}
}
@far @interrupt void GPIOD2(void)
{
delay_ms(500);
if((i>0)&&(i<8))
{
i=0;
} // 确认
}
@far @interrupt void GPIOC6(void) //加
{
delay_ms(500);
if(i==1)
{
nian++;
}
if(i==2)
{
yue++;
if(yue==13)
{
yue=1;
}
}
if(i==3)
{
ri++;
if(ri==32)
{
ri=0;
}
}
if(i==4)
{
shi++;
if(shi==24)
{
shi=0;
}
}
if(i==5)
{
fen++;
if(fen==60)
{
fen=0;
}
}
if(i==6)
{
hour++;
if(hour==24)
{
hour=0;
}
}
if(i==7)
{
min++;
if(min==60)
{
min=0;
}
}
}
@far @interrupt void GPIOA6(void) //减
{
delay_ms(500);
if(i==1)
{
nian--;
}
if(i==2)
{
yue--;
if(yue==0)
{
yue=12;
}
}
if(i==3)
{
ri--;
if(ri==0)
{
ri=31;
}
}
if(i==4)
{
shi--;
if(shi==0)
{
shi=23;
}
}
if(i==5)
{
fen--;
if(fen==0)
{
fen=59;
}
}
if(i==6)
{
hour--;
if(hour==0)
{
hour=23;
}
}
if(i==7)
{
min--;
if(min==0)
{
min=59;
}
}
}
void main(void)
{
GPIO_Init(GPIOE, GPIO_PIN_0, GPIO_MODE_IN_FL_IT );
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_IT );
GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_FL_IT );
GPIO_Init(GPIOA, GPIO_PIN_6, GPIO_MODE_IN_FL_IT );
GPIO_Init(GPIOC, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST );
GPIO_Init(GPIOB, (GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 |GPIO_PIN_7 | GPIO_PIN_0), GPIO_MODE_OUT_PP_LOW_FAST );
lcd162a_Reset();
TIM2_DeInit(); //定时器2反初始化// 主时钟默认为2M HZ
TIM2_TimeBaseInit(0, 200000);//定时器2初始化,每100个毫秒中断一次
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
TIM2_Cmd(ENABLE);//启动定时器2
enableInterrupts(); // 允许CPU全局中断
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -