51单片机仿真+程序+pcb文件下载:
点阵时钟.rar
(590.57 KB, 下载次数: 139)
- // A B C D 对应P2.0; P2.1 ; P2.2; P2.3
- //------------------------------------
- #include <reg52.h>
- #include <def.h>
- #include <word_s.h>
- #include <ds1302.h>
- #include <ds18b20.h>
- void Put_Wdispram(uchar code *WORDS[][8]) //,uchar first_word
- {
- uchar i;
- disword[0] = &NO_WORDS[12];
- for(i=1;i<25;i++)
- {
- disword[i] = &WORDS[i-1]; //first_word+
- }
- }
- void Put_Hdispram()
- {
- uchar i;
- for(i=0;i<10;i++)
- {
- h_dispram[i] = *(disword[i+start_word]+hang); //
- }
- }
- void Move_Left()
- {
- uchar i;
- for(i=0;i<9;i++)
- {
- h_dispram[i] = (h_dispram[i] << (move_times)) | (h_dispram[i+1] >> (8-move_times));
- }
- }
- void Move_Right()
- {
- uchar i;
- for(i=9;i>0;i--)
- {
- h_dispram[i] = (h_dispram[i] >> (move_times)) | (h_dispram[i-1] << (8-move_times));
- }
- }
- void RL_Move(){
- //
- switch(MSG_MV){
- case MSG_MV_L: //左移
- Move_Left();
- break;
- case MSG_MV_R: //右移
- Move_Right();
- break;
- case MSG_NONE:
- break;
- default:
- break;
- }
- }
- void Move_Up(){
- //
- uchar i,j,m,n;
- for(m=0;m<16;m++) //m 屏数
- {
- for(n=0;n<8;n++)
- {
- for(j=0;j<16-m;j++) //上移
- {
- for(i=0;i<10;i++) //i 行 字节
- {
- h_dispram[i] = *(disword[i]+m+j); // m+j
- }
- Show_Line();
- // delay(); //看需要
- }
- for(j=16-m;j<16;j++)
- {
- for(i=0;i<10;i++)
- {
- h_dispram[i] = *(disword[i+8]+m+j-16); //m+j-16
- }
- Show_Line();
- // delay(); //看需要
- }
- }
- }
- }
- void Move_Down()
- {
- uchar i,j,m,n;
- for(m=0;m<16;m++)
- {
- for(n=0;n<8;n++)
- {
- for(j=0;j<m;j++)
- {
- for(i=0;i<10;i++)
- {
- h_dispram[i] = *(disword[i+8]+15-m+j); //
- }
- Show_Line();
- //delay(); //看需要
- }
- for(j=m;j<16;j++)
- {
- for(i=0;i<10;i++)
- {
- h_dispram[i] = *(disword[i]-m+j); //0x00
- }
- Show_Line();
- //delay(); //看需要
- }
- }
- }
- }
- void UD_Move(){
- //
- switch(MSG_MV){
- case MSG_MV_U: //上移
- Move_Up();
- break;
- case MSG_MV_D: //下移
- Move_Down();
- break;
- case MSG_NONE:
- break;
- default:
- break;
- }
- }
- void Show_Line(){
- uchar m;
- OE=1;
- for(m =0;m<8;m++)
- {
- SendData = h_dispram[m+1];
- SendByte();
- }
- delay(); //
- RowsCan(); //行扫描
- STB = 0;
- STB = 1; //上升沿数据锁存
-
- OE = 0;
-
- }
- void Show_sWord(){
- int m,i;//
- hang = 0;
- for(m=0;m<14;m++){
- for(i=0;i<16;i++){
- Put_Hdispram(); //把第i行放入行缓冲
- Show_Line();
- //delay(); //看需要
- }
-
- }
- }
- void Show_Move_Word(uchar code *WORDS[][8]){
- int m,i;
- while(1){
- for(m=0;m<6;m++){ //若要上下移动 m=16
- //hang = 0;
- for(i=0;i<16;i++){
- Put_Hdispram(); //把第i行放入行缓冲
- RL_Move(); //是否要左右移动
- Show_Line();
- //delay(); //看需要
- }
- //UD_Move(); //是否要上下移动
- }
- //========================================
- //测试左移右移 切换时有跳变!!
- // if(MSG_MV){
- move_times++;
- if((move_times == 9) && (MSG_MV == MSG_MV_L)){
- move_times = 1;
- Put_Wdispram(WORDS);
- start_word++;
- switch(STATE){
- case STA_gTEMP:
- Read_Temperature();
- Disp_Temperature(); //
- Put_gTEMP(); //
- if(start_word > (sizeof(TMP_WORDS)/16 - 8))
- MSG_MV = MSG_MV_R;
- break;
- case STA_gWORD:
- if(start_word > (sizeof(MY_WORDS)/16 - 8))
- MSG_MV = MSG_MV_R;
- default:
- break;
- }
- if(start_word > (sizeof(TMP_WORDS)/16 - 4))
- MSG_MV = MSG_MV_R;
- }
- else if((move_times == 9) && (MSG_MV == MSG_MV_R)){
- move_times = 1;
- Put_Wdispram(WORDS); //
- start_word-- ;
- switch(STATE){
- case STA_gTEMP:
- Disp_Temperature(); //
- Put_gTEMP();
- break;
- default:
- break;
- }
- if(start_word < 1){
- MSG_MV = MSG_MV_L;
- return;
- }
- }
- // }
- }
- }
- void Show_All_Word(){
- int m,i;
- //MSG_MV = MSG_MV_L;
- for(start_word = 0;start_word < 8;start_word++){
- for(move_times = 0; move_times < 8;move_times++){
- for(m=0;m<4;m++){ //若要上下移动 m=16
- for(i=0;i<16;i++){
- Put_Hdispram(); //把第i行放入行缓冲
- RL_Move(); //是否要左右移动
- Show_Line();
- }
- }
- }
- }
- }
-
-
- //------------------------------------
- //----------字发送子程序-----------
- void SendByte(void)
- {
- uchar m;
- for(m=0;m<8;m++)
- {
- CLK = 0;
- Red = (SendData & 0x80); //红屏显示
- // Greed = (SendData & 0x80); //绿屏显示
- SendData =SendData<<1;
- CLK = 1; //移位时钟上升沿
- }
- }
- //-----------------------------------
- //----------行扫描子程序-------------
- void RowsCan(void)
- {
- P3 = P3 & 0xf0;
- P3 = (P3 | hang)<<1;
- hang++;
- if (hang>=16)
- {
- hang =0x00;
- }
- }
- void initial(void)
- {
- OE = 1;
- Red = 1;
- Greed = 1;
- SendData = 0x00;
- hang = 0x00;
-
- }
- void Put_Adispram(uchar a){
- uchar i;
- //第一屏"今天是:"
- disword[a+1] = &NO_WORDS[12][0]; //空格
- for(i=0;i<6;i++)
- disword[a+i+2] = &TIME_WORDS[i][0];
- disword[a+8] = &NO_WORDS[11][0]; //":"
- //第二屏
- //disword[4] = &TIME_WORDS[];
-
- }
-
- //将年份放入到显示缓存
- //需要参数:缓冲区首地址下标
- void Put_Ydispram(uchar i){
- disword[i+1] = &NO_WORDS[12][0];
- if(Time.Year < 30 && !HIDE){
- disword[i+2] = &NO_WORDS[2][0];
- disword[i+3] = &NO_WORDS[0][0];
- }
- else if(!HIDE){
- disword[i+2] = &NO_WORDS[1][0];
- disword[i+3] = &NO_WORDS[9][0];
- }
- disword[i+4] = &NO_WORDS[Time.Year>>4][0];
- disword[i+5] = &NO_WORDS[Time.Year&0x0f][0];
- disword[i+6] = &TIME_WORDS[6][0];
- disword[i+7] = &TIME_WORDS[7][0]; //年
- disword[i+8] = &NO_WORDS[12][0];
- }
- //将星期放入到显示缓存
- //参数:缓冲区首地址下标
- void Put_Kdispram(uchar i){
- disword[i+1] = &NO_WORDS[12][0];
- disword[i+2] = &TIME_WORDS[12][0];
- disword[i+3] = &TIME_WORDS[13][0]; //星期
- disword[i+4] = &TIME_WORDS[14][0];
- disword[i+5] = &TIME_WORDS[15][0];
- if(STATE== STA_CHG &&HIDE){
- disword[i+6] = &NO_WORDS[12][0]; //
- disword[i+7] = &NO_WORDS[12][0]; //
- }
- else{
- disword[i+6] = &WEEK_WORDS[Time.Week*2-2][0]; //
- disword[i+7] = &WEEK_WORDS[Time.Week*2-1][0]; //
- }
- disword[i+8] = &NO_WORDS[12][0];
- }
- //将日期放入到显示缓存
- //参数:缓冲区首地址下标
- void Put_Ddispram(uchar i){
- disword[i+1] = &NO_WORDS[Time.Month>>4][0]; //小时高位
- disword[i+2] = &NO_WORDS[ Time.Month&0x0f][0]; //小时地位
- disword[i+3] = &TIME_WORDS[8][0]; //-
- disword[i+4] = &TIME_WORDS[9][0]; //分钟高位
- disword[i+5] = &NO_WORDS[ Time.Day>>4][0]; //分钟地位
- disword[i+6] = &NO_WORDS[Time.Day&0x0f][0]; //-
- disword[i+7] = &TIME_WORDS[10][0]; //秒高位
- disword[i+8] = &TIME_WORDS[11][0]; //秒地位
- }
- //将时间放入到显示缓存
- //参数:缓冲区首地址下标
- void Put_Tdispram(uchar i){
- disword[i+1] = &NO_WORDS[Time.Hour>>4][0]; //小时高位
- disword[i+2] = &NO_WORDS[ Time.Hour&0x0f][0]; //小时低位
- disword[i+3] = &NO_WORDS[ 11 ]; //-
- disword[i+4] = &NO_WORDS[Time.Minute>>4][0]; //分钟高位
- disword[i+5] = &NO_WORDS[ Time.Minute&0x0f][0]; //分钟低位
- disword[i+6] = &NO_WORDS[ 11 ]; //-
- disword[i+7] = &NO_WORDS[Time.Second>>4][0]; //秒高位
- disword[i+8] = &NO_WORDS[ Time.Second&0x0f][0]; //秒低位
- }
- //===================================
- //*****关于温度检测部分*****
- void Put_gTEMP(){
- // uchar i;
- // Put_Wdispram(TMP_WORDS,0);
- disword[6] = &NO_WORDS[temp_ram[3]]; //百位
- disword[7] = &NO_WORDS[temp_ram[2]]; //十位
- disword[8] = &NO_WORDS[temp_ram[1]]; //个位
- disword[10]=&NO_WORDS[temp_ram[0]]; //小数
- disword[12] = &NO_WORDS[12]; //空格
- disword[13] = &NO_WORDS[12]; //空格
- //
- }
- void Put_sTEMP(uchar i){
- disword[i+0] = &NO_WORDS[12]; //空格
- disword[i+1] = &NO_WORDS[12];//&NO_WORDS[temp_ram[3]][0]; //百位
- disword[i+2] = &NO_WORDS[temp_ram[2]]; //十位
- disword[i+3] = &NO_WORDS[temp_ram[1]]; //个位
- disword[i+4] = &TMP_WORDS[8][0]; //小数点
- disword[i+5] = &NO_WORDS[temp_ram[0]]; //小数
- disword[i+6] = &NO_WORDS[12]; //空格
- disword[i+7] = &TMP_WORDS[10];
- disword[i+8] = &NO_WORDS[12]; //空格
- }
- void Put_Cpyrt(uchar i){
- uchar m;
- for(m=0;m<8;m++)
- disword[i+1+m] = &CPYRT_WORDS[m];
- }
- void Show_Cpyrt()
- {
- uchar i;
- for(i=1;i<9;i++)
- disword[i] = &NO_WORDS[12];
- Put_Cpyrt(8);
- Move_Up();
- Put_Cpyrt(0);
- Put_Tdispram(8);
- Move_Down();
- }
-
- //========================
- //参数i:放入第几屏缓存
- //参数j:诗歌第几页
- //========================
- void Put_Song(uchar i,uchar j){
- uchar m;
- for(m=0;m<8;m++)
- disword[i+1+m] = &SONG_WORDS[j+m];
- }
- //显示诗歌
- void Show_Song(){
- uchar i;
- Put_Song(8,0);
- Move_Up();
- for(i=0;i<3;i++){
- Put_Song(0,i*8);
- Put_Song(8, (i+1)*8);
- Move_Up();
- }
- Put_Song(0, 3*8);
- Put_Tdispram(8);
- Move_Up();
- }
-
- //======================
- //*滚动显示所有信息*
- //======================
- void Show_All_Info(){
- Put_Adispram(8);
- Move_Down(); //切换效果
-
- Put_Adispram(0);
- Put_Ydispram(8); //XXXX年
- Show_All_Word();
-
- Put_Ydispram(0); //XXXX年
- Put_Ddispram(8);
- Show_All_Word();
- Put_Ddispram(0);
- Put_Kdispram(8);
- Show_All_Word();
-
- Read_Temperature();
- Disp_Temperature();
- Put_Kdispram(0);
- Put_Tdispram(8);
- Show_All_Word();
- Read_Temperature();
- Disp_Temperature();
- Put_Tdispram(0);
- Put_sTEMP(8);
- Show_All_Word();
- Read_TIME();
- Put_sTEMP(0);
- Put_Tdispram(8);
- Move_Up();
-
- }
-
- //=================
- //****校时函数****
- //=================
- void Change_Time(){
- //
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- TMP_TIME = Time.Hour;
- TR1 = 1; //开启定时器1闪烁
- do{
- switch(CHANGE){
- case CHG_HOUR:
- case CHG_MIN:
- case CHG_SEC:
- Put_Tdispram(0);
- break;
- case CHG_MON:
- case CHG_DAY:
- Put_Ddispram(0);
- break;
- case CHG_WEEK:
- Put_Kdispram(0);
- break;
- case CHG_YEAR:
- Put_Ydispram(0);
- break;
- default:
- break;
- }
- Show_sWord();
- //if(!key_done)
- // ReadKey1();
- }while(ReadKey1() != KEY3_S && exit < 10); //MSG_KEY
- Change_obj(); //保证退出校时无隐身
- HIDE = 0;
- key_done = 0;
- //key_done = 1; //按键事件处理完成
- TR1 = 0; //关闭定时器1闪烁
-
- }
- //==================
- //****对象切换****
- //==================
- void Change_obj(){
- switch(CHANGE){
- case CHG_HOUR:
- if(Time.Hour == 0xcc)
- Time.Hour = TMP_TIME;
- TMP_TIME = Time.Minute;
- break;
- case CHG_MIN:
- if(Time.Minute == 0xcc)
- Time.Minute = TMP_TIME;
- TMP_TIME = Time.Second;
- break;
- case CHG_SEC:
- if(Time.Second == 0xcc)
- Time.Second = TMP_TIME;
- TMP_TIME = Time.Month;
- break;
- case CHG_MON:
- if(Time.Month == 0xcc)
- Time.Month = TMP_TIME;
- TMP_TIME = Time.Day;
- break;
- case CHG_DAY:
- if(Time.Day == 0xcc)
- Time.Day = TMP_TIME;
- TMP_TIME = Time.Week;
- break;
- case CHG_WEEK:
- if(Time.Week == 0xcc)
- Time.Week = TMP_TIME;
- TMP_TIME = Time.Year;
- break;
- case CHG_YEAR:
- if(Time.Year == 0xcc)
- Time.Year = TMP_TIME;
- TMP_TIME = Time.Hour;
- break;
- default:
- break;
- }
- }
- //==================
- //****加加函数****
- //功能: 0x19 ++ =0x20
- //==================
- uchar Add_num(char *num){
- ++(*num);
- if(((*num) & 0x0f) == 0x0a){
- *num += 0x10;
- *num &= 0xf0;
- }
- return *num;
- }
- //==================
- //****校时加加****
- //==================
- void Add_Time(){
- switch(CHANGE){
- case CHG_HOUR:
- if(HIDE){
- if(Add_num(&TMP_TIME) == 0x24)
- TMP_TIME= 0;
- }
- else{
- if(Add_num(&Time.Hour) == 0x24)
- Time.Hour = 0;
- }
- break;
- case CHG_MIN:
- if(HIDE){
- if(Add_num(&TMP_TIME) == 0x60)
- TMP_TIME= 0;
- }
- else{
- if(Add_num(&Time.Minute) == 0x60)
- Time.Minute= 0;
- }
- break;
- case CHG_SEC:
- if(HIDE){
- if(Add_num(&TMP_TIME) == 0x60)
- TMP_TIME= 0;
- }
- else{
- if(Add_num(&Time.Second) == 0x60)
- Time.Second = 0;
- }
- break;
- case CHG_MON:
- if(HIDE){
- if(Add_num(&TMP_TIME) == 0x13)
- TMP_TIME= 0;
- }
- else{
- if(Add_num(&Time.Month) == 0x13)
- Time.Month= 1;
- }
- break;
- case CHG_DAY:
- if(HIDE){
- if(Add_num(&TMP_TIME) == 0x32)
- TMP_TIME= 0;
- }
- else{
- if(Add_num(&Time.Day) == 0x32)
- Time.Day= 0;
- }
- break;
- case CHG_WEEK:
- if(HIDE){
- if(Add_num(&TMP_TIME) == 0x08)
- TMP_TIME= 1;
- }
- else{
- if(Add_num(&Time.Week) == 0x08)
- Time.Week= 1;
- }
- break;
- case CHG_YEAR:
- if(HIDE){
- if(Add_num(&TMP_TIME) == 0xa0)
- TMP_TIME = 0;
- }
- else{
- if(Add_num(&Time.Year) == 0xa0)
- Time.Year = 0;
- }
- //if(Add_num(&Time.Year) == 0x24)
- // Time.Year= 0;
- break;
- default:
- break;
- }
- }
- //==================
- //****减减函数****
- //功能: 0x20 -- =0x19
- //==================
- uchar Cut_num(char *num){
- --(*num);
- if(((*num)&0x0f) == 0x0f){
- //*num -= 0x10;
- *num &= 0xf9;
- }
- //if((*num == 0xf9)
- //*num = 0x99;
- return *num;
- }
- //==================
- //****校时减减****
- //==================
- void Cut_Time(){
- switch(CHANGE){
- case CHG_HOUR:
- if(HIDE){
- if(Cut_num(&TMP_TIME) == 0xf9)
- TMP_TIME= 0x23;
- }
- else{
- if(Cut_num(&Time.Hour) == 0xf9)
- Time.Hour = 0x23;
- }
- break;
- case CHG_MIN:
- if(HIDE){
- if(Cut_num(&TMP_TIME) == 0xf9)
- TMP_TIME= 0x59;
- }
- else{
- if(Cut_num(&Time.Minute) == 0xf9)
- Time.Minute= 0x59;
- }
- break;
- case CHG_SEC:
- if(HIDE){
- if(Cut_num(&TMP_TIME) == 0xf9)
- TMP_TIME= 0x59;
- }
- else{
- if(Cut_num(&Time.Second) == 0xf9)
- Time.Second = 0x59;
- }
- break;
- case CHG_MON:
- if(HIDE){
- if(Cut_num(&TMP_TIME) == 0xf9)
- TMP_TIME= 0x12;
- }
- else{
- if(Cut_num(&Time.Month) == 0xf9)
- Time.Month= 0x12;
- }
- break;
- case CHG_DAY:
- if(HIDE){
- if(Cut_num(&TMP_TIME) == 0xf9)
- TMP_TIME= 0x31;
- }
- else{
- if(Cut_num(&Time.Day) == 0xf9)
- Time.Day= 0x31;
- }
- break;
- case CHG_WEEK:
- if(HIDE){
- if(Cut_num(&TMP_TIME) == 0xf9)
- TMP_TIME= 0x7;
- }
- else{
- if(Cut_num(&Time.Week) == 0xf9)
- Time.Week= 0x7;
- }
- break;
- case CHG_YEAR:
- if(HIDE){
- if(Cut_num(&TMP_TIME) == 0xf9)
- TMP_TIME= 0x99;
- }
- else{
- if(Cut_num(&Time.Year) == 0xf9)
- Time.Year = 0x99;
- }
- //if(Cut_num(&Time.Year) == 0x99)
- // Time.Year= 0;
- break;
- default:
- break;
- }
- }
- //======按键======
- uchar ReadKey(){
- //
- if(!key_done){
- switch(MSG_KEY){
- case KEY0_S:STATE = STA_sTIME;
- break;
- case KEY1_S:STATE = STA_gWORD; //STA_sWEEK
- break;
- case KEY2_S:STATE = STA_gTEMP;
- break;
- case KEY3_S:STATE = STA_gTIME;
- break;
- case KEY0_L:STATE = STA_CHG;
- break;
- case KEY1_L:STATE = STA_SONG;
- break;
- case KEY2_L:STATE = STA_gTEMP;
- break;
- case KEY3_L:STATE = STA_gWORD; //STA_sTIME
- break;
- default: break;
- }
- }
- key_done = 1; //按键事件处理完成
- return MSG_KEY;
- }
- //=======================
- //****校时按键处理****
- //=======================
- uchar ReadKey1(){
- //
- if(!key_done){
- switch(MSG_KEY){
- case KEY0_S: //切换校时对象
- case KEY0_L:
- exit = 0;
- TR1 = 0; //关闭定时器1闪烁
- Change_obj();
- if(CHANGE++ >= CHG_YEAR)
- CHANGE = CHG_HOUR;
- TR1 = 1; //开启定时器1闪烁
- break;
- case KEY1_S: //加加
- case KEY1_L:
- exit = 0;
- TR1 = 0; //关闭定时器1闪烁
- Add_Time();
- TR1 = 1; //开启定时器1闪烁
- break;
- case KEY2_S: //减减
- case KEY2_L:
- exit = 0;
- TR1 = 0; //关闭定时器1闪烁
- Cut_Time();
- TR1 = 1; //开启定时器1闪烁
- break;
- case KEY3_L:
- case KEY3_S:
- return KEY3_S;
- default: break;
- }
- }
- key_done = 1; //按键事件处理完成
- return 0;
- }
- //===========================
- void Tinit(){
- TMOD = 0x11;
- TH0 = 0xD8;
- TL0 = 0xF0;
- TH1 = 0x42;
- TL1 = 0xCA;
- TR0 = 1;
- //TR1 = 1;
- ET0 = 1;
- ET1 = 1;
- EA = 1;
- }
- timer0() interrupt 1{
- TH0 = 0xb1;
- TL0 = 0xe0;
- if(P1 != 0xff) {//若有键按下
- cur_key_val = P1&0x0f; //记录按键值
- if(key_times < 150)
- key_times++;
- else{
- key_keep_times++; //长按连击
- if(key_keep_times >= 10){ //10 1秒连击10次
- key_keep_times = 0;
- MSG_KEY = 0x10 | cur_key_val;
- key_done = 0; //按键事件复位
- }
- }
- }else{
- if(key_times > 2 && key_times < 100 && key_done){ //短按键
- MSG_KEY = cur_key_val;
- key_done = 0; //按键事件复位
- }
- else if(key_times >= 100 && key_done){ //长按键
- MSG_KEY = 0x10 | cur_key_val;
- key_done = 0; //按键事件复位
- }
- key_times = 0;
- key_keep_times = 0;
- }
- }
- timer1() interrupt 3{
- if(STATE == STA_CHG){
- TH1 = 0x42;
- TL1 = 0xCA;
- if(hide_times++ == 8){
- HIDE = 0; //显示
- switch(CHANGE){
- case CHG_HOUR:
- Time.Hour =TMP_TIME;
- break;
- case CHG_MIN:
- Time.Minute = TMP_TIME;
- break;
- case CHG_SEC:
- Time.Second = TMP_TIME;
- break;
- case CHG_MON:
- Time.Month = TMP_TIME;
- break;
- case CHG_DAY:
- Time.Day = TMP_TIME;
- break;
- case CHG_WEEK:
- Time.Week = TMP_TIME;
- break;
- case CHG_YEAR:
- Time.Year = TMP_TIME;
- break;
- default:
- break;
- }
- }
- if(hide_times > 17){
- hide_times = 0;
- HIDE = 1; //隐藏
- exit++;
- switch(CHANGE){
- case CHG_HOUR:
- TMP_TIME = Time.Hour;
- Time.Hour = 0xcc;
- break;
- case CHG_MIN:
- TMP_TIME = Time.Minute;
- Time.Minute = 0xcc;
- break;
- case CHG_SEC:
- TMP_TIME = Time.Second;
- Time.Second = 0xcc;
- break;
- case CHG_MON:
- TMP_TIME = Time.Month;
- Time.Month = 0xcc;
- break;
- case CHG_DAY:
- TMP_TIME = Time.Day;
- Time.Day = 0xcc;
- break;
- case CHG_WEEK:
- TMP_TIME = Time.Week;
- Time.Week = 0xcc;
- break;
- case CHG_YEAR:
- TMP_TIME = Time.Year;
- Time.Year = 0xcc;
- break;
- default:
- break;
- }
- }
- }
- }
- void Compute_State()
- {
- switch(Time.Second)
- {
- case 0x1:
- //STATE = STA_gTIME;
- break;
- case 0x2:
- STATE = STA_sYEAR;
- break;
- case 0x15:
- STATE = STA_sTEMP;
- break;
- case 0x31:
- STATE = STA_sDATE;
- break;
- case 0x40:
- STATE = STA_sWEEK;
- break;
- case 0x50:
- STATE = STA_sTEMP;
- break;
- default:
- break;
- }
- if(Time.Minute%2 == 0 && Time.Second == 0)
- STATE = STA_gTIME;
- if((Time.Minute&0x0f)%5 == 0 && Time.Second == 30)
- STATE = STA_gTEMP;
- if((Time.Minute&0x0f) == 7 && Time.Second == 0)
- STATE = STA_gWORD;
- if((Time.Minute&0x0f) == 3 && Time.Second == 0)
- STATE = STA_SONG;
- }
- //**********************************
- //;---------主程序循环--------------
- //**********************************
- void main()
- {
- int i;
- initial();
- Tinit();
- Init_DS1302();
- Read_TIME(); //读取时间
- Read_Temperature();
- Show_Cpyrt();
- //start_time();
- //write_time1302();
- //MSG_MV = MSG_MV_L;
- //STATE=STA_sTIME;
- STATE=STA_SONG;
- while(1)
- {
- ReadKey();
- switch(STATE){
- case STA_gTIME:
- //添加代码
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- Read_TIME(); //读取时间
- Show_All_Info();
- MSG_KEY = KEY0_S; //回到时间画面
- key_done = 0;
- break;
- case STA_gTEMP:
- Put_Wdispram(TMP_WORDS); //,start_word++
- Read_Temperature();
- Disp_Temperature();
- Put_gTEMP();
- Move_Down();
- Show_Move_Word(TMP_WORDS);
- MSG_KEY = KEY0_S; //回到时间画面
- key_done = 0;
- break;
- case STA_gWORD:
- //添加代码
- Put_Wdispram(MY_WORDS); //,start_word++
- Move_Down();
- Show_Move_Word(MY_WORDS);
- MSG_KEY = KEY0_S; //回到时间画面
- key_done = 0;
- break;
- case STA_sTIME:
- //添加代码
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- Read_TIME(); //读取时间
- Put_Tdispram(0);
- Show_sWord();
- Compute_State();
- break;
- case STA_sDATE:
- //添加代码
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- Read_TIME(); //读取时间
- Put_Ddispram(8);
- Move_Down();
- Put_Ddispram(0);
- for(i=0;i<8;i++)
- Show_sWord();
- Read_TIME();
- Put_Tdispram(8);
- Move_Up();
- MSG_KEY = KEY0_S; //回到时间画面
- key_done = 0;
- break;
- case STA_sWEEK:
- //添加代码
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- Read_TIME(); //读取时间
- Put_Kdispram(8);
- Move_Up(); //Move_Down();
- for(i=0;i<8;i++){
- Read_TIME(); //读取时间
- Put_Kdispram(0);
- Show_sWord();
- }
- Read_TIME();
- Put_Tdispram(8);
- Move_Down(); //Move_Up();
- MSG_KEY = KEY0_S; //回到时间画面
- key_done = 0;
- break;
- case STA_sYEAR:
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- Read_TIME(); //读取时间
- Put_Ydispram(8);
- Move_Down();
- for(i=0;i<8;i++){
- Read_TIME(); //读取时间
- Put_Ydispram(0);
- Show_sWord();
- }
- Read_TIME();
- Put_Tdispram(8);
- Move_Up();
- MSG_KEY = KEY0_S; //回到时间画面
- key_done = 0;
- break;
- case STA_sTEMP:
- //添加代码
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- Read_Temperature();
- Disp_Temperature();
- Put_sTEMP(8);
- Move_Up(); //Move_Down();
- for(i=0;i<8;i++) {
- Read_Temperature();
- Disp_Temperature();
- Put_sTEMP(0);
- Show_sWord();
- }
- Read_TIME();
- Put_Tdispram(8);
- Move_Down(); //Move_Up();
- MSG_KEY = KEY0_S; //回到时间画面
- key_done = 0;
- break;
- case STA_sWORD:
- //添加代码
- break;
- case STA_CHG:
- //校时模式
- Change_Time();
- write_time1302();
- Read_TIME();
- Put_Tdispram(8);
- Move_Up();
- MSG_KEY = KEY0_S;
- break;
- case STA_SONG:
- MSG_MV = MSG_MV_L;
- move_times = 0;
- start_word=0;
- Show_Song();
- MSG_KEY = KEY0_S;
- key_done = 0;
- break;
- default:
- break;
- }
- }
- }
复制代码
|