EDN首页   博客首页

1

关于投票
51读写ds1302

/************************************************************************************/
/*     程序名:实时时钟DS1302代码                                                   */
/*                                                                                  */
/*     晶振:12.0 M                                        CPU型号:AT89S52         */

/************************************************************************************/
#include "user.h"

sbit clock_clk = P1 ^ 0;//ds1302_clk
sbit clock_dat = P1 ^ 1;//ds1302_dat
sbit clock_rst = P1 ^ 2;//ds1302_rst

//为了编程方便定义的位变量
sbit a0 = ACC ^ 0;
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;

/*****************************************************************
*发送字符
************************1 3 0 2 *****************************/
void clock_out(unsigned char dd)
{
 ACC=dd;
 clock_dat=a0; clock_clk=1; clock_clk=0;
 clock_dat=a1; clock_clk=1; clock_clk=0;
 clock_dat=a2; clock_clk=1; clock_clk=0;
 clock_dat=a3; clock_clk=1; clock_clk=0;
 clock_dat=a4; clock_clk=1; clock_clk=0;
 clock_dat=a5; clock_clk=1; clock_clk=0;
 clock_dat=a6; clock_clk=1; clock_clk=0;
 clock_dat=a7; clock_clk=1; clock_clk=0;
}
/*****************************************************************
*接收字符
************************1 3 0 2 *****************************/

unsigned char clock_in(void)
{
 clock_dat=1;
 a0=clock_dat;
 clock_clk=1; clock_clk=0; a1=clock_dat;
 clock_clk=1; clock_clk=0; a2=clock_dat;
 clock_clk=1; clock_clk=0; a3=clock_dat;
 clock_clk=1; clock_clk=0; a4=clock_dat;
 clock_clk=1; clock_clk=0; a5=clock_dat;
 clock_clk=1; clock_clk=0; a6=clock_dat;
 clock_clk=1; clock_clk=0; a7=clock_dat;
 return(ACC);
}
/*****************************************************************
*读取时间
************************1 3 0 2 *****************************/

unsigned char read_clock(unsigned char ord)
{
 unsigned char dd="0";
 clock_clk=0;
 clock_rst=0;
 clock_rst=1;
 clock_out(ord);
 dd=clock_in();
 clock_rst=0;
 clock_clk=1;
 return(dd);
}
/*****************************************************************
*写入时间
************************1 3 0 2 *****************************/
void write_clock(unsigned char ord, unsigned char dd)
{
 clock_clk=0;
 clock_rst=0;
 clock_rst=1;
 clock_out(ord);
 clock_out(dd);
 clock_rst=0;
 clock_clk=1;
}

/*****************************************************************
*提取时间bcd码
************************1 3 0 2 *****************************/
void ReadClock(void)//read clock
{
 unsigned char d, e;

 d=read_clock(0x81);//读秒
 e=d;
 d=d>>4;
 e=e&0x0f;
    SecBCD[1] =d;
 SecBCD[0] =e;

    d=read_clock(0x83);//读分钟
 e=d;
 d=d>>4;
 e=e&0x0f;
    MinBCD[1] =d;
 MinBCD[0] =e;

   d=read_clock(0x85);//读小时
 e=d;
 d=d>>4;
 e=e&0x0f;
    HourBCD[1] =d;
 HourBCD[0] =e;
}
/*****************************************************************
*时钟的初始化
************************ *****************************/
void Init_1302(void)
{
 write_clock(0x8e,0x00);//close_protect
 write_clock(0x8c,0x05);//year
 write_clock(0x8a,0x04);//week_day
 write_clock(0x88,0x10);//month
 write_clock(0x86,0x20);//date
 write_clock(0x84,0x08);//hour 08;20;30
 write_clock(0x82,0x20);//minute
 write_clock(0x80,0x30);//second

 write_clock(0x90,0xa5);//supply_power 
 write_clock(0x8e,0x80);//open_protect 
}

 


 

系统分类: 单片机
用户分类: 源程序
标签: 无标签
来源: 整理
发表评论 阅读全文(123) | 回复(0)

1

关于投票
51读写max6675

#include "user.h"

//define pin
sbit CS = P3^4;
sbit SK = P3^6;
sbit DO = P3^7;

void CollStart(void);
void CollStop(void);
uint shout();
/********************************************************************************
* 函数功能:6675 init *
*                   *
*******************************************************************************/
void CollInit(void)
{
 CS = 1;       //初始化端口
 SK = 0;
 DO = 1;
 _nop_();_nop_();_nop_();
}
/********************************************************************************
* 函数功能:读取温度 *
*                   *
*******************************************************************************/

void Coll(void)
{
  uint  ReDat;
  CollStart();
  ReDat =shout();
  CurTemper =ReDat *0.25;//(1023.75 *ReDat)/4095;  // (0--1023.75)    //assum below 1000
  CurTemperBCD[3] =(unsigned int)CurTemper /100;  //取出BCD码
  CurTemperBCD[2] =((unsigned int)CurTemper -CurTemperBCD[3] *100)/10;
  CurTemperBCD[1] =(unsigned int)CurTemper - CurTemperBCD[3]*100 - CurTemperBCD[2]*10;
  CurTemperBCD[0] =(unsigned int)(CurTemper*10) -CurTemperBCD[3]*1000 - CurTemperBCD[2]*100 -CurTemperBCD[1]*10;
  CollStop();

}
void CollStart(void)
{
 CS = 0;       //采集开始
 SK = 0;
 DO = 1;
 _nop_();_nop_();_nop_();
}
void CollStop(void)
{
 CS = 1;       //采集结束
 SK = 0;
 DO = 1;
 _nop_();_nop_();_nop_();
}
//*********************************************************
uint shout(void)   
// 移出数据
{
 uchar i =0;
 uint out_data =0;
 SK = 1;      //read D15
 _nop_();_nop_();_nop_();
 SK = 0;
 _nop_();_nop_();_nop_();
 for(i = 0; i < 12; i++)    //read D14--D3
 {
  out_data <<=1;
  SK = 1;
  _nop_();_nop_();_nop_();
  if(DO ==1)
  {
    out_data |=0x001;
  }else
  {
    out_data &=0xffe;
  }
  SK = 0;
  _nop_();_nop_();_nop_();
 }
// for(i = 0; i < 3; i++)    //read D2--D0
 {
  SK = 1;
  _nop_();_nop_();_nop_();
  
  if(DO ==1)    //cut
  {
    out_data =0xfff;    //此时热电偶断开,数码管显示23.7
  }
  SK = 0;
  _nop_();_nop_();_nop_();
  SK = 1;
  _nop_();_nop_();_nop_();
  SK = 0;
  _nop_();_nop_();_nop_();

  SK = 1;
  _nop_();_nop_();_nop_();
  SK = 0;
  _nop_();_nop_();_nop_();

 }
 return(out_data);
}

系统分类: 单片机
用户分类: 源程序
标签: 无标签
来源: 整理
发表评论 阅读全文(176) | 回复(0)

1

关于投票
24c01-24c16读写驱动程序

//24c01-24c16读写驱动程序,
sbit a0=ACC^0;   //定义ACC的位,利用ACC操作速度最快
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;

void s24(void) {
 _nop_();scl=0;sda=1;scl=1;_nop_();sda=0;_nop_();scl=0;
}
void s240(void) {
 _nop_();scl0=0;sda0=1;scl0=1;_nop_();sda0=0;_nop_();scl0=0;
}
void p24(void) {
 sda=0;scl=1;_nop_();sda=1;
}
void p240(void) {
 sda0=0;scl0=1;_nop_();sda0=1;
}
unsigned char rd24(void) {
 sda=1;
 scl=1;a7=sda;scl=0;
 scl=1;a6=sda;scl=0;
 scl=1;a5=sda;scl=0;
 scl=1;a4=sda;scl=0;
 scl=1;a3=sda;scl=0;
 scl=1;a2=sda;scl=0;
 scl=1;a1=sda;scl=0;
 scl=1;a0=sda;scl=0;
 sda=1;scl=1;scl=0;
 return(ACC);
}

void wd24(unsigned char dd) {
 ACC=dd;
 sda=a7;scl=1;scl=0;
 sda=a6;scl=1;scl=0;
 sda=a5;scl=1;scl=0;
 sda=a4;scl=1;scl=0;
 sda=a3;scl=1;scl=0;
 sda=a2;scl=1;scl=0;
 sda=a1;scl=1;scl=0;
 sda=a0;scl=1;scl=0;
 sda=1;scl=1;
}

unsigned char read(unsigned int address){
 unsigned char dd;
 dd=((address&0x7ff)/256)<<1;
 s24();wd24(0xa0|dd);scl=0;wd24(address);scl=0;
 s24();wd24(0xa1|dd);scl=0;dd=rd24();p24();return(dd);
}

void write(unsigned int address,unsigned char dd){
 unsigned char ddd;
 ddd=((address&0x7ff)/256)<<1;
 s24();wd24(0xa0|ddd);scl=0;wd24(address);scl=0;wd24(dd);scl=0;p24();
 time=0;     //time为定时器时间参考,time增加1代表1ms,如果没有用定时器,取消该行
 while (1) {
  s24();
  wd24(0xa0|ddd);
  sda=1;
  if (sda==0) break;
  if (time>10) break; //此行防止由于eeprom器件损坏后的死循环
  scl=0;
 }
}

系统分类: 单片机
用户分类: 源程序
标签: 24c01 24c16
来源: 整理
发表评论 阅读全文(1134) | 回复(1)

1

关于投票
ACM-12864汉字液晶显示驱动程序

//HT1380实时时钟驱动程序

sbit clock_dat=P0^1;
sbit clock_clk=P0^2;
sbit clock_rst=P0^3;

sbit a0=ACC^0;
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;

void clock_out(unsigned char dd) {
 ACC=dd;
 clock_dat=a0;clock_clk=1;clock_clk=0;
 clock_dat=a1;clock_clk=1;clock_clk=0;
 clock_dat=a2;clock_clk=1;clock_clk=0;
 clock_dat=a3;clock_clk=1;clock_clk=0;
 clock_dat=a4;clock_clk=1;clock_clk=0;
 clock_dat=a5;clock_clk=1;clock_clk=0;
 clock_dat=a6;clock_clk=1;clock_clk=0;
 clock_dat=a7;clock_clk=1;clock_clk=0;
}
unsigned char clock_in(void) {
 clock_dat=1;
 a0=clock_dat;
 clock_clk=1;clock_clk=0;a1=clock_dat;
 clock_clk=1;clock_clk=0;a2=clock_dat;
 clock_clk=1;clock_clk=0;a3=clock_dat;
 clock_clk=1;clock_clk=0;a4=clock_dat;
 clock_clk=1;clock_clk=0;a5=clock_dat;
 clock_clk=1;clock_clk=0;a6=clock_dat;
 clock_clk=1;clock_clk=0;a7=clock_dat;
 return(ACC);
}
unsigned char read_clock(unsigned char ord) {
 unsigned char dd="0";
 clock_clk=0;
 clock_rst=0;
 clock_rst=1;
 clock_out(ord);
 dd=clock_in();
 clock_rst=0;
 clock_clk=1;
 return(dd);
}
void write_clock(unsigned char ord,unsigned char dd) {
 clock_clk=0;
 clock_rst=0;
 clock_rst=1;
 clock_out(ord);
 clock_out(dd);
 clock_rst=0;
 clock_clk=1;
}

 

系统分类: 单片机
用户分类: 源程序
标签: 液晶
来源: 整理
发表评论 阅读全文(971) | 回复(0)

1

关于投票
HT1380实时时钟驱动程序

//HT1380实时时钟驱动程序

sbit clock_dat=P0^1;
sbit clock_clk=P0^2;
sbit clock_rst=P0^3;

sbit a0=ACC^0;
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;

void clock_out(unsigned char dd) {
 ACC=dd;
 clock_dat=a0;clock_clk=1;clock_clk=0;
 clock_dat=a1;clock_clk=1;clock_clk=0;
 clock_dat=a2;clock_clk=1;clock_clk=0;
 clock_dat=a3;clock_clk=1;clock_clk=0;
 clock_dat=a4;clock_clk=1;clock_clk=0;
 clock_dat=a5;clock_clk=1;clock_clk=0;
 clock_dat=a6;clock_clk=1;clock_clk=0;
 clock_dat=a7;clock_clk=1;clock_clk=0;
}
unsigned char clock_in(void) {
 clock_dat=1;
 a0=clock_dat;
 clock_clk=1;clock_clk=0;a1=clock_dat;
 clock_clk=1;clock_clk=0;a2=clock_dat;
 clock_clk=1;clock_clk=0;a3=clock_dat;
 clock_clk=1;clock_clk=0;a4=clock_dat;
 clock_clk=1;clock_clk=0;a5=clock_dat;
 clock_clk=1;clock_clk=0;a6=clock_dat;
 clock_clk=1;clock_clk=0;a7=clock_dat;
 return(ACC);
}
unsigned char read_clock(unsigned char ord) {
 unsigned char dd="0";
 clock_clk=0;
 clock_rst=0;
 clock_rst=1;
 clock_out(ord);
 dd=clock_in();
 clock_rst=0;
 clock_clk=1;
 return(dd);
}
void write_clock(unsigned char ord,unsigned char dd) {
 clock_clk=0;
 clock_rst=0;
 clock_rst=1;
 clock_out(ord);
 clock_out(dd);
 clock_rst=0;
 clock_clk=1;
}

 

系统分类: 单片机
用户分类: 源程序
标签: HT1380
来源: 整理
发表评论 阅读全文(388) | 回复(0)
总共 , 当前 /