单片机电子时钟Word文档下载推荐.docx

上传人:b****5 文档编号:19065554 上传时间:2023-01-03 格式:DOCX 页数:22 大小:19.99KB
下载 相关 举报
单片机电子时钟Word文档下载推荐.docx_第1页
第1页 / 共22页
单片机电子时钟Word文档下载推荐.docx_第2页
第2页 / 共22页
单片机电子时钟Word文档下载推荐.docx_第3页
第3页 / 共22页
单片机电子时钟Word文档下载推荐.docx_第4页
第4页 / 共22页
单片机电子时钟Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机电子时钟Word文档下载推荐.docx

《单片机电子时钟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机电子时钟Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

单片机电子时钟Word文档下载推荐.docx

//用于存放闹钟的时间:

时分和闹钟的标志位

voidReset_18B20(void);

//ds18b20复位程序

voidWait_18B20();

//等待程序,等待ds18b20应答

bitReadbit_18B20(void);

//读取一个bit的数据

unsignedcharReadbyte_18B20(void);

//读取一个字节的数据

voidWritebyte_18B20(unsignedcharb);

//写一个字节(控制字)

voidConvert(void);

//开始转换

voidRead_18B20(void);

//读取ds18b20

voidwrite_1302_byte(unsignedchard);

//向1302写入一字节数据d

unsignedcharread_1302_byte(void);

//从1302读出一字节数据并返回

voidwrite_1302_reg(unsignedcharadd,unsignedchard);

//向1302地址add处写入数据d

unsignedcharread_1302_reg(unsignedcharadd);

//从1302地址add处读出数据并返回

voidon_off_1302(unsignedcharch);

//启动/停止计时,gate=0时启动计时,gate!

=0时停止计时

voidhour_mode_1302(unsignedcharch);

//时间显示方式设置,ch=0时为24小时格式,ch!

=0时为12小时格式

voidwrite_1302_time(unsignedchar*time);

//设置时间

voidread_1302_time(unsignedchartime[]);

//读出时间

//**********************************************************************

voidLCD_en_com(unsignedcharcommand);

//写命令指令

voidLCD_en_dat(unsignedchartemp);

//写数据指令

voidLCD_set_xy(unsignedcharx,unsignedchary);

//设置显示地址:

X为横轴(0-15),Y为纵轴(0-1).

voidLCD_write_char(unsignedx,unsignedchary,unsignedchardat);

//写一个字符

voidLCD_write_string(unsignedcharx,unsignedchary,unsignedchar*s);

//写一个字符串

voidLCD_write_int(unsignedcharx,unsignedchary,unsignedintintdat);

//写无字符型整形数

voidLCD_init(void);

//lcd初始化

voidLCD_Read_BF(void);

//LCD读忙信号

/*

LCD1602.c

CreatedbyZhengxihui

email:

zhengxihui0506@

May2007

*/

voidLCD_Read_BF(void)

{

LCD1602_RW=HIGH;

//RW1

LCD1602_RS=LOW;

//RS0

LCD1602_EN=HIGH;

//EN1读忙信号

LCDIO=LCDIO&

0x0F|0xf0;

while(LCDIO&

MSB);

LCD1602_EN=LOW;

}

voidLCD_en_write(void)//EN端产生一个高电平脉冲,写LCD

_nop_();

//*************************************

voidLCD_en_com(unsignedcharcommand)

LCD_Read_BF();

//RS0写命令

LCD1602_RW=LOW;

//RW0

LCDIO&

=0x0F;

LCDIO=command&

0xf0|LCDIO&

0x0f;

//先发送高四位数据

LCD_en_write();

command=command<

<

4;

//发送低四位数据

//*********************************

voidLCD_en_dat(unsignedchardat)

LCD1602_RS=HIGH;

//RS1写数据

LCDIO&

LCDIO=dat&

dat=dat<

//**************设置显示地址:

X为横轴(0-15),Y为纵轴(0-1)********************

voidLCD_set_xy(unsignedcharx,unsignedchary)

unsignedcharaddress;

x&

=0x0f;

if(!

y)

address=0x80+x;

else

address=0xc0+x;

LCD_en_com(address);

//***************写一个字符:

X为横轴(0-15),Y为纵轴(0-1)**********

voidLCD_write_char(unsignedx,unsignedchary,unsignedchardat)

LCD_set_xy(x,y);

LCD_en_dat(dat);

//****************写一个字符串***************************************

voidLCD_write_string(unsignedcharx,unsignedchary,constunsignedchar*s)

while(*s)

LCD_en_dat(*s);

s++;

//****************写一个无字符整数***************************************

voidLCD_write_int(unsignedcharx,unsignedchary,unsignedintintdat)

unsignedchari=0,temp[5];

if(intdat==0)

LCD_en_dat(0x30);

return;

while(intdat/10||intdat%10)

temp[i]=intdat%10;

intdat/=10;

i++;

while(i)

i--;

LCD_en_dat(temp[i]+0x30);

//*****//LCD的初始化函数(刚上电的时候一定要调用一次)//*********************

voidLCD_init(void)

LCD_en_com(DATA_MODE);

//设计四位数据线模式

LCD_en_com(OPEN_SCREEN);

//打开LCD显示

LCD_en_com(DISPLAY_ADDRESS);

//设计首地址

CLEARSCREEN;

//清屏

voidReset_18B20(void)//ds18b20复位程序

unsignedchari;

DS18B20=0;

i=110;

while(i>

0)i--;

DS18B20=1;

i=6;

voidWait_18B20()//等待程序,等待ds18b20应答

while(DS18B20);

while(~DS18B20);

bitReadbit_18B20(void)//读取一个bit的数据

bitb;

b=DS18B20;

i=13;

returnb;

unsignedcharReadbyte_18B20(void)//读取一个字节的数据

unsignedchari,j,b;

b=0;

for(i=1;

i<

=8;

i++)

j=Readbit_18B20();

b=(j<

7)|(b>

>

1);

//又玩野

voidWritebyte_18B20(unsignedcharb)//写一个字节(控制字)

unsignedcharj,i;

bittemp;

for(j=1;

j<

j++)

temp=b&

0x01;

b=b>

1;

if(temp)//写“1”

else//写“0”

voidConvert(void)//开始转换

Reset_18B20();

Wait_18B20();

//等待应答脉冲

Writebyte_18B20(0xcc);

//跳过序列号脉冲

Writebyte_18B20(0x44);

//转换命令

voidRead_18B20(void)//读取ds18b20

Convert();

//跳过ROM

Writebyte_18B20(0xbe);

//发送读取命令

L_18B20=Readbyte_18B20();

//读取低八位数据

H_18B20=Readbyte_18B20();

//读取高八位数据

if(H_18B20>

0x7f)//最高位为1时温度是负

L_18B20=~L_18B20;

//补码转换,取反加一

H_18B20=~H_18B20+1;

fg=1;

//读取温度为负时fg=1

zhengshu=L_18B20/16+H_18B20*16;

//整数部分

xiaoshu1=(L_18B20&

0x0f)*10/16;

//小数第一位

xiaoshu2=(L_18B20&

0x0f)*100/16%10;

//小数第二位

/*================================================================*/

/*向1302当前地址处写入1字节数据*/

voidwrite_1302_byte(unsignedchard)

ACC=d;

//将8位数据写入ACC

for(i=8;

i>

0;

i--)//循环8次将ACC8位数据从低位到高位写入1302

IO=ACC0;

//将ACC的最低位转送到IO口

SCLK=1;

//上升沿写入1位数据

SCLK=0;

ACC=ACC>

//将ACC次低位变为最低位

/*=================================================================*/

/*从1302的当前地址处读出1字节数据*/

unsignedcharread_1302_byte(void)

i--)

ACC7=IO;

//时钟下降沿读1位数据

return(ACC);

/*将数据Data写入1302寄存器add处*/

voidwrite_1302_reg(unsignedcharadd,unsignedchard)

RST=0;

RST=1;

write_1302_byte(add);

//将1302的指针移到add处

write_1302_byte(d);

//往add处写入数据

RST=0;

//停止写数据

/*=================================================================*/

/*读寄存器add处的值*/

/*==================================================================*/

unsignedcharread_1302_reg(unsignedcharadd)

unsignedchard;

RST=1;

d=read_1302_byte();

return(d);

/*设置时间,time[0]-time[6]数据存放顺序为:

秒,分,时,日,月,星期,年*/

/*===================================================================*/

voidwrite_1302_time(unsignedchar*time)

unsignedcharadd=0x80;

//地址add初值(秒),偶数地址为只写

unsignedchartimeBCD[7];

//用以存放time数据的BCD码值

bdataunsignedcharl,h;

//单位变量,分别存放时间数据(8421BCD码)的低4位和高4位

for(i=0;

7;

i++)//将时间数据转为BCD码放入timeBCD中

l=time[i]%10;

h=time[i]/10;

timeBCD[i]=h*16+l;

write_1302_reg(0x8e,0x00);

//禁止写

write_1302_reg(add,timeBCD[i]);

//将时间数据写入1302对应的寄存器

add+=2;

//地址移动,确保地址为偶数

write_1302_reg(0x8e,0x80);

//允许写

/*==================================================================*/

/*读取当前时间*/

/*==================================================================*/

voidread_1302_time(unsignedchartime[])

unsignedcharadd=0x81;

//设置地址add初值(秒),奇数为只读

//单位变量,分别存放时间数据(8421BCD码)的低4位和高4位,用以进行十进制转换

time[i]=read_1302_reg(add);

//将时间数据(8421BCD码)从1302对应的寄存器中读出

l=time[i]&

//l存放time的低4位,即个位

h=(time[i]>

4)&

//h存放time的高4位,即十位

time[i]=h*10+l;

//时间数据以十进制形式放进time[i]中

//地址移动,确保地址为奇数

/*======================================================================================*/

/*=====================================================================================*/

/*启动/停止计时,gate=0时启动计时,gate!

=0时停止计时*/

voidon_off_1302(unsignedcharch)

unsignedchartemp;

if(ch)

temp=read_1302_reg(0x80);

//将秒当前值读入temp暂存

temp=temp|0x80;

//将秒数据最高位置1

write_1302_reg(0x80,temp);

//将置1后的秒数据写入秒寄存器,以定止计时

temp=temp&

0x80;

//将秒数据最高位置0

//将最高位置0后的秒数据写入秒寄存器,以启动计时

/*=========================================================================================*/

/*时间显示方式设置,ch=0时为24小时格式,ch!

=0时为12小时格式*/

voidhour_mode_1302(unsignedcharch)

temp=read_1302_reg(0x85);

//将小时当前值读入temp暂存

//将小时数据最高位置1

write_1302_reg(0x84,temp);

//将置1后的小时数据写入小时寄存器,变为12小时格

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

当前位置:首页 > 求职职场 > 社交礼仪

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

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