资源简介
此程序为12864液晶显示ds1302实时时钟,程序经本人修改后亲测正确。硬件连接说明很清楚,适合新手学习。

代码片段和文件信息
#define TRUE 1
#define FALSE 0
#include “12864.h“ //包含12864液晶函数文件
/*
cpu晶振 8Mhz
ds1302晶振 32.768khz
*/
/******************RTC常量******************/
#define RTC_CLK PB0
#define RTC_DATA PB1
#define RTC_CS PB2
//命令
#define RD 0x01
#define WR 0x00
#define C_SEC 0x80 //秒
#define C_MIN 0x82 //分
#define C_HR 0x84 //时
#define C_DAY 0x86 //日
#define C_MTH 0x88 //月
#define C_WK 0x8A //星期 DATE
#define C_YR 0x8C //年
#define C_WP 0x8E //控制(写保护)
#define C_CHARGE 0x90 //涓流充电
#define C_BURST 0xBE //时钟多字节
//配置
#define CLK_HALT 0x80 //停止时钟控制位 SECOND bit7
#define CLK_START 0x00 //启动时钟
#define M12_24 0x80 //12/24小时值选择位 HOUR bit7
#define PROTECT 0x80 //写保护控制位 CONTROL bit7
#define UPROTECT 0x00 //写保护控制位 CONTROL bit7
//涓流充电控制常量
#define TC_D1R2 0xA5 //high 1 Diode +2K Resistors
#define TC_D2R8 0xAB //low 2 Diodes+8K Resistors
#define TC_DISABLED 0x00 //Disabled(TCS<>1010 or DS=00 or RS=00)
//RAM 命令
#define C_RAMbase 0xC0 //RAM0~RAM30<<1 地址需左移一位
void Delayus(uint US)
{
uint i;
US=US*5/4; //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
for( i=0;i }
void Delayms(uint MS)
{
uint ij;
for( i=0;i for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}
/*******************************************
函数名称: DS1302_init
功 能: 初始化DS1302的数据接口
参 数: 无
返回值 : 无
/********************************************/
void DS1302_portinit(void)
{
DDRB|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);//将时钟端(RTC_CLK)数据端(RTC_DATA)片选端(RTC_CS)设置为输出
}
/*******************************************
函数名称: DS1302_writeB
功 能: 向DS1302写入一个字节数据(没有RST操作)
参 数: byte--要写入的数据
返回值 : 无
/********************************************/
void DS1302_writeB(uchar byte)
{
uchar i;
for(i=0;i<8;i++) //8位数据计数
{
PORTB&=~BIT(RTC_CLK); //拉低时钟端
if(byte&0x01) //当前位是否是1
{
PORTB|=BIT(RTC_DATA); //当前位是1,拉高数据端
}
else
{
PORTB&=~BIT(RTC_DATA); //当前位是0,拉低数据端
}
Delayus(10); //调整时钟和脉冲宽度
PORTB|=BIT(RTC_CLK); //时钟上升沿(DS1302采样数据)
byte>>=1; //数据右移1位,为送出新数据位做准备
}
}
/*******************************************
函数名称: DS1302_readB
功 能: 从DS1302读出一个字节数据(没有RST操作)
参 数: 无
返回值 : byte--读出的数据
/********************************************/
uchar DS1302_readB(void)
{
uchar ibyte=0;
DDRB&=~BIT(RTC_DATA); //将数据端口设置为输入
PORTB&=~BIT(RTC_DATA); //无上拉电阻
for(i=0;i<8;i++) //8位数据计数
{
byte>>=1; //保存读入的数据位
PORTB|=BIT(RTC_CLK); //时钟上升沿
Delayus(10); //延时,调整时钟脉冲宽度
PORTB&=~BIT(RTC_CLK); //时钟下降沿,DS1302输出数据位
Delayus(10); //等待数据变化(MEGA16太快,必须等待DS1302的数据位输出,否则不能正确读出)
if(PINB&BIT(RTC_DATA)) //当前位是否是高电平
{
byte|=BIT(PB7); //是高电平就将返回数据的当前位置1
}
else
{
byte&=~BIT(PB7); //是低电平就将返回数据的当前位置0
}
}
DDRB|=BIT(RTC_DATA); //最后将数据端口设置为输出
return byte; //返回读出的数据
}
/*******************************************
函数名称: DS1
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2133 2011-04-13 11:11 12864.h
文件 10258 2011-04-13 11:16 1302.c
----------- --------- ---------- ----- ----
12391 2
- 上一篇:TXTkiller文本分割工具TXT杀手
- 下一篇:YUVpla
yer1.3
相关资源
- 利用DS1302和msp430进行闹钟和万年历的
- DAS1302蜂鸣 独立按键 闹钟设定 IIC存储
- 12864滚动显示汉字
- lcd12864的VHDL程序
- LCD12864滚动显示
- STM32 电子密码锁设计,LCD12864显示
- STM32 LCD12864并口驱动实验
- 使用SPCE061A的ACM12864J液晶显示模块应用
- 基于STM32F103C8单片机的晶联讯电子JL
- STM32F407实时时钟_DS1302实时时钟模块和
- 基于STM32F103的实时时钟程序,采用D
- 51单片机_DS1302时钟芯片_共阴数码管
- 台湾悠景oled 12864 ssd1309 驱动程序 并口
- DS1302时钟带可调时间显示
- DS1302+DS13B20+12864,万年历。农历
- 12864液晶Proteus模型
- Lcd12864大时钟万年历 农历生肖温度
- LCD12864驱动程序 带字库版本ST7920内含
- LCD12864驱动程序 并口通信,带字库版
- 12864多功能万年历
- STC89C52+LCD12864+18B20+1302万年历
- AVR多功能实验箱DS1302时钟实验源码资
- 畅学STM32多功能实验箱DS1302时钟芯片源
- 12864专用图片取模软件
- 12864 接线原理图
- 0.96OLED_C51系列_IIC应答_例程
- 带字库LCD12864ST7920的Proteus仿真
- 基于mps430f149的12864液晶显示模块编程
- stm32f103和时钟芯片ds1302
- STM32控制SIM800c,sim900a,接收短信,
评论
共有 条评论