久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1638|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

PCF8563程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:255077 發(fā)表于 2018-8-9 13:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)和PCF8563通信采用IIC協(xié)議,單片機(jī)讀取時(shí)鐘芯片內(nèi)寄存器數(shù)據(jù)或者時(shí)鐘芯片輸出時(shí)間信息給單片機(jī).
本程序知識簡單的顯示時(shí)間,也沒有加入芯片損壞延時(shí)判斷應(yīng)答子函數(shù).,只是了解芯片使用方法

IIC
總線和LCD1602函數(shù)包屬于標(biāo)準(zhǔn)代碼。

IIC
協(xié)議子函數(shù)包

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit SDA=P2^2;   //SDA
口設(shè)置
sbit SCL=P2^3;   //SCL
口設(shè)置


void delay()    //
略微延時(shí)  6us>4.7us
{
_nop_();
  _nop_();
   _nop_();
    _nop_();
         _nop_();
          _nop_();
}

void iic_start()   //
啟動(dòng)信號
{
  SDA=1;
  SCL=1;
  delay();
  SDA=0;
  delay();
  SCL=0;

}

void iic_stop()  //
停止信號
{
SDA=0;
SCL=1;
delay();
SDA=1;
delay();
SCL=0;
}

void iic_ack()   //
應(yīng)答信號
{
uchar i=0;
SCL=1;
delay();
while((SDA==1)&&(i<255))
i++;
SCL=0;
delay();
}

void iic_send_byte(uchar bat)  //
發(fā)送數(shù)據(jù)
{
uchar i,temp;
temp=bat;
for(i=0;i<=7;i++)
{
  temp=temp<<1;
  SCL=0;
  SDA=CY;
  delay();
  SCL=1;
  delay();
}
SCL=0;
delay();
SDA=1;
delay();
}

uchar iic_rev()  //
接受數(shù)據(jù)
{
  uchar temp,i;
  SCL=0;
  delay();
  SDA=1;
  for(i=0;i<=7;i++)
  {
   SCL=1;
   delay();
   temp=(temp<<1)|SDA;
   SCL=0;
   delay();
  }
  delay();
  return temp;
}

void iic_send_add_byte(uchar add,uchar bat) //
向某個(gè)地址發(fā)送某數(shù)據(jù)
{
iic_start();
iic_send_byte(0xa2);
iic_ack();
iic_send_byte(add);
iic_ack();
iic_send_byte(bat);
iic_ack();
iic_stop();
}

uchar iic_rec_add_byte(uchar add) //
從某個(gè)地址讀出數(shù)據(jù)
{
   uchar temp;
   iic_start();
   iic_send_byte(0xa2);
   iic_ack();
   iic_send_byte(add);
   iic_ack();
   iic_start();
   iic_send_byte(0xa3);
   iic_ack();
   temp=iic_rev();
   iic_stop();
   return temp;
}


LCD1602
函數(shù)包:

**********************************/
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;


void Delay1us(uint a)
{        
uint b,c;
for(c=a;c>0;c--)               
for(b=110;b>0;b--);
}

void LCD1602_WriteCom(uchar com)         //
寫入命令
{
        LCD1602_E=0;
        LCD1602_RS=0;
        LCD1602_RW=0;
       LCD1602_DATAPINS=com;        //
由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
        Delay1us(10);
        LCD1602_DATAPINS=com<<4;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
}

void LCD1602_WriteData(uchar dat)                       //
寫入數(shù)據(jù)
{
        LCD1602_E=0;
        LCD1602_RS=1;
        LCD1602_RW=0;
        LCD1602_DATAPINS=dat;       //
由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
       LCD1602_DATAPINS=dat<<4;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
}

void LCD1602_Init()                                               //LCD
初始化子程序
{
       LCD1602_WriteCom(0x32);         //
8位總線轉(zhuǎn)為4位總線
       LCD1602_WriteCom(0x28);         //
在四位線下的初始化
       LCD1602_WriteCom(0x0c);  //
開顯示不顯示光標(biāo)
        LCD1602_WriteCom(0x06);  //
寫一個(gè)指針加1
       LCD1602_WriteCom(0x01);  //
清屏
       LCD1602_WriteCom(0x80);  //
設(shè)置數(shù)據(jù)指針起點(diǎn)
}

//-----
主函數(shù)---------
#include <reg52.h>
#include "lcd.h"
#include "iic.h"

//-----------
延時(shí)用于穩(wěn)定-------------
void delay_kk(uint k)
{
  while(k--);
}

//------------------------------BCD
碼講解---
比如十六進(jìn)制數(shù)0x56  如果代表BCD碼,則其就是代表10進(jìn)制的56  但是在計(jì)算機(jī)里面如果用于計(jì)算他就是86(十進(jìn)制),所以后面例出BCD轉(zhuǎn)10進(jìn)制子函數(shù)    PCF8563顯示的數(shù)都是BCD

file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtml1/01/clip_image002.jpg
//-----------
時(shí)間預(yù)設(shè)定值---------
void time_init()
{
   iic_send_add_byte(0x02,0x50);        //0

       iic_send_add_byte(0x03,0x59);         //0
分鐘   
   iic_send_add_byte(0x04,0x23);          //0
小時(shí)            
        iic_send_add_byte(0x05,0x26);  //26

         iic_send_add_byte(0x07,0x05);          //5
  20世紀(jì)的
        iic_send_add_byte(0x08,0x14);        //2014

}
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtml1/01/clip_image004.jpg
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtml1/01/clip_image005.jpg

//----------------PCF8563
初始化-----------------
void pcf_init()
{
       iic_send_add_byte(0x00,0x00);  //
啟動(dòng)時(shí)鐘
}

//----------------BCD
轉(zhuǎn)10進(jìn)制-----------
uchar bcd_dec(uchar bat)
{
uchar temp1,temp2,tol;
temp1=bat&0x0f;
temp2=(bat&0xf0)>>4;
tol=temp2*10+temp1;
return tol;
}

//------------LCD1602
顯示:年,,,小時(shí),分鐘,,
void display_time(ucharsec,min,hour,dat,moom,year)
{
  LCD1602_WriteCom(0x80);
  LCD1602_WriteData('_');
LCD1602_WriteData('2');
LCD1602_WriteData('0');
LCD1602_WriteData(year/10+48);
LCD1602_WriteData(year%10+48);
LCD1602_WriteData('/');
LCD1602_WriteData(moom+48);
LCD1602_WriteData('/');
LCD1602_WriteData(dat/10+48);
LCD1602_WriteData(dat%10+48);
  LCD1602_WriteCom(0xc4);
   LCD1602_WriteData(hour/10+48);
    LCD1602_WriteData(hour%10+48);
LCD1602_WriteData(':');
LCD1602_WriteData(min/10+48);
LCD1602_WriteData(min%10+48);
LCD1602_WriteData(':');
LCD1602_WriteData(sec/10+48);
LCD1602_WriteData(sec%10+48);
}

void main()
{
   ucharsec,min,hour,dat,moom,year,sec1,min1,hour1,dat1,moom1,year1;  //PCF8563
讀出的變量和代轉(zhuǎn)換成的十進(jìn)制變量
   LCD1602_Init();
  iic_send_add_byte(0x00,0x20);  //
關(guān)閉時(shí)鐘
  delay_kk(1000);
        time_init();    //
時(shí)鐘芯片初始時(shí)間設(shè)置
        pcf_init();
    delay_kk(1000);
  while(1)
  {
           sec=0x7f&iic_rec_add_byte(0x02);    //
讀取秒
        min=0x7f&iic_rec_add_byte(0x03);   //
讀取分鐘
        hour=0x3f&iic_rec_add_byte(0x04);  //
讀取小時(shí)
        dat=0x3f&iic_rec_add_byte(0x05);   //
讀取天數(shù)
        moom=0x1f&iic_rec_add_byte(0x07);  //
讀取月
        year=0xff&iic_rec_add_byte(0x08);    //
讀取年
        sec1=bcd_dec(sec);                  //
將讀取的BCD碼秒轉(zhuǎn)換成十進(jìn)制秒以便運(yùn)算
        min1=bcd_dec(min);
        hour1=bcd_dec(hour);
        dat1=bcd_dec(dat);
        moom1=bcd_dec(moom);
        year1=bcd_dec(year);
        display_time(sec1,min1,hour1,dat1,moom1,year1);  //LCD1602
顯示時(shí)間
  }                                       
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲男人网 | 亚洲三区视频 | 美女黄网站视频免费 | 久久精品国产清自在天天线 | 色婷婷在线视频 | 男女午夜激情视频 | 国产精品一区二区三区在线 | 亚州综合在线 | 黑人精品| 日韩欧美一区二区三区四区 | 老外几下就让我高潮了 | 亚洲综合一区二区三区 | 欧美99久久精品乱码影视 | 青青操91| 日本不卡免费新一二三区 | 91在线网站 | 国产一级在线 | 日韩色图在线观看 | 国产精品无码久久久久 | 欧美日韩高清免费 | 一级片在线观看 | 欧美色专区 | 在线观看视频一区 | 国产精品精品视频一区二区三区 | 欧美日韩电影一区 | 日韩久久久久久 | 亚洲高清视频一区二区 | 久国产视频 | 天天天久久久 | 91av在线免费播放 | 久久国产电影 | 午夜欧美一区二区三区在线播放 | 精品一区二区三区免费视频 | 国产精品v| 亚洲欧美一区二区三区1000 | 精品日韩一区二区三区 | 国产一区二区三区四区 | av在线播放网 | 欧美成人精品欧美一级 | 日韩一区二区久久 | 成人精品啪啪欧美成 |