制作出來的LCD12864萬年歷實物圖如下:
0.png (215.74 KB, 下載次數: 66)
下載附件
2019-4-17 02:12 上傳
LCD12864萬年歷仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (10.43 KB, 下載次數: 64)
下載附件
2019-4-17 02:16 上傳
電路原理圖如下:
0.png (90.76 KB, 下載次數: 51)
下載附件
2019-4-17 02:13 上傳
QQ圖片20190413181505.png (65.68 KB, 下載次數: 66)
下載附件
2019-4-13 18:22 上傳
單片機源程序如下:
- *-----------------------------------------------
- 名稱:12864字庫液晶顯示
- 內容:通過顯示字符、數字、漢字和圖片測試液晶基本功能
- ------------------------------------------------*/
- #include <reg52.h>
- #include <intrins.h>
- #include "delay.h"
- sbit RS = P3^5;
- sbit RW = P3^6;
- sbit E = P3^4;
- sbit RES = P1^7;
- sbit PSB = P1^6;
- sbit beep = P2^3;
- #define DataPort P0 //MCU P0<------> LCM
- //
- typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 無符號8位整型變量 */
- typedef signed char S8; /* defined for signed 8-bits integer variable 有符號8位整型變量 */
- typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 無符號16位整型變量 */
- typedef signed int S16; /* defined for signed 16-bits integer variable 有符號16位整型變量 */
- typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 無符號32位整型變量 */
- typedef signed long S32; /* defined for signed 32-bits integer variable 有符號32位整型變量 */
- typedef float F32; /* single precision floating point variable (32bits) 單精度浮點數(32位長度) */
- typedef double F64; /* double precision floating point variable (64bits) 雙精度浮點數(64位長度) */
- //
- #define uchar unsigned char
- #define uint unsigned int
- #define Data_0_time 4
- //----------------------------------------------//
- //----------------IO口定義區--------------------//
- //----------------------------------------------//
- sbit P2_0 = P2^0 ;
- //----------------------------------------------//
- //----------------定義區--------------------//
- //----------------------------------------------//
- U8 U8FLAG,k;
- U8 U8count,U8temp;
- U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
- U8 U8comdata;
- U8 count;
- U8 flag;
- U8 jishi_flag = 0,count_up = 0;
- unsigned char count=0,ss=0,sg=0,fs=0,fg=0,ms=0,mg=0,m=0,f=0,s=0,yue=1,ri=1;
- unsigned char str1[]={"溫度:00 "},str2[2],str3[]={"濕度:00%"},str4[2],dat=1,cal[10]={"0001-01-01"};
- #define uchar unsigned char
- #define uint unsigned int
- //DS1302引腳定義
- sbit RST=P1^0;
- sbit IO=P1^1;
- sbit SCK=P1^2;
- //DS1302地址定義
- #define ds1302_sec_add 0x80 //秒數據地址
- #define ds1302_min_add 0x82 //分數據地址
- #define ds1302_hr_add 0x84 //時數據地址
- #define ds1302_date_add 0x86 //日數據地址
- #define ds1302_month_add 0x88 //月數據地址
- #define ds1302_day_add 0x8a //星期數據地址
- #define ds1302_year_add 0x8c //年數據地址
- #define ds1302_control_add 0x8e //控制數據地址
- #define ds1302_charger_add 0x90
- #define ds1302_clkburst_add 0xbe
- //初始時間定義
- uchar time_buf[8] = {0x20,0x16,0x12,0x31,0x22,0x16,0x00,0x06};
- void Delay18ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 1;
- j = 194;
- k = 159;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay10us() //@11.0592MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- _nop_();
- i = 24;
- while (--i);
- }
- //DS1302初始化函數
- void ds1302_init(void)
- {
- RST=0; //RST腳置低
- SCK=0; //SCK腳置低
- }
- //向DS1302寫入一字節數據
- void ds1302_write_byte(uchar addr, uchar d)
- {
- uchar i;
- RST=1; //啟動DS1302總線
- //寫入目標地址:addr
- addr = addr & 0xFE; //最低位置零,寄存器0位為0時寫,為1時讀
- for (i = 0; i < 8; i ++) {
- if (addr & 0x01) {
- IO=1;
- }
- else {
- IO=0;
- }
- SCK=1; //產生時鐘
- SCK=0;
- addr = addr >> 1;
- }
- //寫入數據:d
- for (i = 0; i < 8; i ++) {
- if (d & 0x01) {
- IO=1;
- }
- else {
- IO=0;
- }
- SCK=1; //產生時鐘
- SCK=0;
- d = d >> 1;
- }
- RST=0; //停止DS1302總線
- }
- //從DS1302讀出一字節數據
- uchar ds1302_read_byte(uchar addr) {
- uchar i,temp;
- RST=1; //啟動DS1302總線
- //寫入目標地址:addr
- addr = addr | 0x01; //最低位置高,寄存器0位為0時寫,為1時讀
- for (i = 0; i < 8; i ++) {
- if (addr & 0x01) {
- IO=1;
- _nop_();
- _nop_();
- }
- else {
- IO=0;
- _nop_();
- _nop_();
- }
- SCK=1;
- SCK=0;
- addr = addr >> 1;
- }
- //輸出數據:temp
- for (i = 0; i < 8; i ++) {
- temp = temp >> 1;
- if (IO) {
- temp |= 0x80;
- }
- else {
- temp &= 0x7F;
- }
- SCK=1;
- _nop_();
- _nop_();
- SCK=0;
- _nop_();
- _nop_();
- }
- RST=0; //停止DS1302總線
- _nop_();
- _nop_();
- return temp;
- }
- //向DS302寫入時鐘數據
- void ds1302_write_time(void)
- {
- ds1302_write_byte(ds1302_control_add,0x00); //關閉寫保護
- ds1302_write_byte(ds1302_sec_add,0x80); //暫停時鐘
- //ds1302_write_byte(ds1302_charger_add,0xa9); //涓流充電
- ds1302_write_byte(ds1302_year_add,time_buf[1]); //年
- ds1302_write_byte(ds1302_month_add,time_buf[2]); //月
- ds1302_write_byte(ds1302_date_add,time_buf[3]); //日
- ds1302_write_byte(ds1302_hr_add,time_buf[4]); //時
- ds1302_write_byte(ds1302_min_add,time_buf[5]); //分
- ds1302_write_byte(ds1302_sec_add,time_buf[6]); //秒
- ds1302_write_byte(ds1302_day_add,time_buf[7]); //周
- ds1302_write_byte(0xc0,0xaa);
- ds1302_write_byte(ds1302_control_add,0x80); //打開寫保護
- }
- //從DS302讀出時鐘數據
- void ds1302_read_time(void)
- {
- time_buf[1]=ds1302_read_byte(ds1302_year_add); //年
- time_buf[2]=ds1302_read_byte(ds1302_month_add); //月
- time_buf[3]=ds1302_read_byte(ds1302_date_add); //日
- time_buf[4]=ds1302_read_byte(ds1302_hr_add); //時
- time_buf[5]=(ds1302_read_byte(ds1302_min_add)); //分
- time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x3f;//秒,屏蔽秒的第7位,避免超出59
- time_buf[7]=ds1302_read_byte(ds1302_day_add); //周
- }
- void COM(void)
- {
-
- U8 i;
-
- for(i=0;i<8;i++)
- {
-
- U8FLAG=2;
- while((!P2_0)&&U8FLAG++);
- Delay10us();
- Delay10us();
- Delay10us();
- U8temp=0;
- if(P2_0)U8temp=1;
- U8FLAG=2;
- while((P2_0)&&U8FLAG++);
- //超時則跳出for循環
- if(U8FLAG==1)break;
- //判斷數據位是0還是1
-
- // 如果高電平高過預定0高電平值則數據位為 1
-
- U8comdata<<=1;
- U8comdata|=U8temp; //0
- }//rof
-
- }
- //--------------------------------
- //-----濕度讀取子程序 ------------
- //--------------------------------
- //----以下變量均為全局變量--------
- //----溫度高8位== U8T_data_H------
- //----溫度低8位== U8T_data_L------
- //----濕度高8位== U8RH_data_H-----
- //----濕度低8位== U8RH_data_L-----
- //----校驗 8位 == U8checkdata-----
- //----調用相關子程序如下----------
- //---- Delay();, Delay_10us();,COM();
- //--------------------------------
- void RH(void)
- {
- //主機拉低18ms
- P2_0=0;
- Delay18ms();
- P2_0=1;
- //總線由上拉電阻拉高 主機延時20us
- Delay10us();
- Delay10us();
- Delay10us();
- Delay10us();
- //主機設為輸入 判斷從機響應信號
- P2_0=1;
- //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行
- if(!P2_0) //T !
- {
- U8FLAG=2;
- //判斷從機是否發出 80us 的低電平響應信號是否結束
- while((!P2_0)&&U8FLAG++);
- U8FLAG=2;
- //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
- while((P2_0)&&U8FLAG++);
- //數據接收狀態
- COM();
- U8RH_data_H=U8comdata;
- COM();
- U8RH_data_L=U8comdata;
- COM();
- U8T_data_H=U8comdata;
- COM();
- U8T_data_L=U8comdata;
- COM();
- U8checkdata=U8comdata;
- P2_0=1;
- }//fi
- }
- unsigned char code user16x16[]={ //笑臉圖片
- 0x0F,0xF0,0x10,0x08,0x20,0x04,0x40,0x02,0x9C,0x39,0xBE,0x7D,0x80,0x01,0x80,0x01,
- 0x80,0x01,0x88,0x11,0x84,0x21,0x43,0xC2,0x20,0x04,0x10,0x08,0x0F,0xF0,0x00,0x00,
- };
- unsigned char code pic1[]= // 圖片代碼
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- unsigned char code num[11][64]={
- {// 圖片數字0
- 0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
- 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x40,0x02,0x00,0x00,
- 0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
- 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
- {// 圖片數字1
- 0x00,0x00,0x00,0x20,0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
- 0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x20,
- 0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
- 0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},
- {// 圖片數字2
- 0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
- 0x5F,0xF8,0x60,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
- 0x70,0x00,0x70,0x00,0x70,0x00,0x6F,0xF8,0x5F,0xFC,0x3F,0xFE,0x00,0x00,0x00,0x00},
- {// 圖片數字3
- 0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
- 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
- {// 圖片數字4
- 0x00,0x00,0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
- 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
- 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00},
- {// 圖片數字5
- 0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
- 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
- 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
- {// 圖片數字6
- 0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
- 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
- 0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
- 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
- {// 圖片數字7
- 0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,
- 0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00},
- {// 圖片數字8
- 0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
- 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
- 0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
- 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
- {// 圖片數字9
- 0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
- 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
- 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
- 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x1F,0xF6,0x3F,0xFA,0x7F,0xFC,0x00,0x00,0x00,0x00},
- {// 圖片":" 10
- //6X6方點
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,
- 0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,
- 0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
- };
- unsigned char code kongbai[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- /*------------------------------------------------
- 檢測忙位
- ------------------------------------------------*/
- void init_timer()
- {
- TMOD=0x21;//模式1,16位計時
- TH0=19555/256;
- TL0=19555%256;
- ET0=1;
- }
- void csh()
- {
- SM0=0;
- SM1=1;
- REN=1;
- TI=0;
- RI=0;
- PCON=0;
- TH1=0xFD;
- TL1=0XFD;
- TMOD=0X21;
- EA=1;
- ET1=0;
- ES=1;
- TR1=1;
- }
- void Check_Busy()
- {
- RS=0;
- RW=1;
- E=1;
- DataPort=0xff;
- while((DataPort&0x80)==0x80);//忙則等待
- E=0;
- }
- /*------------------------------------------------
- 寫命令
- ------------------------------------------------*/
- void Write_Cmd(unsigned char Cmd)
- {
- Check_Busy();
- RS=0;
- RW=0;
- E=1;
- DataPort=Cmd;
- DelayUs2x(5);
- E=0;
- DelayUs2x(5);
- }
- /*------------------------------------------------
- 寫數據
- ------------------------------------------------*/
- void Write_Data(unsigned char Data)
- {
- Check_Busy();
- RS=1;
- RW=0;
- E=1;
- DataPort=Data;
- DelayUs2x(5);
- E=0;
- DelayUs2x(5);
- }
- /*------------------------------------------------
- 液晶屏初始化
- ------------------------------------------------*/
- void Init_ST7920()
- {
- DelayMs(40); //大于40MS的延時程序
- PSB=1; //設置為8BIT并口工作模式
- DelayMs(1); //延時
- RES=0; //復位
- DelayMs(1); //延時
- RES=1; //復位置高
- DelayMs(10);
- Write_Cmd(0x30); //選擇基本指令集
- DelayUs2x(50); //延時大于100us
- Write_Cmd(0x30); //選擇8bit數據流
- DelayUs2x(20); //延時大于37us
- Write_Cmd(0x0c); //開顯示(無游標、不反白)
- DelayUs2x(50); //延時大于100us
- Write_Cmd(0x01); //清除顯示,并且設定地址指針為00H
- DelayMs(15); //延時大于10ms
- //Write_Cmd(0x06); //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位,光標從右向左加1位移動
- DelayUs2x(50); //延時大于100us
- }
- /*------------------------------------------------
- 用戶自定義字符
- ------------------------------------------------*/
- void CGRAM()
- {
- int i;
- Write_Cmd(0x30);
- Write_Cmd(0x40);
- for(i=0;i<16;i++)
- {
- Write_Data(user16x16[i*2]);
- Write_Data(user16x16[i*2+1]);
- }
- }
- /*------------------------------------------------
- 顯示用戶自定義字符
- ------------------------------------------------*/
- void DisplayCGRAM(unsigned char x,unsigned char y)
- {
- switch(y)
- {
- case 1: Write_Cmd(0x80+x);break;
- case 2: Write_Cmd(0x90+x);break;
- case 3: Write_Cmd(0x88+x);break;
- case 4: Write_Cmd(0x98+x);break;
- default:break;
- }
- Write_Data(00);
- Write_Data(00);
- }
- /*------------------------------------------------
- 顯示字符串
- x:橫坐標值,范圍0~8
- y:縱坐標值,范圍1~4
- ------------------------------------------------*/
- void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s)
- {
- switch(y)
- {
- case 1: Write_Cmd(0x80+x);break;
- case 2: Write_Cmd(0x90+x);break;
- case 3: Write_Cmd(0x88+x);break;
- case 4: Write_Cmd(0x98+x);break;
- default:break;
- }
- while(*s>0)
- {
- Write_Data(*s);
- s++;
- DelayUs2x(50);
- }
- }
- /*------------------------------------------------
- 清屏
- ------------------------------------------------*/
- void ClrScreen()
- {
- Write_Cmd(0x01);
- DelayMs(15);
- }
-
- /*------------------------------------------------
- 顯示圖片
- ------------------------------------------------*/
- void LCD_PutGraphic(unsigned char code *img)
- {
- int i,j;
- //顯示上半屏內容設置
- for(i=0;i<32;i++)
- {
- Write_Cmd(0x80 + i); //SET 垂直地址 VERTICAL ADD
- Write_Cmd(0x80); //SET 水平地址 HORIZONTAL ADD
- for(j=0;j<16;j++)
- {
- Write_Data(*img);
- img++;
- }
- }
- //顯示下半屏內容設置
- for(i=0;i<32;i++)
- {
- Write_Cmd(0x80 + i); //SET 垂直地址 VERTICAL ADD
- Write_Cmd(0x88); //SET 水平地址 HORIZONTAL ADD
- for(j=0;j<16;j++)
- {
- Write_Data(*img);
- img++;
- }
- }
-
- }
- /*------------------------------------------------
- 設置到繪圖模式
- ------------------------------------------------*/
- void SetGraphicMode()
- {
- Write_Cmd(0x36); //選擇8bit數據流 圖形模式
- DelayUs2x(20);
- }
- void SetNormalMode()
- {
- Write_Cmd(0x30); //選擇8bit數據流 圖形模式
- DelayUs2x(20);
- }
- void huatu(unsigned char x,unsigned char code *img)
- {
- unsigned char i,j;
- SetGraphicMode();
- for(i=0;i<32;i++)
- {
- if(i<16)
- {
- Write_Cmd(0x80+16+i);
- Write_Cmd(0x80+x);
- }
- if(i>=16)
- {
- Write_Cmd(0x80+i-16);
- Write_Cmd(0x88+x);
- }
- for(j=0;j<2;j++)
- {
- Write_Data(*img);
- img++;
- }
- }
- SetNormalMode();
- }
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- ds1302_init(); //DS1302初始化
- flag = ds1302_read_byte(0xc0);
- Delay10us();
- Delay10us();
- flag = ds1302_read_byte(0xc0);
- Delay10us();
- Delay10us();
- if(flag != 0xaa)
- {
- ds1302_write_time(); //寫入初始值
- Delay10us();
- Delay10us();
- ds1302_write_time(); //寫入初始值
- Delay10us();
- Delay10us();
- }
- EA=1;
- ET0=1;
- TR0=1;
- init_timer();
- SetGraphicMode(); //設置成繪圖模式
- LCD_PutGraphic(pic1); //清屏
- beep = 0;
- while(1)
- {
- RH();
- //ds1302_read_time(); //讀取時間
- cal[0] = (time_buf[0]>>4) + 48; //年
- cal[1] = (time_buf[0]&0x0f) + 48;
-
- cal[2] = (time_buf[1]>>4) + 48;
- cal[3] = (time_buf[1]&0x0f) + 48;
-
-
-
- cal[5] = (time_buf[2]>>4) + 48; //月
- cal[6] = (time_buf[2]&0x0f) + 48;
-
- cal[8] = (time_buf[3]>>4) + 48; //日
- cal[9] = (time_buf[3]&0x0f) + 48;
-
- dat=(time_buf[7]&0x07); //星期
-
- ss=(time_buf[4]>>4); //時
- sg=(time_buf[4]&0x0f);
-
- fs=(time_buf[5]>>4); //分
- fg=(time_buf[5]&0x0f);
- ms=(time_buf[6]>>4); //秒
- mg=(time_buf[6]&0x0f);
- if((time_buf[5] ==0x59 && time_buf[6] == 0x59) || (time_buf[5] ==0x00 && time_buf[6] == 0x00))
- beep = 1;
- else
- beep = 0;
- huatu(0,num[ss]);
- huatu(1,num[sg]);
- if(count>=5 && count<=15)
- {
- huatu(2,num[10]);
- }
- else
- {
- huatu(2,kongbai);
- }
-
- huatu(3,num[fs]);
- huatu(4,num[fg]);
-
- if(count>=5 && count<=15)
- {
- huatu(5,num[10]);
- }
- else
- {
- huatu(5,kongbai);
- }
-
-
- huatu(6,num[ms]);
- huatu(7,num[mg]);
- str1[5]=(U8T_data_H - 4) / 10 + 48; //溫度
- str1[6]=(U8T_data_H - 4) %10 + 48;
-
- str3[5]=(U8RH_data_H / 10) + 48; //濕度
- str3[6]=(U8RH_data_H % 10)+48;
- LCD_PutString(0,1,cal);
- if(dat==1) LCD_PutString(5,1,"星期一");
- if(dat==2) LCD_PutString(5,1,"星期二");
- if(dat==3) LCD_PutString(5,1,"星期叁");
- if(dat==4) LCD_PutString(5,1,"星期四");
- if(dat==5) LCD_PutString(5,1,"星期五");
- if(dat==6) LCD_PutString(5,1,"星期六");
- if(dat==7) LCD_PutString(5,1,"星期天");
- LCD_PutString(0,4,str1);
- LCD_PutString(4,4,str3);
- }
- }
- void Timer0_INT() interrupt 1
- {
- count++;
- if(count==20)//count=20,計時一秒
- {
- ds1302_read_time(); //讀取時間
- count=0;
- if(time_buf[6] == 0x39)
- {
- jishi_flag = 1;
- }
- if((jishi_flag == 1)&&(time_buf[6] != 0x39))
- {
- count_up++;
- time_buf[6] = time_buf[6] + 0x40;
- if(count_up == 20)
- {
- count_up = 0;
- jishi_flag = 0;
- }
- }
- }
- TH0=19500/256;
- TL0=19500%256;
- }
復制代碼
所有資料51hei提供下載:
萬年歷.7z
(523.7 KB, 下載次數: 318)
2019-4-17 02:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|