匆忙之中做了這個用來抵擋導師的項目庫,略有粗糙還請見諒,以后有時間畫板子??不會吧哈哈哈
/************************************************/
改時間用的是藍牙調試寶
輸入格式:HEX(默認)
輸入內容:20100820585404
時間為2020年10月8日20點58分54秒星期4
引腳接線說明
//LCD1602引腳定義
#define LCDDATA P0
sbit RS = P2^3;
sbit RW = P2^4;
sbit CS = P2^5;
//DS1302引腳定義
sbit RST = P1^2;
sbit DAT = P1^1;
sbit CLK = P1^0;
匆忙之中做出來的這個,有時間畫板子加別的功能吧
單片機源程序如下:
- #include <reg52.h>
- #include "DS1302.h"
- #include "LCD1602.h"
- /*
- *在reg52頭文件定義了uchar
- //LCD1602引腳定義
- #define LCDDATA P0
- sbit RS = P2^3;
- sbit RW = P2^4;
- sbit CS = P2^5;
- //DS1302引腳定義
- sbit RST = P1^2;
- sbit DAT = P1^1;
- sbit CLK = P1^0;
- */
- #define FOSC 11059200L
- #define BAUD 9600 //UART baudrate
- #define T1MS (65536-FOSC/12/1000)
- uchar count = 200; //中斷循環標志位
- uchar flag = 0;
- uchar uart_receive_buffer[7]={0};
- //sbit led = P1^5;
- void DS1302_set_time(void);
- //定時器初始化
- void Init_timer1(void)
- {
- TMOD = 0x10; //set timer1 as mode1 (16-bit)
- TL1 = T1MS; //initial timer1 low byte
- TH1 = T1MS >> 8; //initial timer1 high byte
- TR1 = 1; //timer1 start running
- ET1 = 1; //enable timer1 interrupt
- EA = 1; //open global interrupt switch
- }
- //定時器處理函數
- void time1(void) interrupt 3
- {
- TL1 = T1MS;
- TH1 = T1MS >> 8;
- //count--;
- if(count-- == 0)
- {
- count = 200;
- //led = ~led;
- DS1302_read_time(); //讀取時間
- LCD_time_buffer[0]=(time_buf[0]>>4); //年
- LCD_time_buffer[1]=(time_buf[0]&0x0f);
-
- LCD_time_buffer[2]=(time_buf[1]>>4);
- LCD_time_buffer[3]=(time_buf[1]&0x0f);
-
- LCD_time_buffer[4]=(time_buf[2]>>4); //月
- LCD_time_buffer[5]=(time_buf[2]&0x0f);
-
- LCD_time_buffer[6]=(time_buf[3]>>4); //日
- LCD_time_buffer[7]=(time_buf[3]&0x0f);
-
- LCD_time_buffer[14]=(time_buf[7]&0x07); //星期
-
- //第2行顯示
- LCD_time_buffer[8]=(time_buf[4]>>4); //時
- LCD_time_buffer[9]=(time_buf[4]&0x0f);
- LCD_time_buffer[10]=(time_buf[5]>>4); //分
- LCD_time_buffer[11]=(time_buf[5]&0x0f);
- LCD_time_buffer[12]=(time_buf[6]>>4); //秒
- LCD_time_buffer[13]=(time_buf[6]&0x0f);
- }
- }
- //串口中斷初始化
- void Usart_Init(void)
- {
- SCON = 0x50;
- TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //Set auto-reload vaule
- TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
- T2CON = 0x34; //啟動定時器2
- ES = 1; //開串口中斷
- EA = 1; //開總中斷
- }
- //串口處理函數
- void Usart_receive(void) interrupt 4
- {
- EA = 0;
- if(RI == 1)
- {
- RI = 0;
- uart_receive_buffer[flag] = SBUF;
- //led = ~led;
- if(flag ==6)
- {
- flag = 0;
- DS1302_set_time();
- }
- else
- {
- flag++;
- }
- }
- EA = 1;
- }
- void DS1302_set_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,uart_receive_buffer[0]); //年
- DS1302_write_byte(ds1302_month_add,uart_receive_buffer[1]); //月
- DS1302_write_byte(ds1302_date_add,uart_receive_buffer[2]); //日
- DS1302_write_byte(ds1302_hr_add,uart_receive_buffer[3]); //時
- DS1302_write_byte(ds1302_min_add,uart_receive_buffer[4]); //分
- DS1302_write_byte(ds1302_sec_add,uart_receive_buffer[5]); //秒
- DS1302_write_byte(ds1302_day_add,uart_receive_buffer[6]); //周
- DS1302_write_byte(ds1302_control_add,0x80); //打開寫保護
- }
- void main(void)
- {
- Delay_xms(50);
- LCD_Init();
- LCD_clear();
- DSInit();
- Delay_xms(10);
- //DS1302_write_time();
- Init_timer1();
- Usart_Init();
- while(1)
- {
- Display();
- // Delay_xms(500);
- // LCD_write_char(0,0,flag);
- // Delay_xms(500);
- // flag++;
- // if(flag>6)
- // flag = 0;
- }
- }
復制代碼
所有資料51hei提供下載:
2020106項目庫.zip
(45.02 KB, 下載次數: 13)
2020-10-8 20:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|