內容如題,可以調節時間,沒有鬧鐘之類的,程序其實也是拼湊出來的,有很多問題,之后我會重新理解,然后重新寫過,再加些功能。 現在這個就當做是我開始學習的一個記錄吧。
現在最主要的問題就是顯示的時候字符相互之間有些沖突,導致有些地方顯示不太全,還有大數字變化速度有點慢,以后可能會把秒針改小。
若是大家有解決方案的話,不妨幫幫我,多謝了。
單片機源程序如下:
- //-------------------------------------
- // 名稱:用DS1302與12864LCD設計的可調電子日歷與時鐘
- //---------------------------------------
- // 說明:本例運行時會以PC時間表為默認時間開始,運行過程中可以通過K1鍵
- // 選擇調節對象,所選中的調整對象會反白顯示,用K2,K3鍵進行加減,用K4鍵保存。
- // 本例會自動將時間調節控制為合法日期時間,對于星期的調節會
- // 在調整年月日時自動完成,閏年問題也會自動判斷。
- //-------------------------------------------
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define LCD_DB_PORT P0 // 液晶數據線端口DB0-DB7
- #define LCD_START_ROW 0xc0 //起始行命令
- #define LCD_PAGE 0xB8 //頁指令
- #define LCD_COL 0x40 //列指令
- bit Reverse_Display=0;//是否反相顯示(白底黑字/黑底白字)
- //液晶引腳定義
- sbit SDA=P1^0; //DS1302數據線
- sbit CLK=P1^1; //DS1302時鐘線
- sbit RST=P1^2; //DS1302復位線
- sbit DI=P2^0;
- sbit RW=P2^1;
- sbit E=P2^2;
- sbit CS1=P2^3;
- sbit CS2=P2^4;
- sbit CS3=P2^2;
- char Adjust_Index=-1; //當前調節的時間對象:秒,分,時,日,月,年(0,1,2,3,4,6)
- uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31}; // 一年中每個月的天數,二月的天數由年份決定
- uchar DateTime[7];//所讀取的日期時間
- //DS1302函數聲明
- void Write_Byte_TO_DS1302(uchar X); // 向DS1302寫入一個字節
- uchar Read_Byte_FROM_DS1302(); //從DS1302中讀取一個字節
- uchar Read_Data_FROM_DS1302(uchar addr); //從DS1302指定位置讀取數據 , 讀數據
- void Write_Data_TO_DS1302(uchar addr,uchar dat); // 向DS1302指定位置寫入數據, 寫數據
- void SET_DS1302(); //設置時間
- void GetTime(); //讀取當前時間
- uchar Is_Leapyear(uint year); //判斷是否為閏年
- //12864LCD函數
- void dht11();
- extern void LCD12864_Initialization();
- extern void Display_char(uchar P1,uchar L1,uchar *M) reentrant;
- extern void Display_Word(uchar P2,uchar L2,uchar *M) reentrant;
- extern void Datetime_Adjust(char X);
- extern void SET_DS1302(); // 設置時間
- //函數聲明
- void Initialization();//初始化函數
- extern bit Reverse_Display;//是否反相顯示(白底黑字/黑底白字)
- extern uchar code Digits[];
- extern uchar code WEEK_WORDS[];
- extern uchar code Digits[];
- extern uchar code DATE_TIME_WORDS[];
- extern char Adjust_Index; //當前調節的時間對象:秒,分,時,日,月,年(0,1,2,3,4,6)
- extern uchar MonthsDays[]; // 一年中每個月的天數,二月的天數由年份決定
- extern uchar DateTime[7];//所讀取的日期時間
- sbit k1=P3^4; //選擇按鍵
- sbit k2=P3^5; //加
- sbit k3=P3^6; //減
- sbit k4=P3^7; //確定
- uchar tcount=0;
- //水平與垂直偏移
- uchar H_Offset=0;
- uchar V_page_Offset=0;
- //---------------------------------------------------------------
- // 檢查LCD是否忙
- //--------------------------------------------------------------
- bit LCD_IS_BUSY()
- {
- LCD_DB_PORT=0xFF;
- RW=1;
- _nop_();
- DI=0;
- E=1;
- _nop_();
- E=0;
- return (bit)(P0&0x80);
- }
- //---------------------------------------------------------------
- // 向LCD寫入一個字節(一般用于發送命令)
- //--------------------------------------------------------------
- void Write_Byte_To_LCD(uchar comand)
- {
- while(LCD_IS_BUSY());
- LCD_DB_PORT=0xFF;
- RW=0;
- _nop_();
- DI=0;
- LCD_DB_PORT=comand;
- E=1;
- _nop_();
- E=0;
- }
- //---------------------------------------------------------------
- // 向LCD寫入數據
- //--------------------------------------------------------------
- void Write_Data_To_LCD(uchar dat)
- {
- while(LCD_IS_BUSY());
- LCD_DB_PORT=0xFF;
- RW=0;
- _nop_();
- DI=1;
- if(!Reverse_Display) //根據Reverse_Display決定是否反相顯示
- LCD_DB_PORT=dat;
- else
- LCD_DB_PORT=~dat;
- E=1;
- _nop_();
- E=0;
- }
-
- //********************************************************************
- //1MS為單位的延時程序,不準確
- //********************************************************************
- void lcd_delay_ms(unsigned char m)
- {
- unsigned char n;
- while(m--){
- for(n=0;n<125;n++)
- {;}
- }
- }
- //---------------------------------------------------------------
- // 初始化LCD
- //--------------------------------------------------------------
- void LCD12864_Initialization()
- {
- CS1=1;
- CS2=1;
- Write_Byte_To_LCD(0x38);
- lcd_delay_ms(10);
- Write_Byte_To_LCD(0x0F);
- lcd_delay_ms(10);
- Write_Byte_To_LCD(0x06);
- lcd_delay_ms(10);
- // Write_Byte_To_LCD(LCD_START_ROW);
- Write_Byte_To_LCD(0x01);
- lcd_delay_ms(10);
- }
- //---------------------------------------------------------------
- // 通用顯示函數 從第P頁第L列顯示W個字節數據,具體顯示的數據在r所指的數組中
- //--------------------------------------------------------------
- void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant
- {
- uchar i;
- if(L<64)
- {
- CS1=1;
- CS2=0;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL+L);
- if(L+W<64)
- {
- for(i=0;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- else
- {
- for(i=0;i<64-L;i++)
- Write_Data_To_LCD(r[i]);
- CS1=0;
- CS2=1;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL);
- for(i=64-L;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- }
- else
- {
- CS1=0;
- CS2=1;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL+L-64);
- for(i=0;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- }
- //---------------------------------------------------------------
- // 顯示一個8×16點陣字符
- //--------------------------------------------------------------
- void Display_char(uchar P1,uchar L1,uchar *M) reentrant
- {
- LCD_Show(P1,L1,8,M);
- LCD_Show(P1+1,L1,8,M+8);
- }
- //--------------------------------------------------------------------
- // 顯示一個16×16點陣字符 (漢字上半部分與下半部分分別處在相鄰兩頁中)
- //----------------------------------------------------------------------
- void Display_Word(uchar P2,uchar L2,uchar *M) reentrant
- {
- LCD_Show(P2,L2,16,M);
- LCD_Show(P2+1,L2,16,M+16);
- }
- //--------------------------------------------------------------------
- // 顯示一個16×32點陣字符 (漢字上半部分與下半部分分別處在相鄰兩頁中)
- //----------------------------------------------------------------------
- void Display_Word2(uchar P2,uchar L2,uchar *M) reentrant
- {
- LCD_Show(P2,L2,16,M);
- LCD_Show(P2+1,L2,16,M+16);
- LCD_Show(P2+2,L2,16,M+32);
- LCD_Show(P2+3,L2,16,M+48);
- }
- //*************************************************************************
- //***********************DHT11*************************
- //**************************************************************************
- //sbit DATA = P1^3; //定義數據引腳
- //bit flag_1s,flag_200ms,tmp;
- //----------------定義區--------------------//
- uchar s1,s2,w1,w2;
- sbit TRH = P1^3;//data數據端
- unsigned char i;
- typedef unsigned char unint8;
- typedef unsigned char unint16;
- unint8 TH_data,TL_data,RH_data,RL_data,CK_data;
- unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
- unint8 com_data,untemp,temp;
- unint8 respond;
- /*********************************************************************************/
- void delayNOP()
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- /*********************************************************************************/
- /*********************************************************************************/
- // 毫秒級延時子程序
- /*********************************************************************************/
- void delay_ms(unsigned char ms)
- {
- unsigned char i;
- while(ms--)
- {
- for(i = 0; i<250; i++)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- /*********************************************************************************/
- /*********************************************************************************/
- //5us級延時程序
- /*********************************************************************************/
- void delay_us()
- {
- unint8 i;
- i--;
- i--;
- i--;
- i--;
- i--;
- i--;
- }
- /****************************************************************************/
- /****************************************************************************/
- //收發信號檢測,數據讀取
- /****************************************************************************/
- char receive()
- {
- unint8 i;
- // ST=0;
- com_data=0;
- for(i=0;i<=7;i++)
- {
- respond=2;
- while((!TRH)&&respond++);
- delay_us();
- delay_us();
- delay_us();
- if(TRH)
- {
- temp=1;
- respond=2;
- while((TRH)&&respond++);
- }
- else
- temp=0;
- com_data<<=1;
- com_data|=temp;
- }
- return(com_data);
- }
- /****************************************************************************/
- /****************************************************************************/
- //濕度讀取子程序
- //溫度高8位== TL_data
- //溫度低8位== TH_data
- //濕度高8位== RH_data
- //濕度低8位== RH_data
- //校驗 8位 == CK_data
- //調用的程序有 delay();, Delay_5us();,RECEIVE();
- /***************************************************************************/
- void read_TRH()
- {
- // int m;
- //主機拉低18ms
- TRH=0;
- delay_ms(18);
- TRH=1;
- //DATA總線由上拉電阻拉高 主機延時20us
- delay_us();
- delay_us();
- delay_us();
- delay_us();
- //主機設為輸入 判斷從機響應信號
- TRH=1;
- //判斷DHT11是否有低電平響應信號 如不響應則跳出,響應則向下運行
- if(!TRH)
- {
- respond=2;
- //判斷DHT11發出 80us 的低電平響應信號是否結束
- while((!TRH)&& respond++);
- respond=2;
- //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
- while(TRH && respond++);
- //數據接收狀態
- RH_temp = receive();
- RL_temp = receive();
- TH_temp = receive();
- TL_temp = receive();
- CK_temp = receive();
- TRH=1;
- // ST=1;
- //數據校驗
- untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
- if(untemp==CK_temp)
- {
- RH_data = RH_temp;
- RL_data = RL_temp;
- TH_data = TH_temp;
- TL_data = TL_temp;
- CK_data = CK_temp;
- }
- }
- // if(RH_data>=60)
- // {
- // i=100;
- // while(i>0)
- // {
- // Beep=1;
- // delay_ms(1);
- // Beep=0;
- // i--;
- // }
- // Beep=1;
- // }
- // else if(RH_data<60)
- // {
- // Beep=0;
- // }
- //濕度整數部分
- // RH_data= htoi(str1);
- s1 = (char)(RH_data/10);
- s2 = (char)(RH_data%10);
- //溫度整數部分
- // TH_data= htoi(str2);
- w1 = (char)(TH_data/10);
-
- w2 = (char)(TH_data%10);
- // m=(int)(RH_data);
- // if(m>=35)//可改變相應數值,以此控制其他設備
- // {
- // XS=0;
- // // Beep =1; //可適當加一個延遲
- // }
- // else
- // {
- // XS=1;
- // //Beep =0;
- // }
- }
-
- //*--------寫字節函數,向DS1302寫入一個字節--------*//
- void Write_Byte_TO_DS1302(uchar X) // 向DS1302寫入一個字節
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- SDA=X&1;
- CLK=1;
- CLK=0;
- X>>=1;
- }
- }
- //*--------讀字節函數,從DS1302讀取一個字節--------*//
- uchar Read_Byte_FROM_DS1302() //從DS1302中讀取一個字節
- {
- uchar i,byte,t;
- for(i=0;i<8;i++)
- {
- byte>>=1;
- t=SDA;
- byte|=t<<7;
- CLK=1;
- CLK=0;
- }
- //BCD碼轉換
- return byte/16*10+byte%16;
- }
- //-------------------------------------------------------------
- //從DS1302指定位置讀取數據 , 讀數據
- //---------------------------------------------------------------
- uchar Read_Data_FROM_DS1302(uchar addr) //從DS1302指定位置讀取數據 , 讀數據
- {
- uchar dat;
- RST=0;
- CLK=0;
- RST=1;
- Write_Byte_TO_DS1302(addr); //向DS1302寫入一個地址
- dat=Read_Byte_FROM_DS1302(); //在上面寫入的地址中讀取數據
- CLK=1;
- RST=0;
- return dat;
- }
- //-------------------------------------------------------------
- //向DS1302指定位置寫入數據, 寫數據
- //---------------------------------------------------------------
- void Write_Data_TO_DS1302(uchar addr,uchar dat) // 向DS1302指定位置寫入數據, 寫數據
- {
- CLK=0;
- RST=1;
- Write_Byte_TO_DS1302(addr);
- Write_Byte_TO_DS1302(dat);
- CLK=1;
- RST=0;
- }
- //-----------------------------------------------------------
- // 設置時間
- //---------------------------------------------------------
- void SET_DS1302() // 設置時間
- {
- uchar i;
- Write_Data_TO_DS1302(0x8E,0x00); //寫控制字,取消寫保護
- // 分,時,日,月,年依次寫入
- for(i=0;i<7;i++)
- {
- // 分的起始地址是10000010(0x82),后面依次是時,日,月,周,年,寫入地址每次遞增2
- Write_Data_TO_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]%10));
- }
- Write_Data_TO_DS1302(0x8E,0x80); //寫控制字,加寫保護
- }
- //--------------------------------------------------------
- // 讀取當前時間
- //-------------------------------------------------------
- void GetTime() // 讀取當前時間
- {
- uchar i;
- for(i=0;i<7;i++)
- {
- DateTime[i]=Read_Data_FROM_DS1302(0x81+2*i);
- }
- }
- //-------------------------------------------------------------------
- // 判斷是否為閏年
- //-------------------------------------------------------------------
- uchar Is_Leapyear(uint year)
- {
- return (year%4==0&&year%100!=0)||(year%400==0) ;
- }
- //------------------------------------------------------------------
- // 求自2000.1.1開始的任何一天是星期幾?
- //----------------------------------------------------------------------
- void Refresh_Week_Day()
- {
- uint i,d,w=5; //已知1999年12.31是星期五
- for(i=2000;i<2000+DateTime[6];i++)
- {
- d=Is_Leapyear(i)?366:365;
- w=(w+d)%7;
- }
- d=0;
- for (i=1;i<DateTime[4];i++)
- {d+=MonthsDays[i];}
- d+=DateTime[3];
- //保存星期,0-6表示星期日,星期一至星期六,為了與DS1302的星期格式匹配,返回值需要加1
- DateTime[5]=(w+d)%7+1;
- }
- //-------------------------------------------------
- //年,月,日和時,分++/--
- //----------------------------------------------------
- void Datetime_Adjust(char X)
- {
- switch(Adjust_Index)
- {
- case 6: //年調整,00-99
- if(X==1&&DateTime[6]<99)
- {
- DateTime[6]++;
- }
- if(X==-1&&DateTime[6]>0)
- {
- DateTime[6]--;
- }
- //獲取2月天數
- MonthsDays[2]=Is_Leapyear(2000+DateTime[6])?29:28;
- //如果年份變化后當前月份的天數大于上限則設為上限
- if(DateTime[3]>MonthsDays[DateTime[4]])
- {
- DateTime[3]=MonthsDays[DateTime[4]];
- }
- Refresh_Week_Day(); //刷新星期
- break;
- case 4: //月調整 01-12
- if(X==1&&DateTime[4]<12)
- {
- DateTime[4]++;
- }
- if(X==-1&&DateTime[4]>1)
- {
- DateTime[4]--;
- }
- //獲取2月天數
- MonthsDays[2]=Is_Leapyear(2000+DateTime[6])?29:28;
- //如果年份變化后當前月份的天數大于上限則設為上限
- if(DateTime[3]>MonthsDays[DateTime[4]])
- {
- DateTime[3]=MonthsDays[DateTime[4]];
- }
- Refresh_Week_Day(); //刷新星期
- break;
- case 3: // 日調整00-28或00-29或00-30或00-31
- //調節之前首先根據當前年份得出該年中2月的天數
- MonthsDays[2]=Is_Leapyear(2000+DateTime[6])?29:28;
- //根據當前月份決定調節日期的上限
- if(X==1&&DateTime[3]<MonthsDays[DateTime[4]])
- {
- DateTime[3]++;
- }
- if(X==-1&&DateTime[3]>0)
- {
- DateTime[3]--;
- }
- Refresh_Week_Day(); //刷新星期
- break;
- case 2: // 時調整
- if(X==1&&DateTime[2]<23)
- {
- DateTime[2]++;
- }
- if(X==-1&&DateTime[4]>0)
- {
- DateTime[2]--;
- }
- break;
- case 1: // 分調整
- if(X==1&&DateTime[1]<59)
- {
- DateTime[1]++;
- }
- if(X==-1&&DateTime[4]>0)
- {
- DateTime[1]--;
- }
- break;
- case 0: // 秒調整
- if(X==1&&DateTime[1]<59)
- {
- DateTime[0]++;
- }
- if(X==-1&&DateTime[4]>0)
- {
- DateTime[0]--;
- }
- break;
- }
- }
- //-------------------------------------------------
- // 與本程序有關的數字和漢字的點陣編碼 DotMatrix.c
- // -----------------------------------------------
- //中文提示(縱向取模,字節倒序)
- //年、月、日、星期、時、分、秒等漢字點陣(16×16)
- uchar code DATE_TIME_WORDS[]={
- 0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00, //年
- 0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,//月
- 0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,//日
- 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,//星
- 0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,
- 0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,//期
- 0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,
- 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,//時
- 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
- 0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,//分
- 0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,//秒
- 0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00
- };
- //一、二、三、四、五、六和天等漢字點陣(16×16)
- uchar code WEEK_WORDS[]={
- 0x00,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,//天
- 0x00,0x80,0x40,0x20,0x10,0x08,0x06,0x01,0x02,0x04,0x08,0x10,0x30,0x60,0x20,0x00,
- 0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,//一
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,//二
- 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,
- 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,//三
- 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,//四
- 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,
- 0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,//五
- 0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,
- 0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,//六
- 0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00,
- 0x06,0x09,0x09,0xE6,0xF8,0x0C,0x04,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x1F,0x30,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00,/*"℃",0*/
- };
- //0-9等數字點陣(8×16)
- uchar code Digits[]={
- 0x00,0x00,0xF0,0xF8,0x08,0x68,0xF8,0xF0,0x00,0x00,0x07,0x0F,0x0B,0x08,0x0F,0x07, //0
- 0x00,0x20,0x20,0x30,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00, //1
- 0x00,0x30,0x38,0x08,0x88,0xF8,0x70,0x00,0x00,0x0C,0x0E,0x0B,0x09,0x08,0x08,0x00, // 2
- 0x00,0x30,0x38,0x88,0x88,0xF8,0x70,0x00,0x00,0x06,0x0E,0x08,0x08,0x0F,0x07,0x00, //3
- 0x00,0x00,0xF8,0xF8,0x00,0xE0,0xE0,0x00,0x00,0x03,0x03,0x02,0x02,0x0F,0x0F,0x02,//4
- 0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,//5
- 0x00,0xC0,0xE0,0x78,0x58,0xC8,0x80,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,//6
- 0x00,0x08,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x0E,0x0F,0x01,0x00,0x00,0x00,//7
- 0x00,0x70,0xF8,0xC8,0x88,0xF8,0x70,0x00,0x00,0x07,0x0F,0x08,0x09,0x0F,0x07,0x00,//8
- 0x00,0xF0,0xF8,0x08,0x08,0xF8,0xF0,0x00,0x00,0x00,0x09,0x0D,0x0F,0x03,0x01,0x00,//9
- 0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,/*"%",0*/
- 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/*"R",1*/
- 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,/*"H",2*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",0*/
- };
- uchar code fuhao[]=
- {
- 0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0xF0,0xFE,0x0F,0x01,0x00,0x00,0x00,0x00,0x01,0x07,0xFE,0xF0,0x00,0x00,0x00,
- 0x00,0x3F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x3F,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x03,0x06,0x0C,0x08,0x08,0x08,0x06,0x03,0x01,0x00,0x00,0x00,0x00,/*"0",0*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x01,0x01,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x08,0x08,0x08,0x0C,0x0F,0x0F,0x0C,0x08,0x08,0x08,0x00,0x00,0x00,0x00,/*"1",1*/
- 0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x40,0x40,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x1E,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xFF,0x3E,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x40,0x30,0x18,0x0C,0x06,0x03,0x01,0x00,0xC0,0x00,0x00,0x00,
- 0x00,0x0E,0x0D,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0E,0x03,0x00,0x00,0x00,/*"2",2*/
- 0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x80,0xC1,0x7F,0x3E,0x00,0x00,0x00,0x00,
- 0x00,0xC0,0xC0,0x00,0x00,0x01,0x01,0x01,0x03,0x02,0x06,0xFC,0xF0,0x00,0x00,0x00,
- 0x00,0x03,0x07,0x04,0x08,0x08,0x08,0x08,0x08,0x04,0x06,0x03,0x00,0x00,0x00,0x00,/*"3",3*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x60,0x10,0x0C,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x30,0x2C,0x26,0x21,0x20,0x20,0x20,0x20,0xFF,0xFF,0x20,0x20,0x20,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x0F,0x0F,0x08,0x08,0x08,0x00,0x00,0x00,/*"4",4*/
- 0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,
- 0x00,0x00,0xFF,0x00,0x80,0x40,0x40,0x40,0x40,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0xC0,0xC3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFC,0x00,0x00,0x00,
- 0x00,0x03,0x04,0x04,0x08,0x08,0x08,0x08,0x08,0x04,0x07,0x03,0x00,0x00,0x00,0x00,/*"5",5*/
- 0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,
- 0x00,0xE0,0xFC,0x07,0x81,0xC0,0x40,0x40,0x40,0xC0,0x83,0x03,0x00,0x00,0x00,0x00,
- 0x00,0x7F,0xFF,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFC,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x07,0x06,0x0C,0x08,0x08,0x08,0x0C,0x06,0x03,0x00,0x00,0x00,0x00,/*"6",6*/
- 0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,
- 0x00,0x0E,0x03,0x00,0x00,0x00,0x00,0x00,0xE0,0x18,0x06,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC0,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"7",7*/
- 0x00,0x00,0x00,0x80,0xC0,0x40,0x40,0x40,0x40,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x3E,0x7F,0xF1,0xC0,0xC0,0x80,0x00,0x00,0x80,0x41,0x7F,0x1E,0x00,0x00,0x00,
- 0xF0,0xFC,0x0E,0x02,0x01,0x01,0x01,0x03,0x07,0x0E,0x1E,0xFC,0xF0,0x00,0x00,0x00,
- 0x01,0x03,0x06,0x04,0x08,0x08,0x08,0x08,0x08,0x04,0x06,0x03,0x01,0x00,0x00,0x00,/*"8",8*/
- 0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFC,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0xF8,0x00,0x00,0x00,
- 0x01,0x03,0x07,0x0C,0x08,0x08,0x08,0x08,0x04,0x06,0xE1,0x7F,0x1F,0x00,0x00,0x00,
- 0x00,0x07,0x07,0x08,0x08,0x08,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,/*"9",9*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //:
- 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0F,0x0F,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,/*"-",0*/
- };
- //----------------------------------------------------
- // 主程序
- //----------------------------------------------------
- void main()
- {
- Initialization();
- while(1)
- {
- if(Adjust_Index==-1)
- GetTime();
- read_TRH();
- // CS2=0; //左屏開顯示
- // CS1=1;
- Display_char(6,0,Digits+s1*16);// Hz_Wo為某個漢字的首地址
- Display_char(6,16,Digits+s2*16);
- // CS2=1; //右屏開顯示
- // CS1=0;
- Display_char(6,64,Digits+w1*16);
- Display_char(6,80,Digits+w2*16);
- }
- }
- void Initialization()//初始化函數
- {
- IE=0x83;
- IP=0x01;
- IT0=0X01;
- TH0=-50000/256; // 寫入初值
- TL0=-50000%256; // 寫入初值
- TR0=1;
- LCD12864_Initialization();//液晶初始化函數
- //顯示年的前面固定的兩位
- Display_char(V_page_Offset,0+H_Offset,Digits+2*16);//顯示2
- Display_char(V_page_Offset,8+H_Offset,Digits); //顯示0
- //-----------------------------------------------
- //在12864屏幕上固定顯示漢字:年月日,星期,時分秒
- //---------------------------------------------------
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
89c52 ds1302 dht11 12864.rar
(161.11 KB, 下載次數: 278)
2019-3-27 20:51 上傳
點擊文件名下載附件
|