89c51的万年历c语言,用AT89C51与DS1302做的万年历c语言编程
//写的时候,是低电平改变数据,上升沿送入数据
//读的时候,是低电平读入数据,下降沿使得从设备把数据放到总线上
//读的时候,是低电平读,但没有读出,提供下降沿使得从设备把数据放到总线上
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs="P2"^4;
sbit rw="P2"^5;
sbit en="P3"^6;
sbit reset="P3"^3;
sbit sclk="P3"^0;
sbit io="P3"^1;
uchar str1[]="date of today is:";
uchar init[]={0x00,0x00,0x21,0x21,0x10,0x01,0x04};//秒,分,时,日,月,星期,年
//
void delay()
{uchar j;
for(j=250;j>0;j--);
}
//-------------------液晶模块-----------------//
void en_toggle()
{
en=0;
//_nop_();
delay();
en=1;
delay();
// _nop_();
en=0;
} //注意必须加延时,否则会出问题的
void is_ready()
{
P2=0x00;//设置为输入口 //注意:现实中应该送0xff
rs=0;
rw=1;
en=1;
while(bflag);
en=0;
}
void write_cmd(uchar cmd)
{
is_ready();
rs=0;
rw=0;
P2=cmd;
en_toggle();
_nop_();
}
void write_data(uchar indata)
{
is_ready();
rs=1;
rw=0;
P2=indata;
en_toggle();
_nop_();
}
void write_str(uchar addr,uchar *p)
{
uchar i;
write_cmd(addr);
while(p[i]!='\0')
{write_data(p[i]);
i++;
}
}
void write_position(uchar row,uchar col)
{uchar p;
if(row==1)
{p=0x80+col-1;
write_cmd(p);}
else
{p=0xc0+col-1;
write_cmd(p);
}
}
void init_lcd()
{
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);//清屏幕
}
//------------液晶模块结束---------------------
//-----------ds1302模块开始-------------------
//注意点:sclk的上升沿输入数据,sclk的下跳沿输出数据
//读写时都是从第0位开始
void write_byte(uchar inbyte)
{
uchar i;
for(i=8;i>0;i--)
{
sclk=0; //写的时候低电平改变数据
if(inbyte&0x01)
io=1;
else
io=0;
sclk=1; //写的时候高电平,把数据写入ds1302
_nop_();
inbyte=inbyte>>1;
}
}
uchar read_byte() //sclk的下跳沿读数据
{
uchar i,temp=0;
io=1; //设置为输入口
for(i=7;i>0;i--)
{
sclk=0;
if(io==1)
temp=temp|0x80;
else
temp=temp&0x7f;
sclk=1; //产生下跳沿
temp=temp>>1;
}
return (temp);
}
//----------往ds1302的某个地址写入数据-------------
void write_ds1302(uchar cmd,uchar indata)
{
reset=1;
write_byte(cmd);
write_byte(indata);
reset=0;
sclk=0;
}
//----------读ds1302某地址的的数据-----------------
uchar read_ds1302(uchar addr)
{
uchar backdata;
reset=1;
write_byte(addr);
backdata=read_byte();//先写地址,然后读数据
reset=0;
sclk=0;
return (backdata);
}
//------------设置初始时间-------------------
void set_ds1302(uchar addr,uchar *p,uchar n)//写入n个数据
{
write_ds1302(0x8e,0x00);//写控制字,允许写操作
for(;n>0;n--)
{write_ds1302(addr,*p);
p++;
addr=addr+2;
}
write_ds1302(0x8e,0x80);//写保护,不允许写
}
//----------- 读取当前时间-------------------
void read_nowtime(uchar addr,uchar *p,uchar n)
{
for(;n>0;n--)
{
*p=read_ds1302(addr);
p++;
addr=addr+2;
}
}
void init_ds1302()
{
reset=0;
sclk=0;
write_ds1302(0x80,0x00);//写控制字,允许写
write_ds1302(0x90,0x00);//禁止涡流充电
}
//-----------ds1302模块结束-------------------
void main()
{
init_lcd(); //初始化LCD
write_str(0x80,str1); //液晶显示提示信息
init_ds1302(); //初始化ds1302
set_ds1302(0x80,init,7);//设置初始时间,日期,年月
//如果不设置初始化时间的话,则默认为系统时间
while(1)
{
read_nowtime(0x81,init,7); //读出当前时间,读出7个字节
write_position(2,1);
write_data('0'+((init[2]&0xf0)>>4));
write_position(2,2);
write_data('0'+(init[2]&0x0f)); //读小时
write_position(2,3);
write_data(':');
write_position(2,4);
write_data('0'+((init[1]&0xf0)>>4));
write_position(2,5);
write_data('0'+(init[1]&0x0f)); //读分钟
write_position(2,6);
write_data(':');
write_position(2,7);
write_data('0'+((init[0]&0xf0)>>4));
write_position(2,8);
write_data('0'+(init[0]&0x0f)); //读秒
write_position(2,13);
write_data('0'+((init[6]&0xf0)>>4));
write_position(2,14);
write_data('0'+(init[6]&0x0f)); //读年
write_position(2,15);
write_data('/');
write_position(2,16);
write_data('0'+((init[4]&0xf0)>>4));
write_position(2,17);
write_data('0'+(init[4]&0x0f)); //读月
write_position(2,18);
write_data('/');
write_position(2,19);
write_data('0'+((init[3]&0xf0)>>4));
write_position(2,20);
write_data('0'+(init[3]&0x0f)); //读日
89c51的万年历c语言,用AT89C51与DS1302做的万年历c语言编程相关推荐
- C语言实现万年历(附代码) 小白完成的第一个C语言程序,希望大家多多关注,点赞
C语言实现万年历 前言:本文章向大家介绍如何使用C语言代码实现万年历使用实例,讲解编写万年历的方法,教你轻松学会写出万年历.这个小程序算是我自己写的第一个比较完整的小程序,算是对大一上学期学习的C语言 ...
- c语言21个入门练手项目,初学C语言没有项目练手怎么行,这17个小项目收下不谢...
C语言是咱们大多数人的编程入门语言,对其也再熟悉不过了,不过不少初学者在学习的过程当中不免会出现迷茫,好比:不知道C语言能够开发哪些项目,能够应用在哪些实际的开发中--,这些迷茫也致使了咱们在学习的过 ...
- C语言读取bmp图像并做简单显示
C语言读取bmp图像并做简单显示) bmp文件格式 读取bmp文件信息并展示 bmp文件格式 bmp文件大体上分为四个部分: bmp文件构成 位图文件头BITMAPFILEHEADER 位图信息头BI ...
- c语言中平均值用什么表示_学C语言有什么用?
这个也是我刚学C语言的疑问,当时总是写一些比较大小,排序之类的函数,很是枯燥,也学的不怎么样.学东西是要有用它的地方才有动力继续学习, C语言的应用很广的,比如 我以前学习的单片机,现在学习的嵌入式, ...
- c语言程序设计歌手大奖赛,C语言二维数组怎么做:设计青年歌手参加歌曲大奖赛计分系统: 共...,怎样用c语言程序设计? 青年歌手参加歌曲大奖赛,有10个评委...
导航:网站首页 > C语言二维数组怎么做:设计青年歌手参加歌曲大奖赛计分系统: 共...,怎样用c语言程序设计? 青年歌手参加歌曲大奖赛,有10个评委 C语言二维数组怎么做:设计青年歌手参加歌曲 ...
- 用R语言做词频统计_R语言 | 词频统计
Python网络爬虫与文本数据分析 本章内容 导入停用词 读数据,分词 剔除停用词 导入停用词表 library(dplyr) ## [1] "?" "." & ...
- c语言 左补1,转专业后对于C语言补修的一些体会(1)
在转入软件工程后,原来的C语言程序设计只有三学分,而信息学院的C语言程序设计有四学分.迫于无奈的我只能再补修一遍C语言,自我认为大一对于C语言的学习已经基本足够,但我发现信息学院用的是不一样的书后,对 ...
- c语言数组中的字母可以相等吗,C语言数组比较
C语言数组比较教程 在 要比较两个 C 语言的数组是否相等,我们只有使用 案例 比较两个数组是否相等 通过循环遍历数组来比较数组 #include int main(){ printf("嗨 ...
- arduino与java,Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境
Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境 更多相关问题 听力原文:W: Hi, Steve, good to see you are up and around a ...
最新文章
- 包红b2c模块 flutter与原生交互
- Mysql INSERT INTO .. ON DUPLICATE KEY更新多行记录
- 你大概走了假敏捷:认真说说敏捷的实现和问题(手绘版)
- 微型计算机工业控制技术,基于ARM的微机原理与接口技术(STM32嵌入式系统架构编程与应用嵌入式与工业控制技术高等学校电子信息类专业系列教材)...
- docker-compose观察实时日志_大数据项目实战之在线教育(03实时需求) - 十一vs十一...
- JAVA企业级快速开发平台,JEECG 3.7.3 新春版本发布
- webpack配置:css文件打包、JS压缩打包和HTML文件发布
- STM32学习——位带区的理解
- python-多线程共享内存
- 学python可以做什么职业-业余学Python能做什么?对职业发展有什么帮助?
- mysql怎么查看记录时间戳_mysql TIMESTAMP(时间戳)详解——查询最近一段时间操作的记录...
- 遇到NOD32更新时提示“用户名和密码无效”解决办法
- matlab聚类分析工具箱,matlab聚类工具箱
- (附源码)学生社团管理系统app 毕业设计 191850
- atv320说明书_施耐德变频器参数设置ATV320学习资料
- [系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向
- 项目开始之前需要搞懂的几个概念POJO、PO、DTO、DAO、BO、VO
- 机器人相关的会议期刊
- Hot and cold pages
- Pycharm使用远程服务器解释器
热门文章
- html不对齐表格的实现
- rf 遍历列表_RF之关键字、变量、循环
- 重复性、分辨率的计算方法
- php zen kaku代表什么,Convert kana one from another (zen-kaku, han-kaku and more) - PHP 7 中文文档...
- oracle存储过程循环输入数据,oracle 存储过程循环插入数据
- 文件查找,打包压缩,解压相关分享
- 如何用Jupyter中文集成版画一个图表
- 表情分析计算机,利用深度学习和计算机视觉进行面部表情分析
- 在线Base64编码加密解密还原工具
- Vue3.2 使用 汉字转拼音的插件pinyin-pro 库