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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
带农历的电子万年历 单片机软件程序与proteus仿真
* T1 @2 c2 E9 W) [$ M" d* Q) U  O9 n- X8 J7 P2 X1 L
, n6 a. _# e5 W5 s% Q
电子万年历软件程序。整个软件程序分模块编写:
2 s  \% |' t) w$ x3 k& q, l
      1.包含主程序模块main.c
( J; }9 n- B& ]/ i
      2.日历时钟程序模块ds1302.c
- x# W% I+ d, C2 ~2 }
      3.年历转换程序模块lunarc.c

4 ^' l) J' B4 V
      4.键盘处理程序模块keyinput.c
0 ]: U, Q% `) `
      5.液晶显示程序模块12864.h

6 W* D( o* B3 k4 k( @: r* R- h
      6.字模模块model.h
  ^2 m: u; e) u% P+ A+ u# c
, d- \( P& U: D7 k* |8 f; U2 _) F

7 \$ l3 ?0 X+ G2 J# p. X6 z- ] 4 A" w& E. z3 d  Z- ~# Q; L9 C
6 O  }5 n/ G6 I
单片机主程序:

1 k" |2 {  R9 F9 g0 S#include
/ Z* q) G# H4 G" B#include "12864.h"
" Q  e1 E& L6 J- ^#include "model.h"
( i$ |- D* s; T( ?#include "ds1302.h"/ k$ R1 T$ M6 s# T" x4 E
#include "lunar.h"
1 W- n. f2 y+ L! b( J#include "keyinput.h"
3 w( k: L4 C' {/ r3 \3 F' F2 U( m3 u% ?7 T0 f
#define uchar unsigned char
9 y- S3 v5 v% x* o6 @6 t#define uint unsigned int
* P( a4 |- s4 m! T) A' s#define NoUpLine         1
2 L/ J" ^" o: s+ g#define UpLine           0
& B! _  s! h1 ?- Y. B" I, E#define NoUnderLine 1, Y0 E5 M% P+ a6 `9 z
#define UnderLine        0
  f  U1 Q8 K/ q3 O$ @#define FALSE        0) d; O6 h4 Q( |* ^/ h0 D- K9 P
#define TRUE    1
- M+ t# Z& u' l$ _. ]+ s
1 [0 i: m; [7 B, r- _, ?uchar dispBuf[7];7 {" s5 E' }/ k3 R- }2 ?
uchar T0_Count=0,Tmp_Count=0;  t: a  M9 d$ _% b5 a
bit T0_Flag,Tmp_Flag,Flash_Flag;: {5 i5 N- i& X5 S' w; x

7 E7 Q. x' E2 N4 w; ~8 a! tSYSTIME sys;                   //系统日期5 m2 z9 V. F2 |1 C
SPDATE SpDat;                   //农历日期9 M/ s. t4 R7 _* n. ~6 n
5 D: Z# g' N# t' [1 V; y/ N, O
bit Hour_Flag=TRUE,Min_Flag=TRUE,Sec_Flag=TRUE;           //设置时间标志; U2 U% }$ Y9 ]8 A, l1 ?2 v
bit Year_Flag=TRUE,Mon_Flag=TRUE,Day_Flag=TRUE;
) X: C1 ]5 ~4 Q3 Q! ^& V5 D' G* S
uchar State_Set=0;     //设置时、分、秒、日、月、年等状态
8 n& L" F, o; n' [& u' e# ?; r! \* a! x3 T) [- V6 {$ Q
bit State_Flag=FALSE,Inc_Flag=FALSE,Dec_Flag=FALSE;        //三个按键是否按下的标志
& C! J% y" k3 B+ Y' y" G
$ W  y$ ~0 w8 Buchar code Mon2[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
/ [2 T0 D$ `: I) k/ @* u5 A7 K                                  0,31,29,31,30,31,30,31,31,30,31,30,31};% H  ^6 H9 b7 |
3 n7 s, k1 J( j! ?. c
/*****************************LCD显示函数******************************8 K. g& R$ y' r8 U4 m7 \: N9 l
入口参数:6 [) U0 y" D, B3 ], E% J, D
                cDat:                要显示的数
& D! x. k3 k/ u; e, [                X:                        行数 0~7
5 M8 v9 B  A1 d: e                Y:          列数 0~1272 P2 |; h3 e" C- I: f; \
                show_flag:  是否反白显示,0反白,1不反白
+ W% [$ b8 A* o, y9 r9 f                upline:         上划线, 0表示带上划线  p: Z6 L. ?$ R8 c- k6 [( i% w
                underline:  下划线, 0表示带下划线
4 u$ r( u+ u- x4 M( K# Y8 `+ J***********************************************************************/6 K( M; L* _: ]% k2 m
void LCD_ShowTime(char cDat,uchar X,uchar Y,bit show_flag,bit up,bit under){
6 o5 Y6 g/ o9 o; ?        uchar s[2];
! g, m  U/ v% {; e( E           s[0]=cDat/10+'0';$ l' }4 ?* B5 z) I1 ^
        s[1]=cDat%10+'0';$ {! j' j/ W6 j9 w
        en_disp(X,Y,2,Asc,s,show_flag,up,under);% R* V0 ~& s9 Y& R2 m( Y! R
}1 O3 L' H" C" [

: j- u* [) f/ x5 r  l7 i, Q1 T* F1 ovoid Show_YMD(){          //年、月、日、星期、显示函数
' L$ |* a: u# Q7 F2 U        uchar uiTempDat;, g9 a2 s: Q- _3 R# b
           uiTempDat=RDS1302(0x88|0x01);
, q: h( l! S2 C' d' I' r. f) j0 D        sys.cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);        * z' p4 @( t0 W
        LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine);        
9 p4 a& p7 G& B$ A1 |& `" B        hz_disp(4,5,1,uMod[1],1,NoUpLine,NoUnderLine);                                //月
" p0 @6 x' I1 S3 U' N        Show16X32(2,27,ucNum3216[sys.cDay/10],Day_Flag);                        //日. X( k( K6 j8 S1 \
        Show16X32(2,43,ucNum3216[sys.cDay%10],Day_Flag);                          
8 D9 P" n. P7 o( ^9 y        hz_disp(6,8,2,ucLunar[13],1,UpLine,UnderLine);                                            
$ X# ~* p* w# I/ h4 Y* D, X        if(sys.cWeek==7)5 `% i, p+ u5 D, E- ^$ Y$ b, {- Z* z) {- ^
        hz_disp(6,40,1,uMod[2],1,UpLine,UnderLine);                                        //星期 . ?: h6 Q1 t$ }( ~5 S, m
        else
; P: B  E! A# y2 {    hz_disp(6,40,1,ucLunar[sys.cWeek],1,UpLine,UnderLine);                //星期( l# y! _8 W. D# j7 \
    LCD_ShowTime(20,0,9,1,UpLine,UnderLine);" f) U2 p) D! P$ _: o. e2 W$ x
          LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine);  V, ^2 p3 {. M$ k3 J
    hz_disp(0,41,1,uMod[0],1,UpLine,UnderLine);                                        //年
: a3 S# Q9 s  v. ^+ r
! b4 a8 g/ O& z& Q        SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay);                        //获得农历3 N' V* `( O1 H4 q$ e6 g' l! G1 e
    if(SpDat.cMon==1)                                                                                           //显示农历月% k( W# A# @/ m/ U9 `, B
          hz_disp(4,64,1,ucLunar[15],1,UpLine,NoUnderLine);                        //"正"
2 T( |* L2 ]9 C6 V0 r* v        else if(SpDat.cMon==11)9 {, T6 \! \+ J1 E/ s
          hz_disp(4,64,1,ucLunar[16],1,UpLine,NoUnderLine);                        //"冬"! O0 l3 J( ^/ {; P. G+ F2 A
        else if(SpDat.cMon==12)( W8 I1 |' S% E# R) x
          hz_disp(4,64,1,ucLunar[17],1,UpLine,NoUnderLine);                        //"腊"
0 j# W2 [$ _$ F' @) G3 a4 ?        else1 A# Y# M0 u9 @$ A: j
          hz_disp(4,63,1,ucLunar[SpDat.cMon],1,UpLine,NoUnderLine); //"二"~"十"3 a6 x+ O' F4 D0 y' F
         if(SpDat.cDay/10==1 && SpDat.cDay%10>0)                                        //显示"十" 例如"十四"而不是"一四"
6 z- ^; i* z  C& X$ C0 y( ~) R         hz_disp(4,95,1,ucLunar[10],1,UpLine,NoUnderLine);& n( j4 X2 T! v- L9 s1 S
         else if(SpDat.cDay/10==2 && SpDat.cDay%10>0)               //显示"廿" 例如"廿三"而不是"二四"8 _* `! a# A  A& ~0 i6 [5 |
         hz_disp(4,95,1,ucLunar[19],1,UpLine,NoUnderLine);
( {) z, E1 I2 M: y# F         else" H, l8 L7 F; O
         hz_disp(4,95,1,ucLunar[SpDat.cDay/10],1,UpLine,NoUnderLine);  //正常数字
' R' W7 F, U$ H+ ~- r# V        if(!(SpDat.cDay%10))                                                                        //"十"5 D5 Z: B( f' R
         hz_disp(4,111,1,ucLunar[10],1,UpLine,NoUnderLine);, A" W' H/ |! a2 X, X
        else                                                                                                                //正常数字& V* l/ P2 h: F6 r% g# M6 V
         hz_disp(4,111,1,ucLunar[SpDat.cDay%10],1,UpLine,NoUnderLine);
! y1 M3 W1 D9 f2 C: Q1 _  ]  D8 k  Y
         hz_disp(0,104,1,SX[(uint)(2000+SpDat.cYear)%12],1,UpLine,UnderLine);   //生肖
2 y( f) _& \* }* E* I  @; F+ b# F9 `- t& O; g* v% M7 C
         hz_disp(2,95,1,TianGan[(uint)(2000+SpDat.cYear)%10],1,NoUpLine,NoUnderLine); //天干! C* X  K! |' u2 \8 I6 `
         hz_disp(2,111,1,DiZhi[(uint)(2000+SpDat.cYear)%12],1,NoUpLine,NoUnderLine);  //地支
% Z/ t, k; |4 u4 _9 `8 C}, x2 ~) ?5 Y& r
5 m( X1 X8 D# D4 r4 K+ p& K
void LCD_ShowWNL(){          //万年历显示函数
; P5 K) t8 a1 t/ V: e        LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);                 //秒,每秒钟刷新: ?1 y' G! Z5 S, k8 A  V
        if(!sys.cSec || State_Set)                                                                     //分,普通模式每分钟刷新  L/ f2 z# L: L. e2 I. C
        LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);                 //    设置模式每次刷新
! i+ |' i. q0 r5 \4 U: Q/ S: O0 o6 b9 S
        if(!sys.cSec && !sys.cMin || State_Set)                                                 //时,普通模式每小时刷新
# x0 x. M- q' ~$ [3 D    LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);     //    设置模式每次刷新3 o& s. b* G  S" M
: w+ I7 |4 Q& x' i' l$ }5 d
        if(!sys.cSec && !sys.cMin && !sys.cHour || State_Set ){      //公历农历的年、月、日、星期
) d; ^9 @. E5 i2 L! N/ e                Show_YMD();                                                                                                 //普通模式每天刷新- K. @6 Y# H% k+ s) X  S- P
                if(State_Set==7) State_Set=0;                                                         //设置模式每次刷新
% q. C5 x& s' v. ^/ c& b        }        6 ~( g4 d6 I0 R* M( }, z4 C0 R
}
  i, n1 O8 i6 _4 f9 z5 M% K, A7 V
7 U5 O- m# p" Pvoid CAL_Init(){        //日期初始化函数
0 d' e9 C3 b, H. \- q0 ]        sys.cYear=0x13;        //BCD码表示的日历时间值
9 R% h' ~. V- Q$ |" v        sys.cMon=0x06;; T! }' b8 L& Y8 S/ {+ C5 s1 ^
        sys.cDay=0x030;, c5 Q$ |8 X* P  _
        sys.cHour=0x23;2 O! q: |* K6 D/ g, I9 G
        sys.cMin=0x59;# i3 t. s, N+ _; c0 S
        sys.cSec=0x55;+ L& H$ G  ]. {2 }" j1 [6 F  a1 w
        sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);  U+ @" n2 |- N7 N  Y3 Y6 N$ U
}, n+ ]6 \( A$ |' L, W2 d2 ?
8 L' q- j/ p3 z( e  K5 }
void SFR_Init(){                 //定时器1初始化函数
, d8 w) F4 o5 N+ ?        Flash_Flag=FALSE;1 ?# S& H9 l: ]6 Z/ D
        TMOD=0x11;
1 K- d* Z% @7 g9 X% u        ET1=1;+ d) m7 O+ M) ^' }& H: j/ v
        TH1= (-10000)/256;7 L9 ~  z2 W0 i7 E
        TL1= (-10000)%256;
$ E. q( F; {9 P" Y5 y        EA=1;
5 Q+ j. m+ v7 S}
% f2 b& p  L" y5 Z1 `
- v6 f6 C* k  X' C& cvoid GUI_Init(){         //LCD图形初始化函数
# f* ~. x# @3 D* [7 r         LCD12864_init();
" ?/ z' F% k( D% p; a         ClearLCD();
. a" ?- {: S$ }1 L( i# _, m         Rect(0,0,127,63,1);   //描绘框架
) E) H) L* [+ {* b; `* F# w% D. J% k         Line(62,0,62,62,1);! M- r2 J' D9 \  f( I1 {3 M( M
         Line(0,48,127,48,1);
# S' O1 P$ f' y+ @/ |         Line(0,15,127,15,1);& |0 i0 r4 X+ ^" q5 E
         Line(24,15,24,48,1);) v4 I" d+ g9 O# c
         Line(63,32,128,32,1);
! g- j: R3 s9 \( s0 p9 n% M- _# G& j: \
         SetTime(sys);                                   //设置时间% o/ q0 n1 S/ |' Q" ~# w$ h
         GetTime(&sys);                                   //获得时间4 x* j5 r6 A9 Y# L. m4 k; k
8 a5 u' \' P4 K$ r5 p- m
         Show_YMD();
  z5 X" ]! ~8 `         LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);
$ C/ n3 m3 A( e: p3 _7 ~+ n' f         en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);
$ ?" ^5 X/ b2 o4 i! k/ N# f9 \         LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);
( N- L1 n8 B7 i( ]( j1 C5 C* p1 Z         en_disp(6,79,1,Asc,":",1,UpLine,UnderLine);         
/ K& f. @0 C. |: Z8 Z# T0 o; j: D     LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);
$ m  E. [, b7 G0 Y4 e" g
( Y* `, ]1 h% q* V! P& v         hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine);           //"农"
8 X6 f* E1 u' q. S2 }         hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine);           //"历") X; J3 V) g9 l3 ^7 }3 N+ s
         hz_disp(4,79,1,uMod[1],1,UpLine,NoUnderLine);                           //"月": i- T* T9 t; g+ ]; G3 B' c& B
}
0 B5 p' U/ J8 A! _+ w) R
/ V+ u$ g3 p# _6 Hvoid DecToBCD(){   //二-十进制转换函数
, h; U! _5 W. T4 b& w        sys.cHour=(((sys.cHour)/10)<<4)+((sys.cHour)%10);2 L# G) g6 I) E0 U# d
        sys.cMin=(((sys.cMin)/10)<<4)+((sys.cMin)%10);/ h/ y% g  w( d/ _7 r9 O
        sys.cSec=((sys.cSec/10)<<4)+((sys.cSec)%10);& Q# S+ O- z# R9 E
          sys.cYear=((sys.cYear/10)<<4)+((sys.cYear)%10);3 M$ }1 p, \: v  i# l8 s
        sys.cMon=((sys.cMon/10)<<4)+((sys.cMon)%10);
# ^  R/ F+ X5 _. n; W3 m        sys.cDay=((sys.cDay/10)<<4)+((sys.cDay)%10);
2 T; T" z* E! n' q, W3 c}" W" ?3 ?4 ~- ?7 p6 E1 h- T
/ I+ P1 ]) a( G1 E6 x1 u( u) b! S
void Time_Set(){   //时间设置函数
7 j4 I; J" x% C9 R        if(State_Flag){                                        //设置键按下
& f1 l% ^/ N9 ~# O  m: y+ k; V& L2 p                State_Flag=FALSE;
* j3 }1 i# c, ]# m. w0 q, K6 ?& M0 g                State_Set++;  C2 ], |/ t% f, U. o5 S& R
                if(State_Set==8) State_Set=0;
! Z7 ]* P$ E$ F. j2 @8 z        }4 y: Y6 Z3 z0 `1 b1 {: N

# ?* A1 k' V, f9 p        Hour_Flag=TRUE;Min_Flag=TRUE;Sec_Flag=TRUE;% g, _$ `  {. _$ |/ O
    Year_Flag=TRUE;Mon_Flag=TRUE;Day_Flag=TRUE;: B  Z) o9 k$ g8 R
. h  J1 f/ v! K/ {8 ^" q! g
        switch(State_Set){              //设置类型0 B6 O% Y; z5 Q# s' t  ~
                        case 0:                 //无设置" s+ m9 F8 x! F' v% k
                                break;6 z& ^+ _! Q+ \2 Z0 G
                        case 1:                                        //设置时
9 d; W. f  ?7 c( Q; u* ^* M                                Hour_Flag=FALSE;) F6 h& M* h7 I. M/ M  z' j
                                break;# |# M1 {) l# {$ }. h2 c7 v1 {
                        case 2:                                           //设置分; `# D2 B4 c8 ^4 P
                                Min_Flag=FALSE;: r2 d6 R! ^% p& j
                                break;4 T% B; q! k+ I+ x4 i3 w
                        case 3:                                         //设置秒# g4 L! ]% \; j! M+ V
                                Sec_Flag=FALSE;
4 _: l9 p- A' b0 _0 d: ^( \& s5 j# f0 M                                break;
& ]  K9 y, Q, O' U                        case 4:                                        //设置天* i3 t  }9 s4 e. z+ p
                                 Day_Flag=FALSE;
& t$ F: ^: u3 V                                break;
$ S( _6 O4 `+ h7 U0 K0 X9 a                        case 5:! q5 O# E% i: N8 D
                                 Mon_Flag=FALSE;     //设置月3 ~5 S( K  s" X
                                break;& R( r, h) m* U4 H7 K+ o
                        case 6:; }- B' z. q0 y
                                 Year_Flag=FALSE;        //设置年
$ G& c  G4 o# l" o9 j( W4 w, V                            break;( f6 Y7 u* s' M
                        case 7:                                        //无动作,设置此值为让"年"的反白消失。
+ N2 O  q* S8 G1 Y& ^/ W$ n                                break;
  H( s) j. q4 S6 \' Z. e; W8 J+ v          }           . b/ b) e/ N3 r1 w. p
* I, K/ z. W2 w6 {* O
        if(Inc_Flag){                                        //加键被按下  i0 i# g: \8 m
                Inc_Flag=FALSE;
5 d/ ^3 L/ W/ c& ]' O0 V1 C                switch(State_Set)                {
: a8 C* n5 d% @1 I8 C6 x  u                        case 0:" W6 U# O2 J, A
                                break;
2 z4 m+ H3 c% I                        case 1:                                            //小时加
, k6 @$ h) k* }! H1 u                                sys.cHour++;: h5 Q# X% F2 A4 o
                                (sys.cHour)%=24;
/ O6 v7 C! t; y* Y6 n7 ~. V  u. J                                break;
" Z4 A) F- a% O! q2 z6 Q                        case 2:                                            //分加1
: e1 H/ o- O1 B                                sys.cMin++;) h! I: M+ J( o# w) z
                                sys.cMin%=60;9 c9 P$ n$ D9 c
                                break;. I  R; m4 D( \4 M1 F8 R6 ]9 ^; v
                        case 3:                                         //秒加1$ v6 ?$ Z- P  Z, J4 G; g+ Q
                            sys.cSec++;; K0 f; [) W- {3 n) ^' @0 b
                                sys.cSec%=60;
- U' x) }7 p9 {2 b* m9 y                                break;1 t- g; C6 v# D/ h3 V  w
                        case 4:                                         //天加1
- M) h0 s7 S) a: a                                (sys.cDay)=(sys.cDay%Mon2[YeaRFlag(sys.cYear)][sys.cMon])+1;                  
  C% L& Y* d& @) W& w8 n, |                                break;7 w: r; ^" q' B% m
                        case 5:                                         //月加1
5 T8 R) [$ ]- S. S                                sys.cMon=(sys.cMon%12)+1;9 n5 N) S/ W9 f+ U/ m1 F
                                break;) O) i4 S1 _8 ~& L  r5 L' q$ ?
                        case 6:
/ r: k1 p8 d% s$ B, ~                                sys.cYear++;                 //年加1
* |) \9 Z5 j/ g! v2 Q) z                                sys.cYear=sys.cYear%100;
, F# q; `* \; c5 N3 g; G3 U: F: Z& X                        break;
7 L" ^$ o9 x/ _" O                  }        ! E) S% P- Q4 v& m" y7 b
                DecToBCD();                                        //转为BCD数7 \5 ?0 ^3 Z( C* o
                sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);    //算出星期
  M. S. X; F$ b% O  n5 {: `                SetTime(sys);                            //存入DS1302
$ R$ N0 J+ W) J$ O1 |! o        }, Q6 O  c) o7 l* D# S+ n
. l4 y4 u4 L  D7 D4 P" y
        if(Dec_Flag){                                         //减键按下
6 ]! A/ H. Y. c& s/ C                Dec_Flag=FALSE;9 I1 c; _) T6 X* A: C/ ]) Z
                switch(State_Set){" {* _7 M0 ~& e/ g% {
                        case 0:- r4 K5 ^* F+ Z! k3 _
                                break;
. B- ]: O2 y. \4 g                        case 1:           5 b: |% {$ E& r1 N% z4 m2 m
                                sys.cHour=(sys.cHour+23)%24;  //时减10 E0 @2 c6 k- I4 V& K$ Y
                                break;$ c- J: c" T! m. R+ _+ M; k0 q. \
                        case 2:                                                            //分减1
7 ]' N: R, z- F                                sys.cMin=(sys.cMin+59)%60;
! X9 `  b% ^; C0 u* [                                break;3 U. Y) I( P/ H; e' y
                        case 3:                                                          //秒减1( H/ U' h/ W6 g' y7 H$ Z
                                sys.cSec=(sys.cSec+59)%60;8 M) ^& t' D: m5 B
                                break;: m* x: J/ E3 @1 B
                        case 4:                                                          //天减1
2 o  T! w1 X/ O/ _( Z9 L/ f                                sys.cDay=((sys.cDay+Mon2[YearFlag(sys.cYear)][sys.cMon]-1)%Mon2[YearFlag(sys.cYear)][sys.cMon]);                   ) |$ u9 v+ N8 p: T6 E' Z+ g# S% @* h
                                if(sys.cDay==0) sys.cDay=Mon2[YearFlag(sys.cYear)][sys.cMon];; y# \6 q( S3 a  i' K7 d4 W
                                break;1 [4 I; ?" X$ H! g0 \9 V( ]1 u
                        case 5:                                                          //月减1
# s! X. p: d' K: V                                sys.cMon=(sys.cMon+11)%12;
/ V4 ~$ L, V1 k% b( C$ v# i                                if(sys.cMon==0) sys.cMon=12;3 a% z6 ~+ z0 F' @
                                break;+ S7 ]4 s+ p1 Q: C) E1 Z
                        case 6:                                                          //年减1. U# L7 N9 ~1 W1 s! a' M
                                sys.cYear=(sys.cYear+99)%100;
# j, q4 o& w3 T6 J8 N                                break;
, y; w) B* p3 L+ |( U                  }        " \6 {" }2 @* ^& b
                DecToBCD();
3 N6 K4 n3 @2 A/ i                sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);              
+ G, y2 z2 I( `* Y5 T                SetTime(sys);        
. s" k- I0 W% [2 ]. G% F5 f( \8 r        }
( b$ \9 x) w* \  q8 f8 G  }( x}: Q1 P" h7 ?7 X

1 h% C: y' @- j& [  n- b; zvoid  main(){        //主函数
7 g0 h$ ?5 k8 o7 T# ?         SFR_Init();+ h$ n' m& s% d1 m
         CAL_Init();- B2 e8 x$ @0 M; y2 D- Q# _
         GUI_Init();1 E# _9 H6 v# M* L  j& Y( }; A
         TR1=1;
- Y0 t; W- K  ^! l) j8 j- e* C  p         while(1){
4 d6 u& P9 W0 H! e3 }/ {$ d                GetTime(&sys);                //获得时间
: K7 t2 p" }& {& O4 U% E                LCD_ShowWNL();                //显示万年历
+ p  ~7 c* C4 q                Time_Set();         //时间设置4 N* [3 {6 y/ P4 A1 O
         }        ) v* I, j7 j+ g! c/ `, r
}$ @7 Z: q8 n' W+ c! ~1 O( n5 @

. h0 E9 v* S- qvoid timer1() interrupt  3 {  //定时器1中断服务函数
  I2 k* c. U$ b$ l5 e        TH1= (-10000)/256;8 e- G' y4 S4 N3 c/ k4 G, A/ n1 M; D
        TL1= (-10000)%256;
% U* v1 j/ |& @) G        keyinput();                                        //读取按键
8 _8 _7 y" a7 f* i0 R# Q6 h- A        if (keyvalue&0x10){        
( m! H- o! M2 J  `# c' Z                State_Flag=TRUE;
- s' V/ e; l, a, ]; k8 x9 }( Q7 f                keyvalue &= 0xef;                //清键值,保证一直按下只执行一次按键动作。
; ]9 `$ A# S; K$ v- S        }        8 n* b8 q+ H/ N# }& p! e
        if (keyvalue&0x20 ){                //加
$ B4 {8 B2 q! h0 y* Y                Inc_Flag=TRUE;: `( A1 w& h5 R& U( M
                keyvalue &= 0xdf;                //清键值,保证一直按下只执行一次按键动作。. L2 w  A' C4 h) T: K- A
        }        , W5 u5 n6 V$ k- K" s9 Y  c
        if (keyvalue&0x40){                        //减
# \) \* ]' v: p) `' T) a                Dec_Flag=TRUE;
- `' \5 U; u! u% V0 S                keyvalue &= 0xbf;                //清键值,保证一直按下只执行一次按键动作。
/ k$ j& Y# o8 [% ]        }
* s: @: G# y  q+ S3 Y* F6 `8 v" c* G
}
2 @7 F. t, S. C+ j3 w5 H- H4 G, {
下载:
$ A5 w1 @0 w- [' Y5 M' k+ Z8 x
游客,如果您要查看本帖隐藏内容请回复

5 O) ^4 v8 `7 P7 H9 T- F/ a

& P( J& _* q4 M" C2 C5 [
  • TA的每日心情
    开心
    2025-5-6 15:27
  • 签到天数: 100 天

    [LV.6]常住居民II

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

    该用户从未签到

    3#
    发表于 2020-7-19 23:06 | 只看该作者
    1111111111111
    % }: b0 C" C2 q$ y2 @
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-12 12:16 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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