×
单片机 > 单片机程序设计 > 详情

1寸数码管时钟+12C5A60S2单片机+自动亮度+时间温度轮流显示

发布时间:2024-04-23 发布时间:
|

描述: 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);

[1] [2] [3] [4] [5] [6] [7] [8]
数码管时钟12C5A60S2单片机自动亮度轮流显示

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM基础知识八