📄 ds1302.c
字号:
/************************************/
/*ds1302+ds18b20温度时钟 */
/*目标器件:AT89S51 */
/*晶振:11.0592MHZ */
/*编译环境:Keil 7.50A */
/*串口修改时间的格式为:以a开头加年 */
/*加月加日加星期加时加分加秒加b结束 */
/*如a0807281163812b. */
/************************************/
/*********************************包含头文件********************************/
#include <at89x52.h>
#include <intrins.h>
/*********************************端口定义**********************************/
sbit DS1302_CLK = P1^0;
sbit DS1302_IO = P1^1;
sbit DS1302_RST = P1^2;
sbit K1 = P3^2;
sbit K2 = P3^3;
sbit DQ=P3^3;
/*******************************共阳LED段码表*******************************/
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6,0x7f};
/******************************定义全局变量*********************************/
unsigned char second,minute,hour,week,day,month,year; //秒、分、时、星期、日、月、年
//unsigned char minute1,hour1;
unsigned char second1,minute1,hour1,week1,day1,month1,year1;
unsigned char t1,t2,i;
unsigned char secondchar,minutechar,hourchar,weekchar,daychar,monthchar,yearchar;
unsigned char keysum ;
unsigned char key_s, key_v, tmp;
unsigned char key_s1, key_v1;
unsigned char tab1[10];
unsigned char dat; //定义全局变量
unsigned long dat1;
unsigned char ii,jj;
unsigned char RxdFlag;
//char code str[] = "www.jiundingantong.com ";
/*********************************定义全局变量******************************/
unsigned char tempL=0; //临时变量低位
unsigned char tempH=0; //临时变量高位
float temperature; //温度值
//串行口初始化程序
void Init_Com(void)
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
PCON = 0x00; // 波特率不倍增//
SCON = 0x50; // 串口工作方式1//
TH1 = 0xFd; // 9600Kbps//
TL1 = 0xFd;
TR1 = 1; // 启动定时器1,开启中断//
}
void send_char(unsigned char txd) // 传送一个字符
{
SBUF = txd; // 传送数据
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
/****************************************************************************
函数功能:延时子程序(温度显示部分用)
入口参数:k
出口参数:
****************************************************************************/
void delayy(unsigned int k)
{
unsigned int n;
n=0;
while(n < k)
{n++;}
return;
}
/****************************************************************************
函数功能:延时子程序(时间显示部分用)
入口参数:
出口参数:
****************************************************************************/
void delay1(void)
{
int k;
for(k=0;k<400;k++);
}
/****************************************************************************
函数功能:数码管显示子程序(正常显示温度)
入口参数:k
出口参数:
****************************************************************************/
void displayy(int k)
{
/*P2=0xfe;
P0=tab[k/1000];
delay1();
P2=0xfd;
P0=tab[k%1000/100];
delay1();*/
P2=0xff; //关闭P2口//
P2=0xfb; //温度显示的十位的位选//
P0=tab[k%100/10]; //温度显示的十位//
delay1();
P2=0xf7; //温度显示的个位的位选//
P0=tab[k%10]; //温度显示的个位//
delay1();
P2=0xdf; //字符C的位选//
P0=0xc6; //从DP段开始倒数:DP、G、F、E、D、C、B、A/11000110即16进制C6,显示字符
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -