《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

DS12887(时钟日历芯片) c语言驱动程序
程序匠人 发表于 2006-4-5 22:35:00  阅读全文 | 回复(1) | 引用通告 | 编辑

DS12887 c语言驱动程序     -|zl0801 发表于 2005-8-27 11:45:00 
 

/****************DS12887 时钟日历芯片调试******************/
/****************作者:赵亮 2005-8-16 18:58**************/
//8-17 修改
/*
管脚配置:
MOT: 接地
CS:  接地  地址:0xFF00
AS:  接单片机 ALE
R/W: 接 RW
DS:     接 RD
RESET:  接高
IRQ: 空
SQW:    空
*/
#i nclude <REG51.h>
#i nclude <absacc.h>

/*************************/
#define TM_SEC   XBYTE[0xFF00]
#define TM_MIN   XBYTE[0xFF02]
#define TM_HOU   XBYTE[0xFF04]
#define DAY   XBYTE[0xFF06]
#define DATE    XBYTE[0xFF07]
#define MONTH   XBYTE[0xFF08]
#define YEAR   XBYTE[0xFF09]

#define AM_SEC   XBYTE[0xFF01]
#define AM_MIN   XBYTE[0xFF03]
#define AM_HOU   XBYTE[0xFF05]

#define REG_A      XBYTE[0xFF0a]
#define REG_B      XBYTE[0xFF0b]
#define REG_C      XBYTE[0xFF0c]
#define REG_D      XBYTE[0xFF0d]

/********************************************************************/
#define  LCDIO   P2
#define  LINE1   0
#define  LINE2   1
#define  HIGH   1
#define  LOW    0
#define  CLEARSCREEN  LCD_en_command(0x01)
#define  LCD_DELAY_TIME 40
/*******************************************************************/
sbit RS=P0^7;   //数据、命令选择 1:数据 0:指令  4脚
sbit RW=P0^6;   //读、写操作选择 1:读   0:写  5脚
sbit E=P0^5;   //使能信号        6脚
/********************************************************************/
void LCD_delay(void);
void LCD_en_command(unsigned char command);
void LCD_en_dat(unsigned char temp);
void LCD_set_xy( unsigned char x, unsigned char y );
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat);
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_init(void);
/********************************************************************/
void Set_calendar(void);
void Read_calendar(void);
void Start_calendar(void);
void Display_calendar(void);

void Stop_calendar(void);

/********************************************************************/
void delay_nms(unsigned int n);
/********************************************************************/

code unsigned char calendar_day[7][3]={"MON","TUE","WEN","THU","FRI","SAT","SUN"}; 
unsigned char calendar_time[7]={05,8,16,18,58,55,2}; /* 05/8/16 18:58:00 星期二*/           
code unsigned char at[7]={9,8,7,4,2,0,6};   /* 年、月、日、时、分、秒 、星期*/
unsigned char xdata *calendar_address=0xff00;

void main(void)
{
 LCD_init();
 //Set_calendar();
    Start_calendar();
    Stop_calendar();
 while(1)   
 {
  Read_calendar();  
  Display_calendar();
 }
}
/********************************************************************/
/******************** LCD PART *************************************/
void LCD_delay(void)//延时子函数  
{
 unsigned char i;
 for(i=LCD_DELAY_TIME;i>0;i--);  //保证lcd复位的最小延时
}

void LCD_en_command(unsigned char command)//写命令函数
{
 LCDIO=command;
 RS=LOW;  
 RW=LOW;
 E=LOW;
 LCD_delay();
 E=HIGH;
}

void LCD_en_dat(unsigned char dat)//写数据函数
{
 LCDIO=dat;
 RS=HIGH;
 RW=LOW;
 E=LOW;
 LCD_delay();
 E=HIGH;
}

void LCD_set_xy( unsigned char x, unsigned char y )  //设置地址函数
{
 unsigned char address;
 if (y == 0)
  address = 0x80 + x;
 else
     address = 0xc0 + x;
 LCD_en_command(address);
}

void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)//写字符函数
{
 LCD_set_xy( x, y );
 LCD_en_dat(dat);
}

void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)//写字符串函数
{
    LCD_set_xy( X, Y ); //写地址
    while (*s)  // 写显示字符
    {
     LCDIO=*s;
        LCD_en_dat(*s);  
 s ++;
    }
}

void LCD_init(void)//初始化子函数
{
 CLEARSCREEN;//清屏
 LCD_en_command(0x38);//设置8位串数据格式
 LCD_en_command(0x0c);//开显示器
 LCD_en_command(0x80);//显示起始地址
 CLEARSCREEN;//清屏
}
/********************************************************************/

void Set_calendar(void) //设置系统时间
{
 unsigned char i;
 REG_B=0x80;
 for(i=0;i<9;i++)
 *(calendar_address+at[i])=calendar_time[i];
 
}

void Read_calendar(void) //读取系统时间
{
 unsigned char  temp,i; 
 REG_B=0x06;
 do{ temp=REG_A;}
  while(temp&0x80);
 for(i=0;i<7;i++)
  calendar_time[i]=*(calendar_address+at[i]);   
 
}

void Start_calendar(void) //启动时钟
{
 REG_A=0x20;
 REG_B=0x06;
}
/********************************************************************/
void Display_calendar(void)
{
 LCD_write_string(0,LINE1,"                 ");
 
 LCD_write_string(0,LINE1,"20  -  -  ");
 LCD_write_char(0x02,LINE1,(calendar_time[0]/10)|0X30);
 LCD_write_char(0x03,LINE1,(calendar_time[0]%10)|0X30);
 LCD_write_char(0x05,LINE1,(calendar_time[1]/10)|0X30);
 LCD_write_char(0x06,LINE1,(calendar_time[1]%10)|0X30);
 LCD_write_char(0x08,LINE1,(calendar_time[2]/10)|0X30);
 LCD_write_char(0x09,LINE1,(calendar_time[2]%10)|0X30);
 if(calendar_time[6]==1)
  LCD_write_string(0x0d,LINE1,"Mon");
 if(calendar_time[6]==2)
  LCD_write_string(0x0d,LINE1,"Tue");
 if(calendar_time[6]==3)
  LCD_write_string(0x0d,LINE1,"Wen");
 if(calendar_time[6]==4)
  LCD_write_string(0x0d,LINE1,"Thu");
 if(calendar_time[6]==5)
  LCD_write_string(0x0d,LINE1,"Fri");
 if(calendar_time[6]==6)
  LCD_write_string(0x0d,LINE1,"Sat");
 if(calendar_time[6]==7)
  LCD_write_string(0x0d,LINE1,"Sun");
 
 LCD_write_string(0,LINE2,"          :  :");
 LCD_write_char(0x08,LINE2,(calendar_time[3]/10)|0X30);
 LCD_write_char(0x09,LINE2,(calendar_time[3]%10)|0X30);
 LCD_write_char(0x0b,LINE2,(calendar_time[4]/10)|0X30);
 LCD_write_char(0x0c,LINE2,(calendar_time[4]%10)|0X30);
 LCD_write_char(0x0e,LINE2,(calendar_time[5]/10)|0X30);
 LCD_write_char(0x0f,LINE2,(calendar_time[5]%10)|0X30);
}

void Stop_calendar(void)
{
 REG_A=0x70;
}

 

看《匠人手记》,与匠人同行!北航出版,正在热卖!

Re:DS12887(时钟日历芯片) c语言驱动程序
zhu li(游客)发表评论于2007-5-22 1:37:00  个人主页 | 引用 | 返回 | 删除 | 回复

zhu li(游客)太好了,谢谢呀!!!

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    推荐阅读

    往日酷贴

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]