资源简介
基于51单片机的课程设计,电子时钟设计,希望对同学们有帮助.

代码片段和文件信息
#include
#include“lcd1602.h“
#include“ds1302.h“
#include“ds18b20.h“
#define uint unsigned int
#define uchar unsigned char
uint b[6];
//年月日时分秒
uchar code row1[]={“2009-01-01“};
uchar code row2[]={“00:00:00“};
uchar year1[12]={312831303130313130313031};//平年
uchar year2[12]={312931303130313130313031};//润年
uchar j[6]={0x850x880x8b0x84+0x400x87+0x400x8a+0x40};//LCD地址
uchar ikjj=0wclock=0bigclock=0c=0num;
//i循环数 k温度缓存 jj地址位
uint temp;
sbit b1=P3^0;//设置
sbit b2=P3^1;//上调
sbit b3=P3^2;//下调
sbit b4=P3^3;//转换
sbit b5=P3^4;//闹钟
sbit speaker=P3^5;
lcdscan()
{
for(i=0;i<6;i++)
{
lcdwrite(j[i]);
lcdshuju(a[11-i*2]+0x30);
lcdwrite(j[i]+0x01);
lcdshuju(a[10-i*2]+0x30);
}
}
void key()
{
if(b1==0)
{
dsaddshuju(0x80(a[1]<<4)+a[0]+0x80);
while(b1==0)
{
for(i=0;i<6;i++)
{
b[i]=a[11-i*2+clock]*10+a[10-i*2+clock];
}
if(b4==0)
{
delay(3);
jj++;
if(jj==6)
{
jj=0;
}
}
if(b2==0)
{
delay(3);
b[jj]++;
if(b[5]==60)b[5]=0;
if(b[4]==60)b[4]=0;
if(b[3]==24)b[3]=0;
if((b[0]%4==0 && b[0]%100!=0) || b[0]%400==0){if(b[2]>year2[b[1]-1])b[2]=1;}
else {if(b[2]>year1[b[1]-1])b[2]=1;}
if(b[1]==13)b[1]=1;
if(b[0]==100)b[0]=0;
}
if(b3==0)
{
delay(3);
b[jj]--;
if(b[5]==-1)b[5]=59;
if(b[4]==-1)b[4]=59;
if(b[3]==-1)b[3]=23;
if((b[0]%4==0 && b[0]%100!=0) || b[0]%400==0){if(b[2]<=0)b[2]=year2[b[1]-1];}
else {if(b[2]<=0)b[2]=year1[b[1]-1];}
if(b[1]==0)b[1]=12;
if(b[0]==-1)b[0]=99;
}
for(i=0;i<6;i++)
{
a[11-i*2+clock]=b[i]/10;
a[10-i*2+clock]=b[i]%10;
}
lcdwrite(j[jj]);
lcdshuju(0);
lcdwrite(j[jj]+1);
lcdshuju(0);
delay(200);
lcdwrite(j[jj]);
lcdshuju(a[11-2*jj+clock]+0x30);
lcdwrite(j[jj]+1);
lcdshuju(a[10-2*jj+clock]+0x30);
delay(200);
if(b1==1)
{
dsaddshuju(0x80(a[1]<<4)+a[0]);
dson();
}
if(b5==0)clock=12;
}
}
}
void main()
{
speaker=0;
lcdrw=0;
dson();
lcdon();
lcdwrite(0x83);
for(i=0;i<10;i++)
{
lcdshuju(row1[i]);
delay(1);
}
lcdwrite(0x84+0x40);
for(i=0;i<8;i++)
{
lcdshuju(row2[i]);
delay(1);
}
dsrst=0;
dssclk=0;
while(1)
{
for(i=0;i<5;i++)
{
dsrst=1;
dswrite(0x81+i*2);
k=dsread();
dsrst=0;
a[i*2]=k&0x0f;
a[i*2+1]=(k>>4)&0x0f;
}
dsrst=1;
dswrite(0x8d);
k=dsread();
dsrst=0;
a[10]=k&0x0f;
a[11]=(k>>4)&0x0f;
delay(100);
lcdscan();
key();
if(b5==0)
{
for(i=0;i<12;i++)
{
if(a[i+12]==a[i])num++;
}
if(num==12)bigclock=1;
else num=0;
lcdwrite(0x8e);
lcdshuju(‘&‘);
}
else
{
lcdwrite(0x8e);
lcdshuju(0x00);
}
if(bigclock==1)
{
speaker=1;
c++;
if(c==100){bigclock=0;speaker=0;}
}
temp=readtemperature();//temp是
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-02-14 23:20 电子时钟 lcd ds1302 ds18b20 闹钟\
文件 1138 2009-08-05 22:20 电子时钟 lcd ds1302 ds18b20 闹钟\ds1302.h
文件 946 2009-08-05 22:20 电子时钟 lcd ds1302 ds18b20 闹钟\ds18b20.h
文件 98292 2009-03-16 13:38 电子时钟 lcd ds1302 ds18b20 闹钟\Last Loaded 电子时钟扩展.DBK
文件 672 2009-08-05 22:21 电子时钟 lcd ds1302 ds18b20 闹钟\lcd1602.h
文件 3222 2009-08-05 22:23 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.c
文件 7703 2009-03-16 13:49 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.hex
文件 56 2009-03-16 13:49 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.lnp
文件 28453 2009-08-05 22:24 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.LST
文件 23370 2009-03-16 13:49 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.M51
文件 1921 2013-11-22 17:23 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.Opt
文件 280 2013-11-22 17:23 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.plg
文件 1221 2009-03-16 14:09 电子时钟 lcd ds1302 ds18b20 闹钟\电子时钟扩展.PWI
文件 196 2009-03-16 14:08 电子时钟 lcd ds1302 ds18b20 闹钟\说明.txt
相关资源
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
- MCS-51单片机定时器和计数器区别的理
评论
共有 条评论