描述: 4位共阳1寸数码管时钟,显示88:88样式,正常走时的时候,“:”1秒亮灭1次;调时间的的时候冒号熄灭
调时:按KEY1按键第1次分钟位闪烁,再按KEY2一次分钟加1,按KEY3一次分钟减1,长按连加连减;
按KEY1按键第2次小时位闪烁,再按KEY2一次小时加1,按KEY3一次小时减1,长按连加连减;
按KEY1按键第3次,秒从零开始累加,时钟回到正常走时;
校时的时候先调好时、分,分钟要比参考时间的分钟加1分,
再看参考时间的秒数到了59再按KEY1按键的第3次,这样对时就比较准了,因为KEY1按键按第3次后秒会清零。
加备用电池,掉电走时
KEY2键第2功能:非调时状态,为光控开关;
KEY3键第2功能:非调时状态,为显示切换开关;
DS18B20做温度检测, 可显示3个界面:1.实时时钟与温度轮流显示、2.只显示温度、3.只显示时间;
温度显示范围: -9.9℃~99.9℃;
增加数码管调亮度功能,自动10级亮度,P1.0接5.1K电阻上拉、光敏电阻下拉分压;
环境光线越亮,数码管越亮,反之数码管越暗,晚上看不刺眼。
实物通过.
12MHz晶振,STC12C5A60S2+DS1302时钟芯片+DS18B20,
P0口接段位,P2^4~P2^7接pnp三极管控制4个共阳极。
制作出来的实物图如下:
/*********************************************************************************
描述: 4位共阳数码管时钟,显示88:88样式,正常走时的时候,“:”1秒闪烁2次;调时间的的时候冒号熄灭
调时:按KEY1按键第1次分钟位闪烁,再按KEY2一次分钟加1,按KEY3一次分钟减1,长按连加连减;
按KEY1按键第2次小时位闪烁,再按KEY2一次小时加1,按KEY3一次小时减1,长按连加连减;
按KEY1按键第3次,秒从零开始累加,时钟回到正常走时;
校时的时候先调好时、分,分钟要比参考时间的分钟加1分,
再看参考时间的秒数到了59再按KEY1按键的第3次,这样对时就比较准了。
加备用电池,掉电走时
KEY2键第2功能:非调时状态,为光控开关;
KEY3键第2功能:非调时状态,为显示切换开关;
DS18B20做温度检测,实时时钟与温度轮流显示;
温度显示范围: -9.9℃~99.9℃;
增加数码管调亮度功能,按键10级亮度P1.0接5.1K电阻上拉、光敏电阻下拉分压;
环境光线越亮,数码管越亮,反之数码管越暗。
实物通过.
12MHz晶振,STC12C5A60S2+DS1302时钟芯片+DS18B20,
P0口接段位,P2^4~P2^7接pnp三极管控制4个共阳极。
**********************************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit TSCLK = P2^0;//时钟线
sbit TIO = P2^1;//数据线
sbit TRST = P2^2;//使能端
sbit key1 = P3^0; //设置键
sbit key2 = P3^1; //加 /光控开关键(校时的时候做加键,反之为光控开关)
sbit key3 = P3^2; // 减/显示切换键
sbit DQ = P2^3; //DS18B20数据口
sbit w1 = P2^4; //设置位驱动口
sbit w2 = P2^5;
sbit w3 = P2^6;
sbit w4 = P2^7;
sbit w5 = P3^7; //此位不显示
sbit dd = P1^4; //蜂鸣器控制端
uchar xs=0; //显示切换计数变量
uchar knum,shan_cont;
char shi,fen,miao;
uchar ba=40;
uint mh,mh_count,count;
bit shan; //校时闪烁标志位
uchar s=0; //显示负号
uint temp; //温度值
bit flag; //轮流显示标志位
bit flag_gk; //光控标志位
bit flag_js=0; //自动校时标志
bit flag_fm; //蜂鸣器启动标志
uchar fm; //蜂鸣器计时变量
/***************************************定义转换控制寄存器控制位*****************************************/
#define ADC_POWER 0X80 //电源控制位
#define ADC_FLAG 0X10 //转换结束标志位
#define ADC_START 0X08 //转换开始位
/*********************************************定义AD转换速度*********************************************/
#define ADC_SPEEDLL_540 0X00
#define ADC_SPEEDLL_360 0X20
#define ADC_SPEEDLL_180 0X40
#define ADC_SPEEDLL_90 0X60
/***********写时分秒地址************/
#define write_shi 0x84
#define write_fen 0x82
#define write_miao 0x80
#define write_ram 0xc0
/***********读时分秒地址************/
#define read_shi 0x85
#define read_fen 0x83
#define read_miao 0x81
#define read_ram 0xc1
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x46,0xbf};//共阳段码 (0--9、黑屏、C、-)
/*********************************************************************************************************
** 函数功能 :延时函数
** 函数说明 :利用软件延时,占用CPU
** 入口参数 :time:需要延时的时间,
** 出口参数 :无
*********************************************************************************************************/
void Delay_ms(uint time)
{
uint i,j;
for(i = 0;i < time;i ++)
for(j = 0;j < 45;j ++);
}
/******************************/
//void Delay_1(uint time)
//{
// uint i,j;
// for(i = 0;i < time;i ++)
// for(j = 0;j < 600;j ++);
//}
/*********************************************************************************************************
** 函数功能 :延时函数
** 函数说明 :利用软件延时,占用CPU,经调试最小单位大约为1us
** 入口参数 :time:需要延时的时间,单位us
** 出口参数 :无
*********************************************************************************************************/
void delay(uchar n)
{
while (n--)
{
_nop_();
_nop_();
}
}
/*************蜂鸣器*****************/
//void didi(uchar i)
//{
// uchar x;
// for(x = i; x >0; x--)
// {
// dd = 0;
// Delay_1(200);
// dd = 1;
// Delay_1(200);
// }
//}
/*****************DS18B20******************/
void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command
{
DQ = 1; //DQ复位,不要也可行。
delay(1); //稍做延时
DQ = 0; //单片机拉低总线
//delay(250);
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』