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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
带农历的电子万年历 单片机软件程序与proteus仿真6 B4 i7 R/ y  g) f- t" e
# g& c( v) c( K
4 X* T1 D1 U* g7 C+ O1 M: G
电子万年历软件程序。整个软件程序分模块编写:

4 r7 ^  K) v2 E9 g$ \$ I& W+ A
      1.包含主程序模块main.c

  u+ `/ G$ b5 G
      2.日历时钟程序模块ds1302.c

# N, }  s: S; F% h' N! P7 G- u9 p
      3.年历转换程序模块lunarc.c
6 J3 f' R6 v; ~/ Q5 r1 R; B) R
      4.键盘处理程序模块keyinput.c
3 `/ h) V# E0 Y" ]
      5.液晶显示程序模块12864.h

4 f/ q- Y+ |1 h- r
      6.字模模块model.h/ _3 i6 g/ P) w" y0 T
5 g  ?: L2 D' f
1 d$ M6 A2 r: m

6 ?1 V& }/ l3 L( B
4 [& S  ~$ F9 i( b" J: p单片机主程序:
: j) u, w  t( s1 R
#include   l7 k7 q0 z  T, K, u
#include "12864.h"1 ]' W! }- f& I) E6 k0 W
#include "model.h"; [% [7 [8 n! ]
#include "ds1302.h"
( `/ `& F; m( S4 p1 Z#include "lunar.h". f1 e& K" q) ~/ D: {# Z
#include "keyinput.h"+ Y# t& ~4 A( `( _* D3 t% A" @4 z
+ B) g$ \: M% a
#define uchar unsigned char
. {  W1 `; {6 M6 z# r, Q9 l#define uint unsigned int2 J, z2 _5 y2 z) L9 I
#define NoUpLine         1: L* m1 `4 T9 P! Y0 a
#define UpLine           0/ ^2 V/ Y0 v3 Y# B! s! X% V, a
#define NoUnderLine 1* q! X" u& W( Y% L
#define UnderLine        0
+ G6 V0 D; t& ^8 T#define FALSE        0
7 q6 b- \* r$ V3 m# O1 P#define TRUE    1
. N7 m2 J2 f" D: }, c) O+ T- M3 j/ A% n6 T# v& b
uchar dispBuf[7];9 M0 Y- A( Z, Z+ C9 K* j
uchar T0_Count=0,Tmp_Count=0;. ~& c$ |3 Z9 U( a
bit T0_Flag,Tmp_Flag,Flash_Flag;2 d$ |6 s$ J! Z3 j; Y

$ ~# }+ G; s" ^SYSTIME sys;                   //系统日期
7 j% Q# K+ G' W2 U6 h/ l( f; kSPDATE SpDat;                   //农历日期" N# T1 o' M- s2 P( v+ C# q
0 G8 l% Z5 j) d3 {
bit Hour_Flag=TRUE,Min_Flag=TRUE,Sec_Flag=TRUE;           //设置时间标志" z' m& O& Q# V' c( K) `
bit Year_Flag=TRUE,Mon_Flag=TRUE,Day_Flag=TRUE;% ^& T0 J4 V1 a! h3 J4 M* p

0 W, k7 v( R6 X0 D, l) [uchar State_Set=0;     //设置时、分、秒、日、月、年等状态
, L8 M4 Z4 W; ~4 B  R
- B7 l3 B/ W! o' R2 t9 \bit State_Flag=FALSE,Inc_Flag=FALSE,Dec_Flag=FALSE;        //三个按键是否按下的标志
& o0 W+ |/ A0 {6 l- p% ?$ V$ R- C6 t  l" ^
uchar code Mon2[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
8 _( K' r8 E( \# J) W6 n. L                                  0,31,29,31,30,31,30,31,31,30,31,30,31};; H' k7 D' p6 }

1 x5 ^. S7 P+ M% C0 h/*****************************LCD显示函数******************************9 u) e  c4 ]  m  s, a6 m
入口参数:5 X/ o# n' X' K( }
                cDat:                要显示的数) C; u7 t0 p( g
                X:                        行数 0~7
8 w( F3 t  v9 D; |& z                Y:          列数 0~1274 ~. b5 ?% f6 Z% N
                show_flag:  是否反白显示,0反白,1不反白
: o. ^) I: x3 y( r- E; D. W0 y                upline:         上划线, 0表示带上划线
) M! g) q' Y; }2 O& M+ w8 C7 ^3 e                underline:  下划线, 0表示带下划线
; {5 Z, r1 A6 _2 I: J0 x9 N***********************************************************************/
1 l2 _6 J/ n: ]/ w/ Dvoid LCD_ShowTime(char cDat,uchar X,uchar Y,bit show_flag,bit up,bit under){
& _  c* N' d0 R0 O        uchar s[2];
9 W8 J; q" z. j5 w5 Z. N           s[0]=cDat/10+'0';6 @; }+ K0 y. n  X4 R# k( T
        s[1]=cDat%10+'0';; |! d3 W- O) X* ?$ q
        en_disp(X,Y,2,Asc,s,show_flag,up,under);: r8 \* [" R- o
}/ h; I3 l$ G0 e2 W

7 N  \: C% h' {3 Q- R: Mvoid Show_YMD(){          //年、月、日、星期、显示函数% V8 T% ~+ C- d: V
        uchar uiTempDat;1 Y0 {0 P# D  ~+ ^) |9 c+ Y  H
           uiTempDat=RDS1302(0x88|0x01);
7 L( N- m0 s- u* L        sys.cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);        ' y! o8 l$ u) |( t9 I# r+ [
        LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine);        ; j- ^! S+ R" ?5 G2 @5 T  C
        hz_disp(4,5,1,uMod[1],1,NoUpLine,NoUnderLine);                                //月
( Q9 M, J0 K8 a        Show16X32(2,27,ucNum3216[sys.cDay/10],Day_Flag);                        //日
# L0 y4 }* l8 t/ j6 T9 }( N  M" l        Show16X32(2,43,ucNum3216[sys.cDay%10],Day_Flag);                          5 p; X3 f  M$ z6 G* C6 H" w
        hz_disp(6,8,2,ucLunar[13],1,UpLine,UnderLine);                                            ' ~9 i) C0 j$ H, S( C
        if(sys.cWeek==7)& Q( f5 w  A6 f6 y: H. k
        hz_disp(6,40,1,uMod[2],1,UpLine,UnderLine);                                        //星期
& O4 g9 t. p8 t8 Q1 M* O        else
: x5 W7 t; l& }$ ]6 `* x) R    hz_disp(6,40,1,ucLunar[sys.cWeek],1,UpLine,UnderLine);                //星期& C0 U2 }& ]/ G# r
    LCD_ShowTime(20,0,9,1,UpLine,UnderLine);
& z% b1 i/ E1 H* b: b7 D- }          LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine);  i8 x4 X* r( W# q
    hz_disp(0,41,1,uMod[0],1,UpLine,UnderLine);                                        //年* |2 z" i3 O2 n' Z
1 R! g3 d6 D5 J4 s
        SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay);                        //获得农历
, d; P: o/ B, _) F) K. E    if(SpDat.cMon==1)                                                                                           //显示农历月
! {, I" b: L) B0 X2 ~) [          hz_disp(4,64,1,ucLunar[15],1,UpLine,NoUnderLine);                        //"正"- b8 g: y1 u: H
        else if(SpDat.cMon==11)
! t! M* c! O- _8 Q# E1 n* E          hz_disp(4,64,1,ucLunar[16],1,UpLine,NoUnderLine);                        //"冬"( R! g) q; R1 B% D
        else if(SpDat.cMon==12)- {% z% ?# Z! V% Z$ P
          hz_disp(4,64,1,ucLunar[17],1,UpLine,NoUnderLine);                        //"腊") ]5 n" r: a. S+ }
        else
  |2 r5 l' ]3 L* T1 U          hz_disp(4,63,1,ucLunar[SpDat.cMon],1,UpLine,NoUnderLine); //"二"~"十"( u* ~/ w) {2 z& D: {8 h
         if(SpDat.cDay/10==1 && SpDat.cDay%10>0)                                        //显示"十" 例如"十四"而不是"一四"- G7 y7 u5 `  i  ]& Q# M
         hz_disp(4,95,1,ucLunar[10],1,UpLine,NoUnderLine);
; k- L$ h! |2 z/ k         else if(SpDat.cDay/10==2 && SpDat.cDay%10>0)               //显示"廿" 例如"廿三"而不是"二四"7 Q2 d, G% y* A# _' v
         hz_disp(4,95,1,ucLunar[19],1,UpLine,NoUnderLine);
6 s' W. t% E" C9 I7 X6 N2 [! f         else
2 C: v) c) @; W/ a# y         hz_disp(4,95,1,ucLunar[SpDat.cDay/10],1,UpLine,NoUnderLine);  //正常数字/ v$ C' R; M- @. ~6 A$ a1 j# r. z
        if(!(SpDat.cDay%10))                                                                        //"十"6 @7 S* x# p8 F
         hz_disp(4,111,1,ucLunar[10],1,UpLine,NoUnderLine);6 f% z! ~  F8 \. M3 \- D3 X
        else                                                                                                                //正常数字
0 l& g( {' b7 I) o2 j' [' S0 v         hz_disp(4,111,1,ucLunar[SpDat.cDay%10],1,UpLine,NoUnderLine);
. y* R. m# z5 h7 t, `/ N6 b% O/ y# n) j' M% o& ^
         hz_disp(0,104,1,SX[(uint)(2000+SpDat.cYear)%12],1,UpLine,UnderLine);   //生肖
1 J% c9 o' J5 Z
! \$ H/ k9 W5 w# g# F& A. N         hz_disp(2,95,1,TianGan[(uint)(2000+SpDat.cYear)%10],1,NoUpLine,NoUnderLine); //天干
+ v. }* `( b( e& @; j! a9 E, D2 z         hz_disp(2,111,1,DiZhi[(uint)(2000+SpDat.cYear)%12],1,NoUpLine,NoUnderLine);  //地支
0 b9 h, C, b5 f7 V}- d' d6 R4 H/ W$ ?
" S% ^% D- l2 S3 _6 r3 b- I
void LCD_ShowWNL(){          //万年历显示函数
  s; [' Y$ `7 b$ K/ r/ E9 T: S        LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);                 //秒,每秒钟刷新0 ]5 ~& Q3 }/ y6 `
        if(!sys.cSec || State_Set)                                                                     //分,普通模式每分钟刷新
2 N' a- k. n4 O        LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);                 //    设置模式每次刷新
. I$ o, N2 Y, M4 {  u" K! a9 l. q% k- r3 l" }
        if(!sys.cSec && !sys.cMin || State_Set)                                                 //时,普通模式每小时刷新
7 r2 {( N6 h. G6 u; e) ?/ e    LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);     //    设置模式每次刷新# v* `/ g) U# j) @6 v$ g
; }6 e4 x% {' \1 o% q& p
        if(!sys.cSec && !sys.cMin && !sys.cHour || State_Set ){      //公历农历的年、月、日、星期. @5 Q0 _9 \$ m, K- ?9 i, s6 o
                Show_YMD();                                                                                                 //普通模式每天刷新
6 P. c" E7 R8 Y: L( E1 `6 d$ [& M# \                if(State_Set==7) State_Set=0;                                                         //设置模式每次刷新1 Q3 w- C/ _8 ?, X$ r6 b4 S. H" u
        }        
# U2 t& z. |1 m3 F/ Q- ]}
0 D! @. i! W0 P0 f3 B1 b0 ]- H5 H; w3 l9 A% S% s
void CAL_Init(){        //日期初始化函数7 d1 J$ h$ F/ S
        sys.cYear=0x13;        //BCD码表示的日历时间值+ q# i! p3 S5 ~9 W' G
        sys.cMon=0x06;- S% g" X$ ^7 C% ]9 {1 t9 j& j+ U
        sys.cDay=0x030;
7 ~" T9 `- k/ h: t        sys.cHour=0x23;- X$ t; O/ s5 S4 ]+ d
        sys.cMin=0x59;
0 |  y2 l3 z# e4 G        sys.cSec=0x55;6 L3 f7 N# e# o% c
        sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);
7 A* C3 J+ t% }# o! b  F}2 x9 }; ^7 g1 W4 b/ [. U' b
! l, F/ h" ]8 X" y) ~' `" v
void SFR_Init(){                 //定时器1初始化函数
) d/ X3 `2 ~4 R" U- l5 ^        Flash_Flag=FALSE;- T/ i+ c4 a! x
        TMOD=0x11;
. b1 R% d3 C2 D& H        ET1=1;
! }& w! U& C9 q: F5 x% Q# \        TH1= (-10000)/256;
+ o) f; w8 m8 p# g* @        TL1= (-10000)%256;( D: z4 k9 p* g! D. }
        EA=1;! [  u8 |  X5 _+ [+ Y. ]
}( Y' @' ]: T" W8 X; O6 m2 S

4 g3 E" G) u4 [: B- fvoid GUI_Init(){         //LCD图形初始化函数3 q7 F0 c+ c1 |6 n  G: r9 R+ `2 C* Y
         LCD12864_init();
: R3 `+ c5 j8 T& W, K8 `         ClearLCD();
( F! [1 k& r* r$ ~2 |. x5 ?% }         Rect(0,0,127,63,1);   //描绘框架: x, l. ]$ q3 Q  d
         Line(62,0,62,62,1);
5 K6 M& v) u1 Z  q8 r         Line(0,48,127,48,1);
- N' ?8 j* D: j6 E2 Q         Line(0,15,127,15,1);; D8 v2 u: }* ?, `- d  p+ l" _
         Line(24,15,24,48,1);: `% c' C! ?) N1 ?& i
         Line(63,32,128,32,1);0 P# J+ B) D. k% j6 l: e2 v
$ X. ^6 y- u" M' ^" v" P0 w
         SetTime(sys);                                   //设置时间; L) t2 `& h5 f" X& L6 t
         GetTime(&sys);                                   //获得时间
( w# [) |4 `, p$ e  N
2 N$ ~2 m4 t4 S/ M8 J& u         Show_YMD();
% u0 X9 r+ A; K         LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);5 `. [0 x0 Y" Y. t' x
         en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);
2 R7 w+ K/ m3 H  `6 p         LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); 6 y& m. [# ^6 o7 @
         en_disp(6,79,1,Asc,":",1,UpLine,UnderLine);         2 r4 }6 z" s$ w$ G
     LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);
9 `, D- J5 b2 Z1 @3 y5 v, R4 ]: Z9 n
1 p2 |0 ?# d3 }         hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine);           //"农"7 T; _1 M( R5 ~& Y' H2 G
         hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine);           //"历"9 {" V2 L+ b' l# W
         hz_disp(4,79,1,uMod[1],1,UpLine,NoUnderLine);                           //"月"
2 n  [0 J: H; C0 Y2 E+ ]}' w0 Z/ N- F' b0 {5 S; ~

) ~! l/ b8 n) @. v- Hvoid DecToBCD(){   //二-十进制转换函数
4 s( }3 p; n, z; m" Z; H1 @) G( f        sys.cHour=(((sys.cHour)/10)<<4)+((sys.cHour)%10);
, L  W9 a9 b" j3 J* d  N        sys.cMin=(((sys.cMin)/10)<<4)+((sys.cMin)%10);8 }6 a+ U# R1 @" A0 s
        sys.cSec=((sys.cSec/10)<<4)+((sys.cSec)%10);2 f; I3 u8 Y( S# B! w' k& K. s
          sys.cYear=((sys.cYear/10)<<4)+((sys.cYear)%10);' O; S; T# Z% ]% @9 a
        sys.cMon=((sys.cMon/10)<<4)+((sys.cMon)%10);
0 j; T+ i, ~+ |6 V        sys.cDay=((sys.cDay/10)<<4)+((sys.cDay)%10);
/ c  S$ s  S( ~& @! A  l}
3 Z! ^4 r+ u4 k. M) C5 v
1 ?: C& e3 l8 Pvoid Time_Set(){   //时间设置函数! s+ G9 l2 Y8 W
        if(State_Flag){                                        //设置键按下
/ m4 Y( B0 h; c, b. U' E                State_Flag=FALSE;
8 A0 C8 D7 r, g$ E$ L                State_Set++;2 t+ t$ ?5 o, v8 y" A! ]/ l
                if(State_Set==8) State_Set=0;3 z1 `0 @' S, U' y& `6 r6 H: g) h
        }$ E$ F+ j4 L$ t2 r
( r5 R8 }8 X7 `/ y" n1 B
        Hour_Flag=TRUE;Min_Flag=TRUE;Sec_Flag=TRUE;" J) u& H9 M) z. X+ S, S" z  M
    Year_Flag=TRUE;Mon_Flag=TRUE;Day_Flag=TRUE;
) b8 l; H6 x  g/ n
7 _$ A# B; k& `8 \        switch(State_Set){              //设置类型
* W8 @5 u! u# x5 S* E                        case 0:                 //无设置
  U9 k5 k' }# M  a& T$ L                                break;
9 h5 B& }9 f8 J6 l; z                        case 1:                                        //设置时  N% Z/ T9 T- W
                                Hour_Flag=FALSE;
7 \( e1 j9 B4 {/ ~" I% X$ o4 v- y                                break;
8 V/ {1 ?+ `" m2 @. f( r; Y                        case 2:                                           //设置分* U+ j" `2 k2 ?7 C6 p
                                Min_Flag=FALSE;
2 y- ]* h1 ~" y& x' g) L                                break;
8 O* r" b6 _" c- ?: I6 l0 E! u$ b$ y                        case 3:                                         //设置秒
' f1 N; Q4 D( t3 N                                Sec_Flag=FALSE;: `1 K8 A. Z: @) J( A" h1 Z
                                break;" S/ a# M5 N9 Q1 {" x
                        case 4:                                        //设置天! y& ?  e8 ~3 O# e" y0 Y
                                 Day_Flag=FALSE;% g+ v/ G" w6 s& w$ G
                                break;& h! Y; Q2 w) s& O% e
                        case 5:
. v' Y! g6 {6 ?. ^                                 Mon_Flag=FALSE;     //设置月5 K" V+ i- F. p5 X( {
                                break;, k, ^; S% m/ y' ]3 Y8 X
                        case 6:
9 _7 V  v# y$ @$ c                                 Year_Flag=FALSE;        //设置年( `7 Y5 G# |1 b' l' P  \
                            break;
% ~# ]( Z7 q3 ~1 Q2 x                        case 7:                                        //无动作,设置此值为让"年"的反白消失。
$ T* @! D! H7 F  S; b( @8 }! m* d                                break;" X6 Y0 O: t, B  n5 c, }5 N
          }           5 v# G' t5 s7 i* r

  H8 T2 q4 F! l5 i  Z2 b4 ?7 [        if(Inc_Flag){                                        //加键被按下
% _  b5 H) ?+ k+ u% F7 a% F$ C( [                Inc_Flag=FALSE;
/ H3 D! \. m5 ^) M/ @                switch(State_Set)                {
  o+ c, j4 g$ U0 e                        case 0:0 p% Q+ d5 @: U! I" m# M- W  H
                                break;! X3 e& M8 U/ U
                        case 1:                                            //小时加
& H6 y7 F  Z, b* q6 P: q7 @                                sys.cHour++;
+ S6 Q. n& q- v$ d- u5 M3 z                                (sys.cHour)%=24;
' o4 q1 m# P4 M; Z                                break;
1 G8 z0 x! Z8 n                        case 2:                                            //分加1
( u+ f% g1 V2 T5 S                                sys.cMin++;9 }' |6 |: L1 ]: b8 \8 {
                                sys.cMin%=60;
/ E) N: L. U4 L) O# o; T                                break;& j$ W9 K( k1 Q% S( X8 E
                        case 3:                                         //秒加1
  K* }& A4 W* s" z* C( b                            sys.cSec++;
. D- U$ f; |0 r$ W7 O4 `( q                                sys.cSec%=60;7 G3 @) K0 Q8 m: C5 o/ U$ @
                                break;" d! ^7 D0 o2 d4 j
                        case 4:                                         //天加1
% D' o/ n  v) k                                (sys.cDay)=(sys.cDay%Mon2[YeaRFlag(sys.cYear)][sys.cMon])+1;                  
2 G7 L! b0 s+ t4 j( y$ b7 a6 U& R2 N                                break;* F1 V- i1 @, Q0 t/ c5 H' R1 q
                        case 5:                                         //月加1
1 Z2 X, ~/ X; `! k0 q( ^/ \9 F  h0 c                                sys.cMon=(sys.cMon%12)+1;7 g6 s8 P+ p2 @8 |! ~
                                break;
; @! m0 {. S6 s- Q1 v3 R( c                        case 6:
3 c+ Q  q$ B+ z3 j- P: D2 L: L& U  Z                                sys.cYear++;                 //年加10 P7 S! c' X! q  s1 v- v  z
                                sys.cYear=sys.cYear%100;
# g% z/ ~2 I# a6 w1 v3 X6 T                        break;! z; r2 y) F/ h, S7 u/ O
                  }        
* A; v. T* u; _+ }5 W4 A# R+ n                DecToBCD();                                        //转为BCD数# l* S/ }3 S6 m& M
                sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);    //算出星期
, s( K5 S- Y, V- ]& N, P                SetTime(sys);                            //存入DS1302
& ]+ q; S( {& g% ]# J        }
5 o! i, C6 ]& \4 K4 U% I" |' G; A. q8 V& ^: Z$ Q
        if(Dec_Flag){                                         //减键按下- J, |4 x' N, D) c) ~( T
                Dec_Flag=FALSE;
  y6 Q0 g& e; n( V# [                switch(State_Set){) l3 B- P# Z( X: C( x% A- K
                        case 0:- a' w8 N8 \" c% g: T2 Z7 N
                                break;7 U" i4 ~5 Z/ C( D, L
                        case 1:           
- N6 M5 r# l# x6 b                                sys.cHour=(sys.cHour+23)%24;  //时减15 v0 ]  K* Q( K% V; m
                                break;7 q3 w/ ?" V5 c) o3 H8 R" L# i# b
                        case 2:                                                            //分减1
6 s1 _% O4 t1 W4 _                                sys.cMin=(sys.cMin+59)%60;& P& d3 X; A$ u$ v4 u4 g
                                break;6 |" p# A/ W6 U0 h
                        case 3:                                                          //秒减1
; Y9 L, N. P: z+ m- B( M2 N                                sys.cSec=(sys.cSec+59)%60;
2 H/ |/ W9 E# v# m0 \                                break;
% z, [: |/ q/ p8 u: B                        case 4:                                                          //天减1# U  K) n3 _0 R; x; _' t
                                sys.cDay=((sys.cDay+Mon2[YearFlag(sys.cYear)][sys.cMon]-1)%Mon2[YearFlag(sys.cYear)][sys.cMon]);                  
' [- ]* m! q7 g" G6 |                                if(sys.cDay==0) sys.cDay=Mon2[YearFlag(sys.cYear)][sys.cMon];( v0 h3 U) C$ `! x5 J( u( m8 q6 {) e
                                break;
( ?' N: C' r7 a& T* v                        case 5:                                                          //月减1! L) }- q3 a% ~2 g3 d  s; D* g4 \& L7 O
                                sys.cMon=(sys.cMon+11)%12;
9 Q. v: J  a: O, j                                if(sys.cMon==0) sys.cMon=12;
9 Q+ l& Q4 n3 l% l& @" ?0 N                                break;+ B0 q1 K) q/ l7 y4 h
                        case 6:                                                          //年减1
7 E* W$ O4 M" l- s; `0 ]/ l                                sys.cYear=(sys.cYear+99)%100;
7 u5 Z: a: i1 v& ~9 ?" N) Y9 y                                break;
4 l( R' Q. c( B  I; d                  }        
0 y) @% A0 m: O2 b7 R1 M                DecToBCD();3 K, V: p( o! w9 c, \( j6 ]- T" h
                sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);              : ]- ]) e8 v. k! U% J6 n, J
                SetTime(sys);        
. L5 t$ [7 I: P. s3 ?, }, l        }" n8 w! X# {$ {
}$ C6 A- W: Y" S3 h: r
/ q7 D: b( k3 Z- b$ P5 q2 V% u0 k
void  main(){        //主函数$ l+ V: z. g  Q, b) r; ?% s* J
         SFR_Init();
3 b# A7 p6 _/ K4 t* _- p3 p) }         CAL_Init();/ ?/ i+ n% t3 v
         GUI_Init();
3 o# r1 ~" G& |6 C/ }3 b2 w4 Q( I         TR1=1;3 Y) d7 E' q$ C7 k+ t
         while(1){9 a% T' O: X) L$ g- T
                GetTime(&sys);                //获得时间1 P5 F9 U( g: u  H* E
                LCD_ShowWNL();                //显示万年历
, T  L  Z4 d) P% Q1 x                Time_Set();         //时间设置
3 y6 v8 @$ G) S% u) x- J' S1 t         }        1 s9 {  ~" M. J6 Q3 \% j- ^
}: W/ _3 R# d1 Y3 @. s( c# a
$ f! m& R( G  D- z$ o5 X
void timer1() interrupt  3 {  //定时器1中断服务函数& m' R4 ^! N9 L) b
        TH1= (-10000)/256;
+ w* w; u0 R' O! P6 `6 b$ h        TL1= (-10000)%256;
2 a/ o- m& w( c. _8 e, E0 _        keyinput();                                        //读取按键
+ p5 n0 x: A4 k6 ~$ J" O1 [( J        if (keyvalue&0x10){        
  g& r0 Z' L( S5 a2 a1 d8 s                State_Flag=TRUE;" W: \6 E. f1 U; K2 P& n
                keyvalue &= 0xef;                //清键值,保证一直按下只执行一次按键动作。
+ K2 X$ d) D9 W, r1 U        }        " d. p4 K( ]2 Y  a' W; H
        if (keyvalue&0x20 ){                //加
4 X3 f$ x/ T) ?                Inc_Flag=TRUE;
# L( z8 O5 M& n* e                keyvalue &= 0xdf;                //清键值,保证一直按下只执行一次按键动作。9 e: E; U, M; v( b1 W* y
        }        
) R& O$ L; f6 b4 }  H        if (keyvalue&0x40){                        //减3 r6 w2 M2 d6 v- U% g* e  s; j  s
                Dec_Flag=TRUE;
  l; F* K- V& u9 ^/ u                keyvalue &= 0xbf;                //清键值,保证一直按下只执行一次按键动作。9 a- M% O9 F, ~
        }
" N3 i) |# L# T. O
  u' ~+ u/ y3 {; J" w# K% b}
: R3 I. K, B9 [1 U
; w1 ]4 T+ [- ^% N. ^  n; r5 N下载:
1 @1 F% ]) u: t4 S# t3 u
游客,如果您要查看本帖隐藏内容请回复

( N' \, x1 C/ C% s
6 z( G$ V! O2 C4 Q/ _) M
  • TA的每日心情
    开心
    2025-5-6 15:27
  • 签到天数: 100 天

    [LV.6]常住居民II

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

    该用户从未签到

    3#
    发表于 2020-7-19 23:06 | 只看该作者
    1111111111111
    - B2 @( U9 a! S  J8 w6 b
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-6 21:06 , Processed in 0.187500 second(s), 27 queries , Gzip On.

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

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

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