求51单片机12864和ds1307时钟程序

求51单片机12864和ds1307时钟程序,第1张

#include <reg51.h>

#include <string.h>

#include "ds1302.h"

#include "menu.h"

#include "lcd12864.h"

#define uchar unsigned char

#define uint unsigned int

sbit led=P3^7

uchar temp,keyval

uchar usern=0   //用户序号

//struct mlist *nuser

uchar disdat[16]

void displaykey()

{

keyval=0xff

P1=0xfe

temp=P1

temp&=0xf0

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

delay(50)

temp=P1 

temp=temp&0xf0

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1

switch (temp)

{

  case 0xee:keyval='0'break

  case 0xde:keyval='1'break

  case 0xbe:keyval='2'break

  case 0x7e:keyval='3'break

default: break

}

}

}

while((P1&0xf0) != 0xf0)

//判断第二行键盘

P1=0xfd

temp=P1

temp=temp&0xf0

if(temp!=0xf0)

{

delay(50)

temp=P1 

temp=temp&0xf0

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1

switch (temp)

{

  case 0xed:keyval='4'break

  case 0xdd:keyval='5'break

  case 0xbd:keyval='6'break

  case 0x7d:keyval='7'break

default: break

}

}

}

while((P1&0xf0) != 0xf0)

//判断第三行键盘

P1=0xfb

temp=P1

temp=temp&0xf0

if(temp!=0xf0)

{

delay(50)

temp=P1 

temp=temp&0xf0

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1

switch (temp)

{

  case 0xeb:keyval='8'break

  case 0xdb:keyval='9'break

  case 0xbb:keyval='a'break

  case 0x7b:keyval='b'break

default:break

}

}

}

while((P1&0xf0) != 0xf0)

//判断第四行键盘

P1=0xf7

temp=P1

temp=temp&0xf0

if(temp!=0xf0)

{

delay(50)

temp=P1 

temp=temp&0xf0

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1

switch (temp)

{

  case 0xe7:keyval='c'break

    case 0xd7:keyval='d'break

case 0xb7:keyval='e'break

  case 0x77:keyval='f'break

default:break

}

}

}

while((P1&0xf0) != 0xf0)

}

void distime(void)

{

uchar *cal="年月日"

disdat[0]='2'

disdat[1]='0'

disdat[2]='0'+TIME[6]/16      //年

disdat[3]='0'+(TIME[6]&0x0f)

disdat[4]=cal[0]

disdat[5]=cal[1]

disdat[6]='0'+TIME[4]/16      //月

disdat[7]='0'+(TIME[4]&0x0f)

disdat[8]=cal[2]

disdat[9]=cal[3]

disdat[10]='0'+TIME[3]/16      //日

disdat[11]='0'+(TIME[3]&0x0f)

disdat[12]=cal[4]

disdat[13]=cal[5]

disdat[14]=0

displaystr(1,2,disdat)

disdat[0]='0'+TIME[2]/16      //时

disdat[1]='0'+(TIME[2]&0x0f)

disdat[2]=':'

disdat[3]='0'+TIME[1]/16      //分

disdat[4]='0'+(TIME[1]&0x0f)

disdat[5]=':'

disdat[6]='0'+TIME[0]/16      //秒

disdat[7]='0'+(TIME[0]&0x0f)

disdat[8]=0

displaystr(4,4,disdat)

}

void init_timer(void)

{

TMOD=0x20

TH1=0xfd

TL1=0xfd

TR1=1

SCON=0x40

}

main()

{

uchar num

InitLCD()//初始LCD  

Ds1302Init()

init_timer()

ClearScreen(0)

delay(200)

num=0

while(1)

{

Ds1302ReadTime()

distime()  

displaykey()

delay(200)

}

}

淘宝来的DS1307模块(买前请注意标价是否包含CR2032电池),工作电压VCC - 5V.(其他DS1307电压可能是3.3V,用前请查阅说明书)

使用以下命令查看I2C设备(PI B+ "sudo i2cdetect -y 1"PI A "sudo i2cdetect -y 0")

本例使用的DS1307模块包含EEPROM 24C32N 和 DS1307N两个模块,分别占用0x50和0x68

末尾添加以下一行并保存:

重启PI后,

设备 0x68 会变成0xUU, 表示设备已被识别

使用以下命令 *** 作时钟模块

以AT89S52单片机为控制核心,通过实时时钟芯片DS1307和数字温度传感器DS18B20构成了一个多功能的数字时钟系统。详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。系统采用液晶LCD1602作为显示器,具有实时时间与日历显示、环境温度显示、按键调时、闹铃定时等功能。软件程序采用均采用C语言编写,便于移植与升级。下载地址: http://share.dzkf.cn/down/2008/0203/file_897.html不过要用点数的 1点 呵呵 你去想办法挣分去吧


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11327980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存