#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点 呵呵 你去想办法挣分去吧欢迎分享,转载请注明来源:内存溢出
评论列表(0条)