标题:
基于无线蓝牙的数字时钟 单片机程序
[打印本页]
作者:
YSG
时间:
2020-10-8 21:00
标题:
基于无线蓝牙的数字时钟 单片机程序
匆忙之中做了这个用来抵挡导师的项目库,略有粗糙还请见谅,以后有时间画板子??不会吧哈哈哈
/************************************************/
改时间用的是蓝牙调试宝
输入格式: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
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1