问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

有人会写数字钟的C语言程序吗?要用LCD的,而且要用AT89C51的单片机呢

发布网友 发布时间:2022-05-13 11:09

我来回答

3个回答

热心网友 时间:2023-10-09 00:29

DS1302时钟子程序
#define uchar unsigned char
sbit DS1302_CLK = P2^5; //实时时钟时钟线引脚
sbit DS1302_IO = P2^4; //实时时钟数据线引脚
sbit DS1302_RST = P2^3; //实时时钟复位线引脚
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数

char done,count,temp,flag,up_flag,down_flag;
uchar temp_value; //温度值
uchar TempBuffer[5],week_value[2];

/***********DS1302时钟部分子程序******************/
typedef struct __SYSTEMTIME__
{
unsigned char Second;
unsigned char Minute;
unsigned char Hour;
unsigned char Week;
unsigned char Day;
unsigned char Month;
unsigned char Year;
unsigned char DateString[11];
unsigned char TimeString[9];
}SYSTEMTIME; //定义的时间类型
SYSTEMTIME CurrentTime;

#define AM(X) X
#define PM(X) (X+12) // 转成24小时制
#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C

void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0; //相当于汇编中的 RRC
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}

unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相当于汇编中的 RRC
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}

void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr); // 地址,命令
DS1302InputByte(ucDa); // 写1Byte数据
DS1302_CLK = 1;
DS1302_RST = 0;
}

unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); // 地址,命令
ucData = DS1302OutputByte(); // 读1Byte数据
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}

void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组
{
unsigned char ReadValue;
ReadValue = Read1302(DS1302_SECOND);
Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MINUTE);
Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_HOUR);
Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_DAY);
Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_WEEK);
Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MONTH);
Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_YEAR);
Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
}

void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]
{ if(hide_year<2)
{
Time->DateString[0] = '2';
Time->DateString[1] = '0';
Time->DateString[2] = Time->Year/10 + '0';
Time->DateString[3] = Time->Year%10 + '0';
}
else
{
Time->DateString[0] = ' ';
Time->DateString[1] = ' ';
Time->DateString[2] = ' ';
Time->DateString[3] = ' ';
}
Time->DateString[4] = '/';
if(hide_month<2)
{
Time->DateString[5] = Time->Month/10 + '0';
Time->DateString[6] = Time->Month%10 + '0';
}
else
{
Time->DateString[5] = ' ';
Time->DateString[6] = ' ';
}
Time->DateString[7] = '/';
if(hide_day<2)
{
Time->DateString[8] = Time->Day/10 + '0';
Time->DateString[9] = Time->Day%10 + '0';
}
else
{
Time->DateString[8] = ' ';
Time->DateString[9] = ' ';
}
if(hide_week<2)
{
week_value[0] = Time->Week%10 + '0'; //星期的数据另外放到 week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示
}
else
{
week_value[0] = ' ';
}
week_value[1] = '\0';

Time->DateString[10] = '\0'; //字符串末尾加 '\0' ,判断结束字符
}

void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组 TimeString[];
{ if(hide_hour<2)
{
Time->TimeString[0] = Time->Hour/10 + '0';
Time->TimeString[1] = Time->Hour%10 + '0';
}
else
{
Time->TimeString[0] = ' ';
Time->TimeString[1] = ' ';
}
Time->TimeString[2] = ':';
if(hide_min<2)
{
Time->TimeString[3] = Time->Minute/10 + '0';
Time->TimeString[4] = Time->Minute%10 + '0';
}
else
{
Time->TimeString[3] = ' ';
Time->TimeString[4] = ' ';
}
Time->TimeString[5] = ':';
if(hide_sec<2)
{
Time->TimeString[6] = Time->Second/10 + '0';
Time->TimeString[7] = Time->Second%10 + '0';
}
else
{
Time->TimeString[6] = ' ';
Time->TimeString[7] = ' ';
}
Time->DateString[8] = '\0';
}

void Initial_DS1302(void) //时钟芯片初始化
{
unsigned char Second=Read1302(DS1302_SECOND);
if(Second&0x80) //判断时钟芯片是否关闭
{
Write1302(0x8e,0x00); //写入允许
Write1302(0x8c,0x09); //以下写入初始化时间 日期:09/04/01.星期: 3. 时间: 23:59:59
Write1302(0x88,0x04);
Write1302(0x86,0x01);
Write1302(0x8a,0x07);
Write1302(0x84,0x23);
Write1302(0x82,0x59);
Write1302(0x80,0x59);
Write1302(0x8e,0x80); //禁止写入
}

}
void show_time() //液晶显示程序
{
DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据
TimeToStr(&CurrentTime); //时间数据转换液晶字符
DateToStr(&CurrentTime); //日期数据转换液晶字符

}

热心网友 时间:2023-10-09 00:30

在www.verycd.com上输入“单片机”,会出现很多资料,里面有一套视频,专门介绍51单片机的,可以下来看看

热心网友 时间:2023-10-09 00:30

学单片机操作,学LCD显示操作,难度不大的…
用C语言编写AT89C51单片机程序,设计一个智能数字钟。

这是我的课程设计,6个数码管,显示时分秒,三个按钮P0.0、P0.1、P0.2可以调时,有8个彩灯(可以不要),没闹钟、倒计时之类的。呵呵。include&lt;AT89X52.H&gt; define uchar unsigned char int i;//***时钟的 uchar one[10]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,0x07,0xff,0xef}...

用C语言编写AT89C51单片机程序,设计一个智能数字钟。

//uchar code tableyi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,//0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//0-F,-,共阴 uchar code table_d[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //0~9数组,带小数点 uchar table1[]={31,3...

以at89c51为核心,制作一个LED显示的智能电子钟。用C语言或Keil编程,Pro...

我这里有但是和你的功能有差别,你可以看看,在改改!我用的at89c52单片机 程序:include&lt;reg52.h&gt; include&lt;intrins.h&gt; define uchar unsigned char define uint unsigned int sbit T_RST=P1^0; //ds1302复位引脚 sbit T_CLK=P1^1; //ds1302时钟引脚 sbit T_IO=P1^2; //ds1302数据引...

请教AT89C51单片机的数字时钟程序带闹钟的功能 用C语言编写

include"reg52.h"define uchar unsigned char define uint unsigned int sbit wela=P2^7;sbit dula=P2^6;sbit s1=P3^4;//模式的选择 sbit s2=P3^5;//调高 sbit s3=P3^6;//调低 sbit s4=P3^7;//选择是否开启闹铃 sbit beep=P2^3;uchar tt,num,t1,settime,bi;uchar flag; //至位...

at89c51单片机怎么用汇编语言写“多个延时程序”

单片机汇编语言中要使一个延时程序可以被不同情况下调用而延时不同的时间,可以通过类似于C语言中传递参数的方式来实现,举例如下:ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV P0,#5AH ;P0上的LED灯间隔点亮 MOV R7,#50 ;R7是延时传递参数 LCALL DELAY ;调用延时函数 MOV P0,#0A5H ...

以AT89C51单片机为核心,制作一个LCD显示的智能电子钟

给你一个例子供你参考下,我对STM8S稍微熟悉一点,我也是初学者。/* MAIN.C file * * Copyright (c) 2002-2005 STMicroelectronics */#include "lcd12864.h"#include "stm8s207r.h"#include "stm8s207rb.h"#define sbi(io,bit)(io|=(1&lt;&lt;bit))//1#define cbi(io,bit)(io&amp;=~(1&lt;...

用AT89C51单片机控制LED数码管能够显示时间和日期,求电路图和程序代码...

0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void init();void delay(uint);void second_display();void minute_display();void hour_display();void date_display();void month_display();void year_display();void control();void time();...

急求基于单片机AT89C51的多功能数字电子钟的汇编程序,高手进!~_百度知...

//T0中断子程序 /***/ void Timer0Int(void) interrupt 1 using 0 { count++;if(count==50)count=0; //中断计时间 if(count==10) //这的count值不能为零,否则显示不准 { cycle++; //根据中断计的时间来决定时间加的快慢 } if(cycle==10){ cycle=0; //cycle为个位 cycle1++; ...

求助!有谁比较懂硬件技术基础,AT89C51,单片机,帮我写个控制信号灯的程序...

流水灯呀:你把单片机的P0口就是左上角的32~39号引脚接上拉电阻(10K排阻)后,分别与1K电阻和发光二级管串联另一端接地,因为P0口带负载能力比较强所以用它。硬件连好了就可以编程了(最小系统你会吧我就不说了)C语言是根据硬件编程的程序如下:include&lt;reg52.h&gt; define uint unsigned int defin...

用AT89c51与DS18B20做数字温度计proteus怎么连接仿真图和C语言编程?

1、PROTEUS安装好后,默认不会在桌面上产生快捷方式。先打开开始菜单,依次点击“程序、Proteus7Professional、ISIS7Professional”打开PROTEUS。2、单击图中的P,添加单片机等元件。3、用关键字搜索,89C51,再加几个LED,因为是仿真就不用加限流电阻和晶振复位的元件了。4、把元件排列放好,再放一个电源...

C语言程序设计程序试写 数码管程序是怎么写的C语言 c语言程序设计怎么写程序 用C语言写一个选择题程序 如何用C语言写一个象棋程序 c语言的程序一行写不下时 C语言写大型程序 用C语言编写数码管 deepin如何写C语言程序
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么我更新了win7QQ拼音在游戏上(剑侠情缘2)不能打字?打出来的都是... 游漓江的船票在哪里买最方便?如何去 因为我想看剑侠情缘,又不想下载什么PPS啊,QQ直播之类软件, 最好是类似... ...两部手机下载相同的手游剑侠情缘却是不一样的都是在QQ上下载的 教子小书坊:一位外交官父亲给孩子的家书图书信息 教子小书坊:一位外交官父亲给孩子的家书内容简介 高二孩子和家长逆反如何教育 高二孩子和家长逆反怎么办 叛逆期孩子怎么教育沟通叛逆期孩子如何教育沟通 请问用otg连接鼠标和键盘后怎么玩手机上的全民枪战,求教程。带图的给... 去邮局寄包裹的步骤是怎么样?我没去做.不好意思问下大家 ISC清水泵和污水泵的区别 单片机 用c语言实现数字时钟 图已经给出 欠钱被起诉了会进黑名单吗 污水泵与普通水泵有什么区别? 求!!!数字时钟种中的单片机的C语言编程 请问排污泵与清水泵有什么区别?用清水泵为什么不能排污? 求解答一个C语言编程: 数字时钟程序 c语言 数字时钟程序 要求显示格式为:HH:MM:SS 四位数字时钟设计 C语言程序 污水泵与清水泵要怎么区分? c语言 数字钟 大洋路批发市场放假到几号?开始营业了吗? 手游qq飞车怎么加好友的战队 申请必须用手机号吗 微信注册一定要手机号码吗?如果手机号码已*另一个,还可以注册吗? 太阳能灯是不是晚上自动点亮的? 唐三彩人物俑头和身可以分开吗? 小米手机能装万能的电视机遥控器吗? 眼霜怎么涂 擦眼霜的手法是怎样的? 神农:如何区别污水泵和潜水泵 欠个人钱被起诉会上黑名单吗 求89c52单片机 C语言实现数字时钟程序 污水泵和潜水泵的区别 怎样做一个C语言制成的数字时钟的界面 单片机数字钟c程序谁给解释下? 污水泵和潜水泵的区别有哪些 被银行起诉是不是就进入黑名单了? 数字时钟C语言设计.用的是51单片机。 00 秒 00 分 00 小时 还有小数点。 麻烦把程序代码告诉我把 法院被起诉后,会变黑名单吗 美拍能导入多大视频? 别人用美拍为什么都是好几分钟的视频 有哪些植物可用作洗洁 美拍怎么导入或录制3分钟视频?我看美拍上有些超过1分钟他们都是怎么做到的,为什么我的美拍只能录制1 美拍怎么录十分钟的视频, 。看有些人能录 友邦保险重疾险 新买的三星手机,一开始要怎么充电? 新三星手机怎么充电 您好,新买的三星手机怎么充电,需要完全放电吗 新买的三星手机怎么充电最好