匆忙之中做了这个用来抵挡导师的项目库,略有粗糙还请见谅,以后有时间画板子??不会吧哈哈哈
/************************************************/
改时间用的是蓝牙调试宝
输入格式: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)
|