专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
DS12C887时钟实例
2020-01-30 14:08
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
3113
10
10
我也有一个用12864无字库屏+DS12C887的时钟实例,请大家分享。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
miyadai
2020-01-30 20:08
/*
******* 基于STC89C52RC的万年历 ********
功能:
LCM显示使用太阳人SMG12864K9无字库显示屏和
使用新型时钟日历芯片 DS12C887作为实时电子时钟时源
(该芯片可以保留时间为10年)
定义P0口为DS12C887芯片的复用地址数据总线
P1口为DS12C887芯片的控制总线
P3和P1口为LCM显示屏和DS12C887的控制总线
作者:戴志波
版本:Ver 1.0.0
日期:2011.11.20
备注:
硬件平台基于哈工大的郭天祥老师的学习试验版TX-1C环境下
此程序为学习版本,仅供学员参考使用。
*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit BGC = P3^6; //控制背光灯的按钮
sbit _BG = P3^5; //控制屏幕背光的控制指令
uchar bdata bgc_flag;
uchar code *hzcode;
extern uchar count,year,month,day,week,sshi,fen,miao;
extern uchar bdata flag;
extern void mcu_init(void); //系统初始化
extern void initlcm(void); //初始化LCM
extern void lcdclear(uchar dat1,uchar dat2); //写测试数据到LCM全屏
extern void read_logo_intr();
extern void keyscan(); //键盘扫描函数
extern void delay_us(uint time);
extern void dishz(uchar x_add,uchar y_add,uchar code *p);//显示汉字
extern void dischar(uchar x_add,uchar y_add,uchar code *p);//显示字符
extern void pagelcdclear(uchar page,uchar dat1,uchar dat2);//清空一行内容
extern void write_miao_data(uchar dat); //显示 秒函数
extern void write_fen_data(uchar dat); //显示 分函数
extern void write_shi_data(uchar dat); //显示 时函数
extern void write_day_data(uchar day); //显示 天函数
extern void write_week_data(uchar week); //显示 星期函数
extern void write_month_data(uchar month); //显示 月函数
extern void write_year_data(uchar year); //显示 年函数
///// DS12C887 相关函数 //////////////
extern void ds_init(void);
extern void write_ds(uchar add,uchar dat);
extern uchar read_ds(uchar add);
//extern void set_time();
void main()
{
dula=0; // 关闭P0口上的LED
wela=0; // 关闭P0口上的LED
mcu_init(); //系统初始化
ds_init(); // 初始化DS12C887芯片
initlcm(); // 初始化SMG12864K9LCM液晶屏
lcdclear(0x00,0x00); // 打开液晶屏的背光灯
_BG = 0;
bgc_flag=0;
read_logo_intr();
//set_time();
while(1)
{
keyscan();
if(flag==0)
{
miao=read_ds(0); //读取秒数据 参考 DS12C887的DATASHEET第13页
fen=read_ds(2); //读取分数据 Table 2A. Time, Calendar, and Alarm Data Modes—BCD Mode (DM = 0)
sshi=read_ds(4); //读取时数据
week=read_ds(6); //读取星期数据
day=read_ds(7); //读取日数据
month=read_ds(8); //读取月数据
year=read_ds(9); //读取年数据
delay_us(2000); //20ms
write_miao_data(miao); //向LCM屏幕写秒数据
write_fen_data(fen); //向LCM屏幕写分数据
write_shi_data(sshi); //向LCM屏幕写是数据
write_week_data(week); //向LCM屏幕写星期数据
write_day_data(day); //向LCM屏幕写日数据
write_month_data(month); //向LCM屏幕写月数据
write_year_data(year); //向LCM屏幕写年数据
}
if (bgc_flag == 0)
{
if (BGC == 0) //判断背光控制按钮是否按下
{
delay_us(2000); //20ms
if (BGC == 0)
{
while (!BGC);
_BG = 1;
bgc_flag = 1;
}
}
}
if (bgc_flag == 1)
{
if (BGC == 0) //判断背光控制按钮是否按下
{
delay_us(2000); //20ms
if (BGC == 0)
{
while (!BGC);
_BG = 0;
bgc_flag = 0;
}
}
}
}
}
加载中...
查看其它10个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
******* 基于STC89C52RC的万年历 ********
功能:
LCM显示使用太阳人SMG12864K9无字库显示屏和
使用新型时钟日历芯片 DS12C887作为实时电子时钟时源
(该芯片可以保留时间为10年)
定义P0口为DS12C887芯片的复用地址数据总线
P1口为DS12C887芯片的控制总线
P3和P1口为LCM显示屏和DS12C887的控制总线
作者:戴志波
版本:Ver 1.0.0
日期:2011.11.20
备注:
硬件平台基于哈工大的郭天祥老师的学习试验版TX-1C环境下
此程序为学习版本,仅供学员参考使用。
*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit BGC = P3^6; //控制背光灯的按钮
sbit _BG = P3^5; //控制屏幕背光的控制指令
uchar bdata bgc_flag;
uchar code *hzcode;
extern uchar count,year,month,day,week,sshi,fen,miao;
extern uchar bdata flag;
extern void mcu_init(void); //系统初始化
extern void initlcm(void); //初始化LCM
extern void lcdclear(uchar dat1,uchar dat2); //写测试数据到LCM全屏
extern void read_logo_intr();
extern void keyscan(); //键盘扫描函数
extern void delay_us(uint time);
extern void dishz(uchar x_add,uchar y_add,uchar code *p);//显示汉字
extern void dischar(uchar x_add,uchar y_add,uchar code *p);//显示字符
extern void pagelcdclear(uchar page,uchar dat1,uchar dat2);//清空一行内容
extern void write_miao_data(uchar dat); //显示 秒函数
extern void write_fen_data(uchar dat); //显示 分函数
extern void write_shi_data(uchar dat); //显示 时函数
extern void write_day_data(uchar day); //显示 天函数
extern void write_week_data(uchar week); //显示 星期函数
extern void write_month_data(uchar month); //显示 月函数
extern void write_year_data(uchar year); //显示 年函数
///// DS12C887 相关函数 //////////////
extern void ds_init(void);
extern void write_ds(uchar add,uchar dat);
extern uchar read_ds(uchar add);
//extern void set_time();
void main()
{
dula=0; // 关闭P0口上的LED
wela=0; // 关闭P0口上的LED
mcu_init(); //系统初始化
ds_init(); // 初始化DS12C887芯片
initlcm(); // 初始化SMG12864K9LCM液晶屏
lcdclear(0x00,0x00); // 打开液晶屏的背光灯
_BG = 0;
bgc_flag=0;
read_logo_intr();
//set_time();
while(1)
{
keyscan();
if(flag==0)
{
miao=read_ds(0); //读取秒数据 参考 DS12C887的DATASHEET第13页
fen=read_ds(2); //读取分数据 Table 2A. Time, Calendar, and Alarm Data Modes—BCD Mode (DM = 0)
sshi=read_ds(4); //读取时数据
week=read_ds(6); //读取星期数据
day=read_ds(7); //读取日数据
month=read_ds(8); //读取月数据
year=read_ds(9); //读取年数据
delay_us(2000); //20ms
write_miao_data(miao); //向LCM屏幕写秒数据
write_fen_data(fen); //向LCM屏幕写分数据
write_shi_data(sshi); //向LCM屏幕写是数据
write_week_data(week); //向LCM屏幕写星期数据
write_day_data(day); //向LCM屏幕写日数据
write_month_data(month); //向LCM屏幕写月数据
write_year_data(year); //向LCM屏幕写年数据
}
if (bgc_flag == 0)
{
if (BGC == 0) //判断背光控制按钮是否按下
{
delay_us(2000); //20ms
if (BGC == 0)
{
while (!BGC);
_BG = 1;
bgc_flag = 1;
}
}
}
if (bgc_flag == 1)
{
if (BGC == 0) //判断背光控制按钮是否按下
{
delay_us(2000); //20ms
if (BGC == 0)
{
while (!BGC);
_BG = 0;
bgc_flag = 0;
}
}
}
}
}
一周热门 更多>