历史上的今天
今天是:2025年01月11日(星期六)
2020年01月11日 | 如何正确的使用PIC单片机内部的IIC通信
2020-01-11 来源:eefocus
#include
#define uchar unsigned char
#define uint unsigned int
#define add 0xaa
__CONFIG(0x3B31);
const uchar ee_data[]={1,2,3,4,5,6};
uchar read_data[6];
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint x);
void init();
void didi(uchar num);
void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6);
void write();
void read();
void main()
{
init();
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;
TRISE0=0;
//ADCON1=0x07;
RE0=0;
PORTD=0;
PORTA=0;
TRISC=0xff;
SSPSTAT=0x80;
SSPCON=0x38;
SSPCON2=0;
SSPADD=0x09;
}
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 didi(uchar num)
{
uchar di_num;
for(di_num=num;di_num》0;di_num--)
{
RE0=1;
delay(50);
RE0=0;
delay(20);
}
}
本文引用地址: http://www.21ic.com/app/mcu/201812/786472.htm
void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6)
{
PORTD=table[num1];//显示第一个数码管
PORTA=0x20;//0010 0000
delay(2);
PORTD=table[num2];//显示第二个数码管
PORTA=0x10;//0001 0000
delay(2);
PORTD=table[num3];//显示第三个数码管
PORTA=0x08;//0000 1000
delay(2);
PORTD=table[num4];//显示第四个数码管
PORTA=0x04;//0000 0100
delay(2);
PORTD=table[num5];//显示第五个数码管
PORTA=0x02;//0000 0010
delay(2);
PORTD=table[num6];//显示第六个数码管
PORTA=0x01;//0000 0001
delay(2);
}
下一篇:影响单片机功耗的因素有哪些
史海拾趣
|
移动式无线视频监控,指系统的视频采集前端是可移动的视频采集终端,对不同的临时监控需求点进行监控。可移动的视频采集终端由于监控点不固定,因此,它必须利用无线公网作为监控数据的传输网络。 移动视频监控系统原理 移动视 ...… 查看全部问答> |
|
在2440.h中这么写的 #define ADC_BASE 0xB1800000 // 0x58000000 而在map.a中是这样写的, DCD 0x91800000, 0x58000000, 1 ; A/D convert register 0x91800000: 虚拟地址 0x58000000: 物理地 ...… 查看全部问答> |
|
安装了IAR5.2,破解失败,怎么回事啊,用5.2的朋友进来看看 Fatal Error[Cp001]: Copy protection check, No valid license found for this product对程序进行编译就会有这个错误,用软件破解了啊,也在网上查了,但是还是没有解决我卸载好几遍了希望高手帮助啊… 查看全部问答> |




