找回密码
 注册
关于网站域名变更的通知
查看: 807|回复: 3
打印 上一主题 下一主题

带农历的电子万年历 单片机软件程序与proteus仿真

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-16 06:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
带农历的电子万年历 单片机软件程序与proteus仿真
. y2 {0 m. X0 e0 |5 E# P8 q0 F
; X# D- r) |  y' a3 W" ]# e

. W+ C  ?$ U; r2 V- N# `
电子万年历软件程序。整个软件程序分模块编写:
2 K- e' Y$ [/ J
      1.包含主程序模块main.c

- p! V- @! X* b4 v  H4 N
      2.日历时钟程序模块ds1302.c
* V1 m+ f; F( M' B
      3.年历转换程序模块lunarc.c
6 |6 ^- o& H$ _; Q* a3 U5 _( W
      4.键盘处理程序模块keyinput.c

% }" I& y$ F! K. a- }
      5.液晶显示程序模块12864.h

. ^8 @0 [2 x8 D5 {: U
      6.字模模块model.h+ E' }  [! a- g- w' R* P
; X% ^& r9 x1 k7 p

& g5 p: H6 O$ u- G ' G5 l: [$ ?- p$ q) K4 M' B
1 Q# ~% V3 i* J; z+ U( Z5 v
单片机主程序:

; W2 Z# v' J: N6 [1 v#include
1 r6 t1 K* b9 p+ f, B4 s#include "12864.h"$ e% D) y3 a. C9 V$ U
#include "model.h"
" S9 X0 n+ u2 G2 t6 Y/ R#include "ds1302.h"# N: Q9 E. s, c* G: |
#include "lunar.h"
$ T3 P3 ^+ P3 R/ T1 j/ K# g; u+ |#include "keyinput.h"* F' v3 s: s8 Y$ B: Z& x
" k) `& H; ?7 p9 F/ V
#define uchar unsigned char
  d6 L1 ?# G# D4 O1 X: R' Z#define uint unsigned int
& d1 h) r9 K9 D& g#define NoUpLine         18 ?4 U' q6 r+ F' t7 A$ Y) \
#define UpLine           0& @4 [6 Y" @( {3 z' k$ [8 ~& Z
#define NoUnderLine 1
  ]+ n/ p" Z3 }* E$ L1 u. o- v! F#define UnderLine        0% L( G& ^+ S. h0 H% a: c
#define FALSE        09 Q. H0 v& s) V8 [2 Q4 H% L; D
#define TRUE    1. E" \7 G: |+ ^0 D+ V
; s4 _' f  D% L; E- U
uchar dispBuf[7];
  w  I- g; |2 G0 A: c9 A: Guchar T0_Count=0,Tmp_Count=0;
  I, M- B, q9 H% ]4 W0 Qbit T0_Flag,Tmp_Flag,Flash_Flag;
) ^4 Q& Q& ~% m9 S/ ], b% Y. O3 H0 z* D8 }2 x- l
SYSTIME sys;                   //系统日期
2 @% R" W, s4 e7 BSPDATE SpDat;                   //农历日期9 T( B* k4 e, ^4 j. U
- }- y* H$ H! Y* ^9 W
bit Hour_Flag=TRUE,Min_Flag=TRUE,Sec_Flag=TRUE;           //设置时间标志+ W+ U0 _( V; i4 b8 h
bit Year_Flag=TRUE,Mon_Flag=TRUE,Day_Flag=TRUE;+ C) L) h2 I+ s7 j/ C
4 N; u7 c  E( [$ @, T* K% W; _
uchar State_Set=0;     //设置时、分、秒、日、月、年等状态
8 W. F4 b, }, i3 z/ [* }! R8 A  w% U' a/ s5 ]6 P2 ^) }3 y$ G
bit State_Flag=FALSE,Inc_Flag=FALSE,Dec_Flag=FALSE;        //三个按键是否按下的标志' ]+ E* O3 c7 r- ^0 K5 R

4 W5 C+ k6 l* p4 X0 l, \uchar code Mon2[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
- W7 c5 b- W# I+ _/ v$ Z5 u  L                                  0,31,29,31,30,31,30,31,31,30,31,30,31};
9 F. Y0 Y9 t$ r0 N7 B0 B) w$ k2 m% H* @  Z
/*****************************LCD显示函数******************************$ Y$ x# ^0 P) N/ ]" s" g8 f0 D4 d0 j
入口参数:
$ }% ?6 `: j1 v5 ]; t" L: w                cDat:                要显示的数
0 Q8 |4 e, u- b! q$ {) R( \7 p) R                X:                        行数 0~7
) t2 Z6 U; |8 [                Y:          列数 0~127
( ]& V( G% e  L1 p: `3 q# m                show_flag:  是否反白显示,0反白,1不反白 . ?5 p" n: g3 \
                upline:         上划线, 0表示带上划线# K  @4 U3 [1 g+ K
                underline:  下划线, 0表示带下划线, u4 p" S# b0 o4 c
***********************************************************************/5 }0 Y0 m2 L5 S
void LCD_ShowTime(char cDat,uchar X,uchar Y,bit show_flag,bit up,bit under){0 o% p/ z8 s9 K8 V8 w5 r9 g
        uchar s[2];, j5 o" J& I# f9 y9 V
           s[0]=cDat/10+'0';
1 W* i( ]3 z' h        s[1]=cDat%10+'0';
4 {4 Z& w. W. V# {( f        en_disp(X,Y,2,Asc,s,show_flag,up,under);
" X7 G2 c  R; B1 `4 ^  G. E1 a}
: E7 ?+ q1 j; D1 p) Z
9 m7 ?& O+ V( V% H! J* j+ r6 C0 pvoid Show_YMD(){          //年、月、日、星期、显示函数
2 I* A) U, Y2 P, H        uchar uiTempDat;
7 F, m6 r* Z$ ?           uiTempDat=RDS1302(0x88|0x01);
0 r! H* A3 N- S& q& Q        sys.cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);        
! s7 \, F- A3 n3 w: E( {: t% e        LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine);        
+ ?1 n' `* U2 a/ B+ z6 K( k+ ~        hz_disp(4,5,1,uMod[1],1,NoUpLine,NoUnderLine);                                //月1 ^2 U9 c% D1 X
        Show16X32(2,27,ucNum3216[sys.cDay/10],Day_Flag);                        //日. r5 R# }  |0 r4 F/ L/ p. P7 X. H
        Show16X32(2,43,ucNum3216[sys.cDay%10],Day_Flag);                          
$ O0 E/ ]6 C7 V! C" t7 r# m        hz_disp(6,8,2,ucLunar[13],1,UpLine,UnderLine);                                            & U" t' r  O6 M/ o, g
        if(sys.cWeek==7)+ V8 |1 [0 a, @
        hz_disp(6,40,1,uMod[2],1,UpLine,UnderLine);                                        //星期
4 ?6 X1 y5 C, {        else% N9 P+ {0 ?/ G
    hz_disp(6,40,1,ucLunar[sys.cWeek],1,UpLine,UnderLine);                //星期
8 r* P8 g- s+ o  U" l$ V    LCD_ShowTime(20,0,9,1,UpLine,UnderLine);$ U. O1 `2 g( U, Q. j+ W0 {
          LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine);6 Q& V2 H# E+ E: y2 \' A
    hz_disp(0,41,1,uMod[0],1,UpLine,UnderLine);                                        //年
$ A: @8 o- B+ P5 a6 v8 K7 ^( u/ E4 L
        SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay);                        //获得农历
, z4 j, J6 W* |# P9 b4 ?% O    if(SpDat.cMon==1)                                                                                           //显示农历月
4 K. V3 q- X' z5 S          hz_disp(4,64,1,ucLunar[15],1,UpLine,NoUnderLine);                        //"正"7 s! X  F( R9 t; W1 `: U# h
        else if(SpDat.cMon==11)
; m" [7 ?! D4 s) t- y- o          hz_disp(4,64,1,ucLunar[16],1,UpLine,NoUnderLine);                        //"冬"; v" h# @  K1 u& s4 c7 V
        else if(SpDat.cMon==12)
2 I2 a5 {4 F7 m% F9 Z4 W          hz_disp(4,64,1,ucLunar[17],1,UpLine,NoUnderLine);                        //"腊"
' k+ x4 W: Z' F& A( p        else
0 q; J( q/ l# |6 o" E: t: f0 t) K          hz_disp(4,63,1,ucLunar[SpDat.cMon],1,UpLine,NoUnderLine); //"二"~"十"
3 p2 R% Q# b4 ?9 c9 t$ D; p         if(SpDat.cDay/10==1 && SpDat.cDay%10>0)                                        //显示"十" 例如"十四"而不是"一四"5 X9 k$ F& i0 y0 j, G  B, o
         hz_disp(4,95,1,ucLunar[10],1,UpLine,NoUnderLine);3 T# A, H9 y; E. y# ~
         else if(SpDat.cDay/10==2 && SpDat.cDay%10>0)               //显示"廿" 例如"廿三"而不是"二四"$ Z- s" R4 w& D4 z
         hz_disp(4,95,1,ucLunar[19],1,UpLine,NoUnderLine);, \  T2 g3 ?3 N8 c8 M6 v
         else
6 x- ?% ]8 L$ L6 M* w) S0 K& i         hz_disp(4,95,1,ucLunar[SpDat.cDay/10],1,UpLine,NoUnderLine);  //正常数字
9 z7 B# J, m4 ]4 p; O        if(!(SpDat.cDay%10))                                                                        //"十"' `, H  X* z: W  i9 M4 H
         hz_disp(4,111,1,ucLunar[10],1,UpLine,NoUnderLine);
" \6 l' P: N: Y  J+ v1 X' \        else                                                                                                                //正常数字
$ X1 U* p2 u& `% E         hz_disp(4,111,1,ucLunar[SpDat.cDay%10],1,UpLine,NoUnderLine);1 @# d; t$ E' V
* H1 e. g! _4 i0 L
         hz_disp(0,104,1,SX[(uint)(2000+SpDat.cYear)%12],1,UpLine,UnderLine);   //生肖) [' T6 C4 E/ Q) G, R* A
  B! y& [9 w8 X4 k0 Q; P
         hz_disp(2,95,1,TianGan[(uint)(2000+SpDat.cYear)%10],1,NoUpLine,NoUnderLine); //天干% e( j9 w" F& C+ W$ U  F. k
         hz_disp(2,111,1,DiZhi[(uint)(2000+SpDat.cYear)%12],1,NoUpLine,NoUnderLine);  //地支
  P. D4 @9 g8 [# M}% B) [* c- G# r4 R) J

6 j4 Z# t' o* I5 g8 s7 f( Evoid LCD_ShowWNL(){          //万年历显示函数- Q+ C9 j( h+ R4 R3 @
        LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);                 //秒,每秒钟刷新
! {: T8 [9 n: ~        if(!sys.cSec || State_Set)                                                                     //分,普通模式每分钟刷新, b6 q: Z5 _* }8 }" u1 r
        LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);                 //    设置模式每次刷新
8 w4 R' _7 H9 e1 Z# x. B
) c% D1 ?& S! Q) A8 K6 q# f& ^        if(!sys.cSec && !sys.cMin || State_Set)                                                 //时,普通模式每小时刷新* S3 k# T3 J: N% c2 ]
    LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);     //    设置模式每次刷新5 z4 X; H" o) m. ^3 ?; p$ y

: [0 U! U( N* q1 z. F        if(!sys.cSec && !sys.cMin && !sys.cHour || State_Set ){      //公历农历的年、月、日、星期
0 a, V- q1 a0 h3 k' Y) a8 P! \                Show_YMD();                                                                                                 //普通模式每天刷新
0 L% X% Y" B# K/ }+ s0 i/ m                if(State_Set==7) State_Set=0;                                                         //设置模式每次刷新
: S# ~6 U9 H# ^( T; h; b        }        
1 i- H8 U' M3 R0 `0 A4 Y6 D}
$ z. |, L% f# x) f" z
8 g" N: W: n) V8 [! s& tvoid CAL_Init(){        //日期初始化函数$ |/ y" b5 n) f; F
        sys.cYear=0x13;        //BCD码表示的日历时间值
0 T7 B) I$ J; b  N        sys.cMon=0x06;
/ c7 C; R& E, P  n% v        sys.cDay=0x030;
0 `% I6 x! m- N) n        sys.cHour=0x23;
/ o. }8 R. a$ |  K  l        sys.cMin=0x59;  N9 x; }( m$ g  c% f/ u/ T
        sys.cSec=0x55;3 {4 Z* n: x5 f: T* P( R
        sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);. v6 u( D. g/ @0 i. L
}
6 L! ~9 Z6 _, l6 ^0 Y
  N$ Q# \* r0 J  \0 K: Rvoid SFR_Init(){                 //定时器1初始化函数+ K$ f2 h, _  b
        Flash_Flag=FALSE;
, n; ~* F5 F6 k2 }1 q) C3 r        TMOD=0x11;
( L4 I, U2 D+ m& @( g/ m: x* ^        ET1=1;
9 {4 Y* J; `/ a1 o; ]        TH1= (-10000)/256;
: {/ y: H9 J: s7 ?! T: R$ o, ^        TL1= (-10000)%256;/ k* q1 o) R  A& _0 f1 [+ f
        EA=1;
' j8 T$ C4 S& E. u. H}7 v* H9 ]9 W7 m& a

; C: h" V% u) U, h/ Zvoid GUI_Init(){         //LCD图形初始化函数- {% {. T, R# X9 R4 Z( W6 L
         LCD12864_init();  `- H6 _0 Q  K; Z
         ClearLCD();
" |2 q9 n9 @9 P         Rect(0,0,127,63,1);   //描绘框架( W4 O+ ^7 ?2 ?8 t# K
         Line(62,0,62,62,1);* X. j7 S( L" A, c
         Line(0,48,127,48,1);
8 ]3 f) Y3 p$ A9 h3 p) s% e4 J+ s         Line(0,15,127,15,1);- p! o2 P: O" p) G  N
         Line(24,15,24,48,1);
- O& I2 `# f8 S! s' @         Line(63,32,128,32,1);' p) A5 ^  F! j+ r# P+ V
1 B6 v0 n2 m( w+ o% P
         SetTime(sys);                                   //设置时间) V# `. F  G8 ]3 h+ v% Y& p
         GetTime(&sys);                                   //获得时间
+ P- B+ P5 J7 |5 c. b0 T% b. d; Z' p! ]$ u9 W/ ^( F
         Show_YMD();
. m* [- `. ~% G* X! @' M         LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);& h9 M  U2 v2 K4 G, Z3 v
         en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);. G7 }( b$ {! P
         LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);
5 |  q- b3 b) t' H. P9 C& c         en_disp(6,79,1,Asc,":",1,UpLine,UnderLine);         2 b# N  I' z/ _. y' t' c
     LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);
/ \; S' x+ u. K0 D+ l
# {' h, A/ A6 ], E! M         hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine);           //"农"' U, V( s0 b# f) E
         hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine);           //"历"
/ u% Z" ~3 ]! T; V. f         hz_disp(4,79,1,uMod[1],1,UpLine,NoUnderLine);                           //"月", s9 J7 l: w5 o* }' ^
}/ z6 d. |3 y2 X6 \& U

, }5 O- P5 g7 Gvoid DecToBCD(){   //二-十进制转换函数
: X. {' a4 B. s7 }. L        sys.cHour=(((sys.cHour)/10)<<4)+((sys.cHour)%10);
& k6 }6 a- F+ ~, @4 H        sys.cMin=(((sys.cMin)/10)<<4)+((sys.cMin)%10);; T  B! x% t/ [* L9 a
        sys.cSec=((sys.cSec/10)<<4)+((sys.cSec)%10);
6 b( t4 E2 r( n! L# k          sys.cYear=((sys.cYear/10)<<4)+((sys.cYear)%10);1 ]8 S: W- E% i6 ]) ^
        sys.cMon=((sys.cMon/10)<<4)+((sys.cMon)%10);1 `7 p. m) T! t2 z8 y& M7 e
        sys.cDay=((sys.cDay/10)<<4)+((sys.cDay)%10);
% T$ b5 H& @: V& k}
1 ]  e) @7 N' o7 \
1 \( Y  q. c+ K, ~: @& Zvoid Time_Set(){   //时间设置函数. x$ H4 c/ M4 u2 Y9 A
        if(State_Flag){                                        //设置键按下; Q2 _: j3 S0 q0 @" j8 b! c
                State_Flag=FALSE;+ L  `7 J* v6 v. i. }% k, Y
                State_Set++;
' y4 I! C9 q* E5 [) s5 X                if(State_Set==8) State_Set=0;
9 T  l+ ~$ o0 m! |        }5 d( _1 e& U! y2 l- e9 j( N/ e* ?' Q8 s2 c
, P: `4 W% l0 z- U1 V: Y
        Hour_Flag=TRUE;Min_Flag=TRUE;Sec_Flag=TRUE;
+ G" `6 Y; j( d" j* \    Year_Flag=TRUE;Mon_Flag=TRUE;Day_Flag=TRUE;
7 A- R* {$ J" i' U2 s1 l( t' R% |3 s5 J- }' n: w" g) J/ W
        switch(State_Set){              //设置类型8 m0 _0 @2 g! K4 p( X) g3 T6 `
                        case 0:                 //无设置0 ^0 D. k; C% J
                                break;
/ p* I  v7 h0 ]0 I+ |8 U                        case 1:                                        //设置时  k) G" f$ k% p# h+ c3 ?' w4 U
                                Hour_Flag=FALSE;
. `( R/ o1 w6 W: }3 i- z                                break;
3 o  a. l! j8 z* ]  H- U                        case 2:                                           //设置分3 j5 n. J0 d: n; @7 j6 N
                                Min_Flag=FALSE;
$ V3 [  m0 Z1 |2 v                                break;
8 w( q& |; `! g' m  K                        case 3:                                         //设置秒
! H: B* ?$ n+ ~6 J1 S4 C                                Sec_Flag=FALSE;( Z* @; x- ^3 I
                                break;. [: E# {* X. i8 Z
                        case 4:                                        //设置天
; d$ @- ]- n) Q7 @  o                                 Day_Flag=FALSE;
# E+ u7 ^( \6 T  h9 S+ U                                break;
- j% S" W1 x+ a% Z; X                        case 5:
) c+ a8 e1 H& h. y! B& \2 Q8 b1 G                                 Mon_Flag=FALSE;     //设置月. z8 `7 Z6 G- c- |6 a, u/ \5 Q
                                break;9 i$ K# V/ B- L2 r$ M; O/ O; T* p9 j
                        case 6:+ s2 x) k8 |: k: \8 E
                                 Year_Flag=FALSE;        //设置年
" E; g; m" l/ `                            break;7 v3 Q* U4 f6 |3 X
                        case 7:                                        //无动作,设置此值为让"年"的反白消失。9 p/ Y7 j! ^) M, o! r  a
                                break;
. \1 j# s3 X7 c          }           
& U. Y" ^8 Q! A1 o  H4 W" I) w% g, a1 w8 |; h  ]
        if(Inc_Flag){                                        //加键被按下! R2 p6 i8 J7 @3 {) d
                Inc_Flag=FALSE;, ~3 }- h7 |9 X
                switch(State_Set)                {: j8 K0 Y  I( R
                        case 0:
% Q' b, i  r& T) m, [                                break;
$ n8 T$ D9 R) G                        case 1:                                            //小时加
* M) \2 @( u2 m) v! a1 z+ I                                sys.cHour++;
7 T' k0 K3 n1 E& n+ z1 M0 m' I8 o                                (sys.cHour)%=24;) t& _% g" Q* M0 Q1 ~0 i0 {
                                break;  M# C7 g' Y- @  B
                        case 2:                                            //分加1
: G# z7 A/ [  _8 f$ h' T                                sys.cMin++;
( d) z! r. @9 ^0 M) F$ P( p/ ^                                sys.cMin%=60;4 N9 {( S6 h% _  {+ k5 \6 _
                                break;8 V) ~+ N8 W  j
                        case 3:                                         //秒加1
& z& X5 }( F1 |1 |. f. b                            sys.cSec++;
- ?$ k: @9 P- s2 q                                sys.cSec%=60;% U# b" J& x) ?( A8 \/ h
                                break;
/ B$ s4 Q3 W  L. h1 A' J                        case 4:                                         //天加1
. ^3 |: y, x) z$ y; l3 [+ f0 H                                (sys.cDay)=(sys.cDay%Mon2[YeaRFlag(sys.cYear)][sys.cMon])+1;                   ; T' L- m7 Z, x4 a( g! W2 k
                                break;. C# P/ M/ q7 z* j
                        case 5:                                         //月加1
: N( \: v- c* h9 l1 t                                sys.cMon=(sys.cMon%12)+1;
2 o, j* ^9 w4 t0 \. k) v                                break;
+ p1 I) k- H5 O& T                        case 6:& W- M6 b$ ]3 t- h5 g/ B
                                sys.cYear++;                 //年加1
; c! n; {& h( c" L$ c                                sys.cYear=sys.cYear%100;
) y. b7 J! b: I                        break;
, g9 B! K% S# w( S" Y/ b3 U                  }        
4 r/ Y, [+ Y1 c/ t# u4 j# w                DecToBCD();                                        //转为BCD数/ f3 U& [6 G, A) d; ?$ _
                sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);    //算出星期
0 h2 |5 |/ V: `. }/ w& Q3 \                SetTime(sys);                            //存入DS1302
0 K% i2 B# D5 `( M8 V        }- |' R& @; u7 ]. |$ K
& r+ b) ~0 K7 i6 w8 Z( q" e( d
        if(Dec_Flag){                                         //减键按下  P- Q$ N5 T- p2 ?1 i, T1 C
                Dec_Flag=FALSE;
: _: u- {8 Q7 d* R% [                switch(State_Set){
  D. _' @) `0 m+ r+ }+ Z  Q0 U                        case 0:
9 l9 o$ [' [6 r' Y/ z                                break;
2 F: r( R$ D' S. ~. N                        case 1:           , ?% |) A$ E" n0 s
                                sys.cHour=(sys.cHour+23)%24;  //时减1& w# c1 G+ v) [8 C
                                break;
7 D5 F6 F- `! |$ Z$ b                        case 2:                                                            //分减14 m4 u1 r) X0 ^3 R
                                sys.cMin=(sys.cMin+59)%60;
9 w% L5 v6 n- ^                                break;9 u+ B5 N) M  e* R
                        case 3:                                                          //秒减1$ W0 T5 g5 P2 a+ t
                                sys.cSec=(sys.cSec+59)%60;( e, Y3 P9 [' j5 j" F! C% ?5 u. J
                                break;
0 ~7 N" Z9 S& A7 U                        case 4:                                                          //天减1, M3 H: D, I5 Q: B$ n6 g, P
                                sys.cDay=((sys.cDay+Mon2[YearFlag(sys.cYear)][sys.cMon]-1)%Mon2[YearFlag(sys.cYear)][sys.cMon]);                  
# t% F+ D. x5 U, I) D( g- x, B$ ]+ D                                if(sys.cDay==0) sys.cDay=Mon2[YearFlag(sys.cYear)][sys.cMon];2 q0 h+ A9 j+ I2 A* P
                                break;
( }1 h$ Z4 s: x, w0 ?' u                        case 5:                                                          //月减1
7 k: r9 p7 ]! S; L) ?) e6 @/ |+ w6 G                                sys.cMon=(sys.cMon+11)%12;7 r/ Y% K) B; W. v. C
                                if(sys.cMon==0) sys.cMon=12;" x* P& C6 x7 ^1 M% i
                                break;5 v* |$ P( e/ a5 E
                        case 6:                                                          //年减1
: O+ J$ T/ w( n$ P4 i                                sys.cYear=(sys.cYear+99)%100;' m* d7 u) g! Z. V0 a4 Z
                                break;
) R7 K' X: e8 T( r7 d                  }        
+ ?# q9 ]! a6 W, g! v! Q( O                DecToBCD();
' N- @2 ^/ ^9 _" r                sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);              
! C& g, L0 t2 D2 p9 S9 c                SetTime(sys);        
1 e2 Z1 A5 N/ l$ ~        }
2 \3 ~/ t" m( w" M$ {  x2 J7 u}( I0 W2 u- M& N( R$ Y
, b! T* B1 K1 z# Z7 ^1 p
void  main(){        //主函数; b, B# K3 K( g' ]; s
         SFR_Init();2 P: X  n4 C# F/ V* ^. `) G% W
         CAL_Init();% k: z9 u. r1 A. X
         GUI_Init();- F! ?0 z# d  {4 ?2 T4 p
         TR1=1;
2 L% l$ o7 N5 e1 `* i0 ~3 L% i! O         while(1){
# n$ X2 G8 V9 v/ I3 K8 Z8 |1 m                GetTime(&sys);                //获得时间' g/ N- f7 F& M
                LCD_ShowWNL();                //显示万年历
' d+ g5 q9 I! `' L                Time_Set();         //时间设置3 V# H& y$ h1 y7 B$ ?( D9 ^6 O5 L
         }        
* t. N4 Y  b1 S) d$ E! j}% o% U' Q% c7 y8 K

$ f9 m8 C& X: R4 @# I2 w* c0 }void timer1() interrupt  3 {  //定时器1中断服务函数( g/ j1 H3 H+ R1 h  l) E: |
        TH1= (-10000)/256;3 \' b* s. x! U3 z* y
        TL1= (-10000)%256;, i6 _) J4 G2 h4 I+ Q+ O5 t3 `
        keyinput();                                        //读取按键& g: e$ }) W( R4 v# H# t' Z
        if (keyvalue&0x10){        ; ^" w, ?. V. i6 y& C
                State_Flag=TRUE;
2 p1 b" B% o( b+ U9 V, Y                keyvalue &= 0xef;                //清键值,保证一直按下只执行一次按键动作。) a) r  q# r6 @
        }        & }8 \5 \/ h9 V2 ]& o! i
        if (keyvalue&0x20 ){                //加# D/ g# b5 o# j, o1 t4 @  B; d
                Inc_Flag=TRUE;+ Y4 B% Q' I) D5 b
                keyvalue &= 0xdf;                //清键值,保证一直按下只执行一次按键动作。  J" w! E" g" @; @* H, w* b
        }        1 l/ J0 Z) H7 z' m# m( K9 c* q
        if (keyvalue&0x40){                        //减
, D8 e8 G1 ]# V0 G! [6 `+ F/ ]1 O                Dec_Flag=TRUE;
5 B  i" }5 \& H9 ]2 ]5 `                keyvalue &= 0xbf;                //清键值,保证一直按下只执行一次按键动作。
: p/ b' t0 t% ^' e& Q        }) Q& t6 U, k* M1 C8 F. b7 M

! g2 K- j1 T0 U% I' A% i}
# R' t7 @+ _% f5 ~! s  ]$ u' h4 B! c5 S* Q
下载:: \5 L: R* ?2 S7 a+ k/ u
游客,如果您要查看本帖隐藏内容请回复

: b2 D5 V! m! C$ c

( b( _! P, X# o
  • TA的每日心情
    开心
    2025-5-6 15:27
  • 签到天数: 100 天

    [LV.6]常住居民II

    2#
    发表于 2019-1-16 08:18 | 只看该作者
    学习了,谢谢!

    该用户从未签到

    3#
    发表于 2020-7-19 23:06 | 只看该作者
    11111111111110 {1 {6 d1 x+ O6 _/ M
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-6 09:16 , Processed in 0.187500 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表