实时钟设计Word格式.docx
《实时钟设计Word格式.docx》由会员分享,可在线阅读,更多相关《实时钟设计Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
intled=0x200;
intlcddata[5][2]={0};
intrunnian=1,flag=2,dian=0,flag2=1,timer=0;
charrtc[30];
charno=0;
charlcd_code[16]=
//编码
{
0xeb,//0
0x0a,//1
0xad,//2
0x8f,//3
0x4e,//4
0xc7,//5
0xe7,//6
0x8a,//7
0xef,//8
0xcf,//9
0x7e,//A
0x37,//B
0x71,//C
0x1f,//D
0x75,//E
0x74//F
};
//privatefunction
voidLCD_Write(intdata,intbit);
voidSystick_Proc(void);
voidLcd_Proc(void);
voidlcd_display0(void);
voidlcd_display1(void);
voidlcd_display2(void);
voidlcd_display3(void);
voidlcd_display4(void);
voidlcd_display5(void);
voidlcd_display6(void);
voidUart_IO_Config(void);
voidLCD_IO_Config(void);
voidLed_IO_Config(void);
voidButton_IO_Config(void);
voidEXTILineConfig(void);
voidNVIC_Configuration(void);
voidUart_Init(void);
voidLCD_Init(void);
voidSystick_Init(void);
voidLED_Proc(void);
voidUart(void);
voiduartPuts(u8*s);
voidUart_r(void);
voidUSART_GetS_Time(void);
intmain(void)
{
//SystemInit();
//Systick_Init();
SystemInit();
SysTick_Config(9000000);
LCD_IO_Config();
Led_IO_Config();
Uart_IO_Config();
Button_IO_Config();
EXTILineConfig();
NVIC_Configuration();
Uart_Init();
LCD_Init();
while
(1)
Systick_Proc();
Lcd_Proc();
Uart_r();
}
voidSystick_Proc(void)
if(NVIC_STCSR&
0x10000)
{
dian^=1;
if((++time[0])>
=60)
{time[0]=0;
if((++time[1])>
{time[1]=0;
if((++time[2])>
=24)
time[2]=0;
switch(time[4])
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
if(++time[3]>
=32){if(++time[4]>
=13)time[4]=1;
}break;
case2:
if(runnian){if(++time[3]>
=30){if(++time[4]>
=13)time[4]=0;
}}
else{if(++time[3]>
=29){if(++time[4]>
}}break;
case4:
case6:
case9:
case11:
=31){if(++time[4]>
default:
break;
//time[4]=0;
time[3]=0;
}
sprintf(rtc,"
%d-%d%d:
%d:
%d"
time[4],time[3],time[2],time[1],time[0]);
//格式化输入出处
//sprintf(rtc2,"
"
);
lcddata[0][0]=time[0]%10;
lcddata[0][1]=time[0]/10;
lcddata[1][0]=time[1]%10;
lcddata[1][1]=time[1]/10;
lcddata[2][0]=time[2]%10;
lcddata[2][1]=time[2]/10;
lcddata[3][0]=time[3]%10;
lcddata[3][1]=time[3]/10;
lcddata[4][0]=time[4]%10;
lcddata[4][1]=time[4]/10;
//之前开始以分钟之后才能显示
放在前边
日期与时间是:
Uart();
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
USART_SendData(USART1,0xd);
USART_SendData(USART1,0xa);
LED_Proc();
voidLcd_Proc(void)
/*inttemp[8];
temp[0]=((lcd_code[min_display_h]&
0xf0)>
>
4);
//分钟十位高四位
temp[1]=(lcd_code[min_display_h]&
0x0f);
//分钟十位低四位
temp[2]=((lcd_code[min_display_l]&
//分钟个位高四位
temp[3]=(lcd_code[min_display_l]&
//分钟个位低四位
temp[4]=((lcd_code[sec_display_h]&
//秒钟十位高四位
temp[5]=(lcd_code[sec_display_h]&
//秒钟十位低四位
temp[6]=((lcd_code[sec_display_l]&
//秒钟个位高四位
temp[7]=(lcd_code[sec_display_l]&
//秒钟个位低四位*/
switch(flag)
case0:
lcd_display0();
lcd_display1();
lcd_display2();
case3:
lcd_display3();
case4:
lcd_display4();
case5:
lcd_display5();
case6:
lcd_display6();
voidlcd_display0(void)//时分显示
LCD_Write((5<
<
14)+(0<
8)+lcd_code[lcddata[2][1]]+(dian<
4),17);
//移位出现问题
14)+(2<
8)+lcd_code[lcddata[2][0]],17);
//移位这一块
14)+(4<
8)+lcd_code[lcddata[1][1]],17);
14)+(6<
8)+lcd_code[lcddata[1][0]],17);
voidlcd_display1(void)//月日显示
8)+lcd_code[lcddata[4][1]],17);
8)+lcd_code[lcddata[4][0]],17);
8)+lcd_code[lcddata[3][1]],17);
8)+lcd_code[lcddata[3][0]],17);
voidlcd_display2(void)//分秒显示
8)+lcd_code[lcddata[1][1]]+(dian<
8)+lcd_code[lcddata[0][1]],17);
8)+lcd_code[lcddata[0][0]],17);
voidlcd_display3(void)//月设置显示
{
if(dian)
8)+no,17);
8)+lcd_code[lc