zoukankan      html  css  js  c++  java
  • PIC单片机的i2c的程序

    #include<pic.h>
    #define uchar unsigned char
    #define uint unsigned int
    #define add 0xaa
    __CONFIG(0xc3e4);
    __CONFIG(0xffff);
    #define DS1302 RC2 //定义关掉DS1302时钟芯片,使RC4 RC3 IO口可以用于AT24C02控制。

    const uchar ee_data[]={1,2,3,3,2,1};
    uchar read_data[6];
    const uchar table[]={0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f};
    void delay(uint x);
    void init();
    void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6);
    void write();
    void read();
    void main()
    {
    init();
    DS1302=0;// 关掉DS1302
    write();
    delay(100);
    read();

    while(1)
    {
    disp(read_data[0],read_data[1],read_data[2],read_data[3],read_data[4],read_data[5]);
    }
    }
    void delay(uint x)
    {
    uint a,b;
    for(a=x;a>0;a--)
    for(b=110;b>0;b--);
    }
    void init()
    {
    TRISD=0;
    TRISA=0;
    //TRISC=0;
    TRISE0=1;
    // ADCON1=0x07;
    //RE0=1;
    PORTD=0x3f;
    PORTA=0x00;
    TRISC=0x18;//用到RC3 RC4 输入 1

    SSPSTAT=0x80;
    SSPCON=0x38;
    SSPCON2=0;
    SSPADD=0x09;
    //PORTE=1;
    }
    void write()
    {
    uchar i;
    SSPIF=0;
    SEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0xA0;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=add;
    while(!SSPIF);
    SSPIF=0;
    for(i=0;i<6;i++)
    {
    SSPBUF=ee_data[i];
    while(!SSPIF);
    SSPIF=0;
    }
    PEN=1;
    while(!SSPIF);
    SSPIF=0;
    }
    void read()
    {
    uchar i;
    SSPIF=0;
    SEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0xA0;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=add;
    while(!SSPIF);
    SSPIF=0;
    SSPIF=0;
    RSEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0xA1;
    while(!SSPIF);
    SSPIF=0;
    for(i=0;i<6;i++)
    {
    RCEN=1;
    while(!SSPIF);
    read_data[i]=SSPBUF;
    while(!SSPIF);
    SSPIF=0;
    if(i>=5)
    {
    ACKDT=1;
    }
    else
    {
    ACKDT=0;
    }
    ACKEN=1;
    while(!SSPIF);
    SSPIF=0;
    }
    PEN=1;
    while(!SSPIF);
    SSPIF=0;
    }


    void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6)
    {
    PORTD=table[num1];//显示第一个数码管
    PORTA=0x01;//0010 0000
    delay(2);
    PORTD=table[num2];//显示第二个数码管
    PORTA=0x02;//0001 0000
    delay(2);
    PORTD=table[num3];//显示第三个数码管
    PORTA=0x04;//0000 1000
    delay(2);
    PORTD=table[num4];//显示第四个数码管
    PORTA=0x08;//0000 0100
    delay(2);
    PORTD=table[num5];//显示第五个数码管
    PORTA=0x10;//0000 0010
    delay(2);
    PORTD=table[num6];//显示第六个数码管
    PORTA=0x20;//0000 0001
    delay(2);
    }

  • 相关阅读:
    lower版购物车模拟
    字典的增删改查和操作
    生成四位验证码
    列表的增删改查和操作
    根据输入字符串,分别计算大写,小写,数字,标点的个数
    检查一个数是不是质数
    非诚勿扰,选心动女生(小游戏)
    汉诺塔的实现
    一个纯虚函数导致的问题
    Hello World 之 CGAL
  • 原文地址:https://www.cnblogs.com/byxzwz/p/9399270.html
Copyright © 2011-2022 走看看