数码管时钟V12.docx

上传人:b****2 文档编号:17166093 上传时间:2023-07-22 格式:DOCX 页数:42 大小:290.79KB
下载 相关 举报
数码管时钟V12.docx_第1页
第1页 / 共42页
数码管时钟V12.docx_第2页
第2页 / 共42页
数码管时钟V12.docx_第3页
第3页 / 共42页
数码管时钟V12.docx_第4页
第4页 / 共42页
数码管时钟V12.docx_第5页
第5页 / 共42页
数码管时钟V12.docx_第6页
第6页 / 共42页
数码管时钟V12.docx_第7页
第7页 / 共42页
数码管时钟V12.docx_第8页
第8页 / 共42页
数码管时钟V12.docx_第9页
第9页 / 共42页
数码管时钟V12.docx_第10页
第10页 / 共42页
数码管时钟V12.docx_第11页
第11页 / 共42页
数码管时钟V12.docx_第12页
第12页 / 共42页
数码管时钟V12.docx_第13页
第13页 / 共42页
数码管时钟V12.docx_第14页
第14页 / 共42页
数码管时钟V12.docx_第15页
第15页 / 共42页
数码管时钟V12.docx_第16页
第16页 / 共42页
数码管时钟V12.docx_第17页
第17页 / 共42页
数码管时钟V12.docx_第18页
第18页 / 共42页
数码管时钟V12.docx_第19页
第19页 / 共42页
数码管时钟V12.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数码管时钟V12.docx

《数码管时钟V12.docx》由会员分享,可在线阅读,更多相关《数码管时钟V12.docx(42页珍藏版)》请在冰点文库上搜索。

数码管时钟V12.docx

数码管时钟V12

数码管时钟V1.2

Author:

吴林新

Date:

2012/02/14

群:

110567841

此次作品开源仅面向初级单片机的朋友,高手勿喷!

此作品软硬件设计系作者原创,此次代码开源,是希望有兴趣的朋友多多指教,发挥大家的创意;由于时间仓促,有不到之处敬请原谅;

此数码管时钟的设计其目的不是教大家如何做个带温度的钟,而是它包含的内容,几乎包含了51单片机80%以上的知识点,软件上采用多文件结构也是本设计的一大亮点

代码如下:

#ifndef_MAIN_H_

#define_MAIN_H_

#include

#include

//---------------------------------

typedefunsignedcharuchar;

typedefunsignedintuint;

//******定义端口***********

sbitSetFlag=P2^1;//设置键

sbitBUZZ=P2^7;

sbitCOM1=P3^5;

sbitCOM2=P3^6;

sbitCOM3=P3^7;

//-----------预处理----------------

#include"max7219_1.h"

#include"max7219_2.h"

#include"max7219_3.h"

#include"ds18b20.h"

#include"24c02.h"

#include"1302.h"

#include"74HC595.H"

#include"GetKeyVal.H"

#include"workmode.h"

#include"setmode.h"

//******函数声明***********

voiddelay(uintt);

voidSettime_1302(void);

externvoidKeying(void);

externvoidSaveRing(uchari);

externvoidAlarmTempSensor(void);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_MAX7219_1_H

#define_MAX7219_1_H

sbitDIN1=P0^0;

sbitCLK1=P0^2;

sbitLOAD1=P0^1;

externvoidMax7219Init_1(void);

externvoidSendData_1(unsignedcharaddr,unsignedchardat);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_MAX7219_2_H

#define_MAX7219_2_H

sbitDIN2=P0^3;

sbitCLK2=P0^5;

sbitLOAD2=P0^4;

externvoidMax7219Init_2(void);

externvoidSendData_2(unsignedcharaddr,unsignedchardat);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_MAX7219_3_H

#define_MAX7219_3_H

sbitDIN3=P0^6;

sbitCLK3=P2^0;

sbitLOAD3=P0^7;

voidMax7219Init_3(void);

voidSendData_3(unsignedcharaddr,unsignedchardat);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_DS18B20_H

#define_DS18B20_H

sbitData=P2^2;

externunsignedintTempSensor[9];

externvoidConfigTempSensor(void);

externbitReadTempSensor(void);

externvoidTempSensorConvert(void);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_24C02_H

#define_24C02_H

#include

#define_Nop()_nop_()

sbitSDA=P3^4;

sbitSCL=P3^3;

externvoidINIT_I2C(void);

externbitSendMultiByte(uintslaveaddr,uintsubaddr,uchar*ch,ucharlen);

externbitReadMultiByte(uintslaveaddr,uintsubaddr,uchar*ch,ucharlen);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_1302_H_

#define_1302_H_

//-------------------------------------------------------------------------------------------------------

#defineCONTROL_REGISTER0x8e//写控制寄存器

#defineWRITE_SEC0x80

#defineREAD_SEC0x81

#defineWRITE_MINUTE0x82

#defineREAD_MINUTE0x83

#defineWRITE_HOUR0x84

#defineREAD_HOUR0x85

#defineWRITE_DATE0x86

#defineREAD_DATE0x87

#defineWRITE_MONTH0x88

#defineREAD_MONTH0x89

#defineWRITE_WEEK0x8a

#defineREAD_WEEK0x8b

#defineWRITE_YEAR0x8c

#defineREAD_YEAR0x8d

//-------------------------------------------------------------------------------------------------------

#defineFlashYear0

#defineFlashMonth1

#defineFlashDate2

#defineFlashHour3

#defineFlashMin4

#defineFlashSec5

#defineFlashWeek6

#defineAllValidFlag()(year=month=date=hour=min=sec=week=1)

externbityear,month,date,hour,min,sec,week;

typedefstruct

{

ucharsec;

ucharmin;

ucharhour;

uchardate;

ucharmonth;

ucharweek;

ucharyear;

uchartep;

uchardispcal[18];

}TIME;

externTIMEtime;

//--------INTERFACETOHARDWARE--------------

sbitSCK=P3^1;//时钟

sbitIO=P3^0;//数据

sbitRST=P3^2;//片选

//-------------------------------------------

voidwrite_ds1302_byte(uchardat);//单字节写

ucharread_ds1302_byte(void);//单字节读

voidInitial_1302(void);//初始化1302

externvoidGet1302time(void);//读时间

voidset1302(uchar*buff);//设置1302

voidRd1302Clk(uchar*buff);

voidWr1302Clk(uchar*buff);

externvoidTimeVal(void);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_74HC595_H

#define_74HC595_H

//------------interfacetohardware-------------

sbitSH_CP=P2^3;

sbitST_CP=P2^5;

sbitDS=P2^4;

sbitOE=P2^6;

externvoidSend595Data(uchardat);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_GETKEYVAL_H

#define_GETKEYVAL_H

#definePortValP1

externucharKeyVal;

externbitChgFlag;

externvoiddelayms(uchart);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_WORKMODE_H

#define_WORKMODE_H

voidWorkMode(void);

voidQuarter_Bell(void);

externvoiddisplay(void);

externvoidDispSet(void);

externvoidAlarmDisplay(void);

#endif

//----------------------------------------------------------------------------------------------------------------------------

#ifndef_SETMODE_H

#define_SETMODE_H

#defineEnter1

#defineBack2

#defineINC3

#defineDEC4

#defineAlarmClockSet5

externvolatileucharflk;

externucharAlarmBuff[3];

voidLedFlicker(void);

voidSetMode(void);

voidSetYear(void);

voidSetMonth(void);

voidSetDate(void);

voidSetHour(void);

voidSetAlarmHour(void);

voidSetMin(void);

voidSetAlarmMin(void);

voidSetSec(void);

voidSetAlarmSec(void);

voidSetWeek(void);

bitGetKeyCal(void);

#endif

//----------------------------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------------------------

#include"main.h"

voidmain()

{

ucharn=70;

INIT_I2C();

ConfigTempSensor();

Initial_1302();

Max7219Init_1();

Max7219Init_2();

Max7219Init_3();

ReadMultiByte(0xa0,0,AlarmBuff,3);

while(n--)

{

Get1302time();

ReadTempSensor();

TempSensorConvert();

display();

}

while

(1)

{

if(SetFlag)

{

WorkMode();//工作模式

}

else

{

SetMode();//设置模式

}

}

}

voidKeying(void)//按键声

{

BUZZ=0;

delay(400);

BUZZ=1;

}

voidSaveRing(ucharw)

{

unsignedchari;

for(i=w;i>0;i--)

{

BUZZ=0;

delay(800);

BUZZ=1;

delay(800);

}

}

voidAlarmTempSensor(void)//1820错误报警

{

unsignedchari;

for(i=3;i>0;i--)

{

BUZZ=0;

delay(800);

BUZZ=1;

delay(800);

}

}

voiddelay(uintt)

{

ucharj;

for(;t>0;t--)

for(j=10;j>0;j--);

}

//----------------------------------------------------------------------------------------------------------------------------

#include"main.h"

//01234567

unsignedcharcodeSEGCODE7219[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,

//89abcdefo-黑屏

0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x63,0x01,0x00};

ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6};//数码管译码

staticunsignedcharRing;

ucharRingFlag;

voidWorkMode()

{

ucharLastMin,LastSec;

AllValidFlag();

LastMin=0xff;

LastSec=0xff;

RingFlag=0;

while(SetFlag)

{

Get1302time();

if(LastSec!

=time.sec)

{

LastSec=time.sec;

if(RingFlag==1)Quarter_Bell();

ReadMultiByte(0xa0,0,AlarmBuff,3);

if(time.hour==AlarmBuff[0]&&time.min==AlarmBuff[1]&&time.sec==AlarmBuff[2])

{

Ring=10;

RingFlag=1;

}

if(LastMin!

=time.min)

{

if(ReadTempSensor())TempSensorConvert();

elseAlarmTempSensor();

LastMin=time.min;

}

}

display();

}

}

voidQuarter_Bell()

{

if(Ring!

=0)

{

Ring--;

BUZZ=0;

delay(400);

BUZZ=1;

}

else

{

RingFlag=0;

}

}

voiddisplay(void)

{

unsignedchari;

if(year==0){time.dispcal[0]=18;time.dispcal[1]=18;}

else{time.dispcal[0]=time.year/16;time.dispcal[1]=time.year%16;}

if(month==0){time.dispcal[3]=18;time.dispcal[4]=18;}

else{time.dispcal[3]=time.month/16;time.dispcal[4]=time.month%16;}

if(date==0){time.dispcal[6]=18;time.dispcal[7]=18;}

else{time.dispcal[6]=time.date/16;time.dispcal[7]=time.date%16;}

if(hour==0){time.dispcal[8]=18;time.dispcal[9]=18;}

else{time.dispcal[8]=time.hour/16;time.dispcal[9]=time.hour%16;}

if(min==0){time.dispcal[11]=18;time.dispcal[12]=18;}

else{time.dispcal[11]=time.min/16;time.dispcal[12]=time.min%16;}

if(sec==0){time.dispcal[14]=18;time.dispcal[15]=18;}

else{time.dispcal[14]=time.sec/16;time.dispcal[15]=time.sec%16;}

for(i=1;i<9;i++)//年月日

{

SendData_1(i,SEGCODE7219[time.dispcal[i-1]]);//Max7219-1

}

for(i=1;i<9;i++)//时分秒

{

SendData_2(i,SEGCODE7219[time.dispcal[i+7]]);//Max7219-2

}

for(i=1;i<9;i++)//温度

{

if(i==3)SendData_3(i,SEGCODE7219[TempSensor[i-1]]|0x80);//Max7219-3

elseSendData_3(i,SEGCODE7219[TempSensor[i-1]]);

}

//----------------week-------------

if(week)

{

COM1=1;COM2=0;COM3=0;

Send595Data(table[time.dispcal[16]]);

delay(10);

COM1=0;COM2=1;COM3=0;

Send595Data(table[time.dispcal[17]]);

delay(10);

}

//---------------C------------------

COM1=0;COM2=0;COM3=1;

Send595Data(table[TempSensor[8]]);

delay(10);

}

voidDispSet(void)

{

uchari;

TimeVal();

for(i=1;i>9;i++)//年月日

{

SendData_1(i,SEGCODE7219[time.dispcal[i-1]]);//Max7219-1

}

for(i=1;i>9;i++)//时分秒

{

SendData_2(i,SEGCODE7219[time.dispcal[i+7]]);//Max7219-2

}

//----------------week-------------

Send595Data(table[time.dispcal[16]]);

COM1=1;COM2=0;COM3=0;

delay(10);

Send595Data(table[time.dispca

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2