单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc

上传人:b****2 文档编号:693928 上传时间:2022-10-12 格式:DOC 页数:13 大小:192.50KB
下载 相关 举报
单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc_第1页
第1页 / 共13页
单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc_第2页
第2页 / 共13页
单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc_第3页
第3页 / 共13页
单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc_第4页
第4页 / 共13页
单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc

《单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc》由会员分享,可在线阅读,更多相关《单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc(13页珍藏版)》请在冰豆网上搜索。

单片机C语言模块化编程之数码管显示电子万年历篇_精品文档.doc

数码管显示模块化显示电子万年历

数码管共阳极7407驱动共阴极max7221/7419驱动

Ds1302实时时间显示

Ds18b20温度显示芯片

/*delay.h*/

#ifndef_DELAY_H

#define_DELAY_H_

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(uintxms);//秒级延时

voiddelayms(uintxms); //毫秒级延时,不可以更改,若更改,DS18B20将显示异常

#endif

/*delay.c*/

#include"delay.h"

voiddelay(uintxms)

{

uinti;

ucharj;

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

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

}

voiddelayms(uintxms) //毫秒级别延时

{

while(xms--);

}

/*ds1302.h*/

#ifndef_DS1302_H_

#define_DS1302_H_

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitIO=P1^0;//ds1302跟单片机接口

sbitSCLK=P1^1;

sbitRST=P1^2;

externunsignedchardatetime[7];//存储获得的时间值

externvoidgettime(); //读取时间值函数

#endif

/*ds1302.c*/

#include

#include"ds1302.h"

uchardatetime[7]={0,0,0,0,0,0,0};//用来接收获得的时间值

voidwrite_a_byte_to_ds1302(ucharX)

{

uchari;

for(i=0;i<8;i++)

{

IO=X&0X01;

SCLK=1;

SCLK=0;

X>>=1;

}

}

ucharget_a_byte_from_ds1302()

{

uchari,b=0x00;

for(i=0;i<8;i++)

{

b|=_crol_((uchar)IO,i);

SCLK=1;

SCLK=0;

}

//returnb/16*10+b%16;//返回的BCD码转换为十进制

return(b>>4)*10+(b&0x0f);//注意运算的优先级

}

ucharread_data(ucharadd)

{

uchardat;

RST=0;

SCLK=0;

RST=1;

write_a_byte_to_ds1302(add);

dat=get_a_byte_from_ds1302();

SCLK=1;

RST=0;

returndat;

}

voidgettime() //ds1302读取当前时间存储在datetime中

{

uchari,add=0x81;

for(i=0;i<7;i++)

{

datetime[i]=read_data(add);

add+=2;

}

}

/*max7221.h*/

#ifndef_MAX7221_H_ //注:

Max7221只能用来驱动共阴数码管,对共阳的没效

#define_MAX7221_H_

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitDIN=P2^0; //max7221与单片机接口DIN..CSB..CLK..

sbitCSB=P2^1;

sbitCLK=P2^2;

sbitDIN1=P2^3;

sbitCSB1=P2^4;

sbitCLK1=P2^5;

externvoidwrite(unsignedcharaddr,unsignedchardat); //max7221写数据,转换数据函数,num的值为1,或者2,当num为1时,片选的是第一块Max7221,同理亦然。

externvoidwrite1(ucharaddr,uchardat);

externvoidinit(); //max7221初始化

externvoidinit1();

#endif

/*max7221.c*/

#include"max7221.h"

#include

voidwrite(ucharaddr,uchardat)// 写数据,写地址函数

{

uchari;

CSB=0;

for(i=0;i<8;i++)

{

CLK=0;

addr<<=1;

DIN=CY;

CLK=1;

_nop_();

_nop_();

CLK=0;

}

for(i=0;i<8;i++)

{

CLK=0;

dat<<=1;

DIN=CY;

CLK=1;

_nop_();

_nop_();

CLK=0;

}

CSB=1;

}

voidwrite1(ucharaddr,uchardat)

{

uchari;

CSB1=0;

for(i=0;i<8;i++)

{

CLK1=0;

addr<<=1;

DIN1=CY;

CLK1=1;

_nop_();

_nop_();

CLK1=0;

}

for(i=0;i<8;i++)

{

CLK1=0;

dat<<=1;

DIN1=CY;

CLK1=1;

_nop_();

_nop_();

CLK1=0;

}

CSB1=1;

}

voidinit()

{

write(0x09,0xff);//编码模式地址0x09,0x00-0xff,为1的则位选通

write(0x0a,0x07);//亮度地址0x0a,0x00-0x0f,0x0f时最亮

write(0x0b,0x07);//扫描数码管个数地址0x0c,最多扫描8只数码管

write(0x0c,0x01);//工作模式地址0x0c0x00:

关闭;0x01:

正常

}

voidinit1()

{

write1(0x09,0xff);

write1(0x0a,0x07);

write1(0x0b,0x07);

write1(0x0c,0x01);

}

/*ds18b20.h*/

#ifndef_DS18B20_H

#define_DS18B20_H

#include

#include"delay.h"

#include

#defineNOP(){_nop_(),_nop_(),_nop_(),_nop_()}

sbitDQ=P1^3;//DS18B20控制线,单线模式。

externbitng;//正负数标志位,ng=0,为正数,反之为负数,正数负数的处理方法不同,

externbitDS18B20_IS_OK; //为1时表示当前读取温度正常,否则读取失败。

externucharDisplay_Digit[4]; //读取的温度值转换后存在这个数组中

externvoidRead_Temperature();//读取当前温度值

externvoidProcess_Temperature(); //处理当前获得的温度值,正数,负数等。

#endif

/*ds18b20.c*/

#include"ds18b20.h"

//温度字符

ucharcodeTemperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};

//温度小数对照表

ucharcodedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

ucharCurrentT=0;//当前读取的温度整数部分

ucharTemp_Value[]={0x00,0x00};//从DS18B20读取的温度值

bitng=0; //正负数标志位,ng=0,为正数,反之为负数,正数负数的处理方法不同,

bitDS18B20_IS_OK=1; //为1时表示当前读取温度正常,否则读取失败。

ucharDisplay_Digit[4]={0,0,0,0};//读取的温度值转换后存在这个数组中

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

//初始化DS18B20

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

ucharInit_DS18B20()

{

ucharstatus;

DQ=1;delayms(8);DQ=0;delayms(90);DQ=1;delayms(8);

status=DQ;delayms(100);

DQ=1;

returnstatus;

}

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

//读一字节

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

ucharReadOneByte()

{

uchari,dat=0;

DQ=1;_nop_();

for(i=0;i<8;i++)

{

DQ=0;dat>>=1;DQ=1;_nop_();_nop_();

if(DQ)dat|=0x80;

delayms(30);

DQ=1;

}

returndat;

}

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

//写一字节

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

voidWriteOneByte(uchardat)

{

uchari;

for(i=0;i<8;i++)

{

DQ=

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

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1