求:一个基于51单片机的数字时钟程序

系统放案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,辅以闹钟模块,温度采集模块、日期提醒、键盘时间调整:
相关元器件是:
1、温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为-55℃~125℃,可编程为9位~12位A/D转换精度,测温分辨率达到0.0625℃,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信
2、时钟模块采用DS1302芯片,、
3、存储器采用Atmel公司的AT24C02芯片。
4、LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作时电流仅2.0mA/5.0V。
实现功能:
A:(调整切换键)进行时间、闹铃以及生日的设置,调整内容切换。
B: (调整加减/生日的设定)在时间显示界面中按A键后,进入时间调整。按B键对应闪烁内容加1;在时间显示界面中长按改建进入圣体信息设定,按A键选择调整内容,按B键加1,C键减1,D减退出设定,当设定生日到时,当日七点整第一次响铃提醒,以后每隔一小时整点提醒,直至当日晚上22点后最后一次提醒。
C:(调整减/日期提醒)在时间显示界面中按A键后,进入时间调整。按C键对应闪烁内同加1;在时间显示界面中常按A键后,进入日期提醒查看。
D (退出键/闹铃设定)在各种设定模式(时间、生日、闹铃)下,按该键退出设定;若在时间显示界面中短按键后,则进入闹铃、生日信息查看;长按则进行闹铃设定。
E:(屏幕背光键):按下该键不放则屏幕背光。调整左上方的蓝色变阻器课调整LCD显示灰度;调整右上方的蓝色编著器可调整LCD背光的亮度。(注:系统再不进行日和操作时,10秒后自动关闭屏幕,按任意键返回)
F:(复位键)按下该键系统复位,系统从头开始执行程序,如果与长按可按下改嫁进行系统复位,复位不会造成时间、生日、和闹铃等细细的丢失。
帮我找一些资料也行啊

给你ds18b20温度传感器代码你参考,我的空间还有些资料

/****************************************
//DS18B20温度传感器//
//作者:jammylee
//日期:2008-2-25
//版本:V1.0
//晶振:12MHZ
****************************************/

//包含头文件
#include<reg51.h>
#include<stdio.h>

/*****************************************************/
typedef unsigned char uint8; //定义八位无符号变量

/*****************************************************/
//定义引脚(根据硬件改变)
sbit highbit = P2^7;
sbit lowbit = P2^6;
sbit DQ = P3^0; //温度传感器数据引脚通信定义

/**********************************************************************************************/
unsigned char Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //定义数字显示数组
//0, 1, 2 3 4 5 6 7 8 9
/**********************************************************************************************/
//定义延时子函数
void mDelay(uint8 Delay)
{
while(Delay--);
}

/************************************************************/
//温度传感器DS18B20的初始化函数
Init_DS18B20(void)
{
uint8 x = 0;
DQ = 1; //DQ复位信号
mDelay(8); //延时
DQ = 0; //将DQ电平拉低
mDelay(80); //延时大于480us
DQ = 1; //将DQ电平拉高
mDelay(14); //延时
x = DQ; //如果x=0则初始化成功,x=1则初始化失败
mDelay(20); //延时
}

/************************************************************/
//读一个字节
ReadOneChar(void)
{
uint8 i = 0;
uint8 dat = 0;
for(i=8;i>0;i--)
{
DQ = 0; //低电平脉冲信号
dat>>=1; //dat右移一位
DQ = 1; //高低平脉冲信号
if(DQ)
{
dat |= 0x80;
}
mDelay(4);//延时
}
return(dat); //返回dat值
}

/************************************************************/
//写一个字节
WriteOneChar(uint8 dat)
{
uint8 i = 0;
for(i=8;i>0;i--)
{
DQ = 0; //低电平脉冲信号
DQ = dat&0x01;
mDelay(5);//延时
DQ = 1; //高电平脉冲信号
dat >>= 1;//dat右移一位
}
mDelay(4);
}

/************************************************************/
//读取温度
ReadTemperature(void)
{
uint8 L = 0; //定义温度高八位
uint8 H = 0; //定义温度低八位
uint8 temp = 0;
Init_DS18B20(); //温度传感器DS18B20初始化
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
L = ReadOneChar(); //读取温度值低位
H = ReadOneChar(); //读取温度值高位
L = L>>4;
temp = H<<4;
temp = temp|L;
return(temp);

}

/******************************************************************/
//温度显示函数

void DisplayTemperture(uint8 temp)
{
P0 = Code[temp%10];
lowbit = 0;
mDelay(100);
lowbit = 1;

P0=Code[temp/10];
highbit = 0;
mDelay(100);
highbit = 1;
}

/*******************************************************************/
//主函数
void main(void)
{
uint8 temp;
while(1) //主循环
{
temp = ReadTemperature();
DisplayTemperture(temp);
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-29
这么多要求,怎么写,很长时间的。还是自己慢慢写吧,要不找专人写吧。
相似回答