⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 C51单片机16*2LCD显示驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:


/*******************************************************************************

 * * * 文件名称:Main.c

 * * * 文件说明:此文件是主程序,包括主程序和定时中断、外部中断。

 * * * 创建日期:Pioneer / 2006-01-03

 * * * 修改日期:Pioneer / 2006-1-10

 * * * 注意事项:1 局部变量全用小写,常量全用大写以区分。


*******************************************************************************/

//公共头文件 
#include <GLOBLE.H>
#include <LCD1602.H>
#include <DELAY.H>
#include <DS1302.H>
#include <DS18B20.H>



main()
{
 Lcd_DataPort=0;       //I/O pin initialize      
 Lcd_CE=0;
 Lcd_RS=0;
 Lcd_RW=0;
 Lcd_led=LEDOFF;
 Beep=BEEPOFF;
       
 State=0;              // Register initialize
 State_temp=0;
 KeyValue=0;
 ACC_temp=0;
 IRQ=0;
 Xpos=0;
 Ypos=0;

 VolumeSign=0x04;
 VolumeWater=0x73;
 VolumePower=0x2;

 Temperature_H=0x73;
 Temperature_L=0x06;

 TickSecond=0;
 TickUpdate=0;
 TickMainMenu=0;
 TickFlashLcd=0;
 TickBackLight=0;
 TickBackLight=200;

 AlarmSwitch=0;
 AlarmRunning=0;

 Lcd_led=LEDON;            // Turn on the Led of LCD
 LcdInit();            // LCD initialize
 LcdTest();            // LCD test

 DS1302Write(0x8e,0x00);          // write enable
 ACC_temp=DS1302Read(SECOND);     // start DS1302 for counting
 ACC_temp=ACC_temp&0x7f;
 DS1302Write(SECOND&0xfe,ACC_temp);
 
 TMOD=0x10;             // Timer1 mode1 16bits,counte 50ms.
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;
 ET1=1;
 TR1=1;

 EX0=1;                 // exto interrupt initialize
 EA=1;
 IT0=1;                 // 边沿触发

 Beep=BEEPON;
 delayXms(100);
 Beep=BEEPOFF;



 while(1)
     {
      switch(State)
           {
            case MENUMAIN:
                          switch(KeyValue)
                                {
                                 case NEXT:State=MENUSETTIME;MenuShow(State);break;
                                 case MOVECURSOR:Beep=0;delayXms(30),Beep=1;break;
                                 case INCREASE:  Beep=0;delayXms(30),Beep=1;break;
                                 default:  MenuShow(State);break; 
                                }
                          break;  

            case MENUSETTIME:
                          switch(KeyValue)
                                {
                                 case NEXT:
                                           if(CompareModify())    // Yes modify
                                             {
                                              State_temp=State;
                                              State=MENUMODIFY;
                                              MenuShow(State);
                                              break;
                                             }
                                           else                   // No modify
                                             {                                              
                                              State=MENUSETDATE;
                                              MenuShow(State);
                                              break;
                                             }

                                 case MOVECURSOR:
                                           SetPoint++;
                                           Xpos++;
                                           if(Xpos==13)
                                             {Xpos=14;}
                                           if(Xpos==16)
                                             {Xpos=11;SetPoint=0;}
                                           LcdMoveCursor(Xpos,Ypos);
                                           break;

                                 case INCREASE:
                                           SetCompare(State);
                                           LcdDisBuf1[SetPoint]++;
                                           if(LcdDisBuf1[SetPoint]>Max_temp)
                                             LcdDisBuf1[SetPoint]=Min_temp;
                                           ACC_temp=LcdDisBuf1[SetPoint]|0x30;
                                           LcdUpdateBit(Xpos,Ypos,ACC_temp); 
                                           LcdMoveCursor(Xpos,Ypos);
                                           break;   

                                 default:  MenuShow(State);break; 

                                }
                          break;

            case MENUSETDATE:
                          switch(KeyValue)
                                {
                                 case NEXT:
                                           if( (CompareModify()==1) || (LcdDisBuf1[4]!=LcdDisBuf2[4] ) )    // Yes modify
                                             {
                                              State_temp=State;
                                              State=MENUMODIFY;
                                              MenuShow(State);
                                              break;
                                             }
                                           else                   // No modify
                                             {                                              
                                              State=MENUSETYEAR;
                                              MenuShow(State);
                                              break;
                                             }
                                 case MOVECURSOR:
                                           SetPoint++;
                                           Xpos++;
                                           if(Xpos==12)
                                             {Xpos=13;}
                                           if(Xpos==15)
                                             {Xpos=16;}
                                           if(Xpos==17)
                                             {Xpos=10;SetPoint=0;}
                                           LcdMoveCursor(Xpos,Ypos);
                                           break;
                                 case INCREASE:
                                           SetCompare(State);
                                           LcdDisBuf1[SetPoint]++;
                                           if(LcdDisBuf1[SetPoint]>Max_temp)
                                             LcdDisBuf1[SetPoint]=Min_temp;
                                           ACC_temp=LcdDisBuf1[SetPoint]|0x30;
                                           LcdUpdateBit(Xpos,Ypos,ACC_temp); 
                                           LcdMoveCursor(Xpos,Ypos);
                                           break;
                                 default:  MenuShow(State);break; 
                                }
                          break;

            case MENUSETYEAR:
                          switch(KeyValue)
                                {
                                 case NEXT:
                                           if(CompareModify())    // Yes modify

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -