标题:
IIC初学所写的一些程序
[打印本页]
作者:
liuda
时间:
2015-1-23 00:59
标题:
IIC初学所写的一些程序
溜达一圈,刚回来,昨晚弄IIC,搞得晚上都没睡好觉,难得昨天天气很好,室温20度,穿一件内衣都可以了;
IIC 协议用郭天祥书本上现成的,记得以前帮MM搞毕业设计时LCD上的串行协议也是用他的;
反正,这个协议完全应该可以当成标准品来用了,感觉一段时间没玩代码,又似乎回到了起点;
单字节读写没有问题;今天准备把多字节给
#include<reg52.h>
#include<intrins.h>
#include<at24c04.c>
#define uint unsigned int
#define uchar unsigned char
uint BTime_Count;
uchar BSec,Sec,Min,Hour,Sec_Flag;
sbit Rst = P1^5;sbit Lcd_Csb = P1^4;sbit Lcd_Csa = P1^3;
sbit Rs = P1^2;sbit Rw = P1^1;sbit En = P1^0;
sbit BL = P2^1;sbit Led = P2^3;
sbit Key_1=P2^5;sbit Key_2=P2^6;sbit Key_3=P2^7;
uchar code display_number[]={0,1,2,3,4,5,6,7,8,9};
uchar clock[6];
uchar code zk3[][144]={
// 0(0) 1(1) 2(2) 3(3) 4(4) 5(5) 6(6) 7(7) 8(8) 9(9)
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,
0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,
0x00,0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x01,0x00,0x00,0x00,
0x00,0x01,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7E,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"0",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0xC0,0xC0,0xF0,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"1",1*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,
0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xF0,
0x00,0x3E,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x03,0x01,0x00,0x80,0xC0,
0xE1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xF0,
0xF0,0xF8,0xFC,0xFC,0xFE,0xFF,0x7F,0x7F,0x3F,0x1F,0x1F,0x0F,0x0F,0x07,0x03,0x03,
0x70,0x7C,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",2*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,
0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xE0,
0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0xC1,0xC0,0xC0,0xE1,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0x80,0x07,0x07,0x07,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"3",3*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFC,0xFE,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"4",4*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0xF1,0xF1,0xF1,
0xF1,0xF1,0xF1,0xF1,0xF1,0xF1,0xE1,0xE1,0x00,0x80,0x83,0x83,0x83,0x87,0x87,0x87,
0x87,0xC7,0xC7,0x87,0x03,0x01,0x01,0x01,0x03,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x03,0x0F,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"5",5*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,
0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,
0x00,0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE1,0xF0,0xF0,0xF0,
0xF0,0xF1,0xF3,0xF3,0xF3,0xF3,0xE3,0xE3,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x87,0x03,0x01,0x01,0x01,0x03,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"6",6*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xC1,0xE1,0xF1,0xFD,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xF0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"7",7*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xF8,
0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,
0x00,0x00,0x0F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,0xE0,0xE0,0xE0,
0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x8F,0x07,0x03,0x03,0x03,0x07,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"8",8*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0xF0,0xF8,0xF8,
0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xE0,
0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x81,0x00,0x00,0x00,
0x81,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x81,0x83,0x87,0x8F,0x8F,0x9F,
0x9F,0x9F,0x9F,0x1F,0x1F,0x1F,0x1F,0x1F,0x0F,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x3F,0x3F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"9",9*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",11*/
};
/*------------------------------------?-------------------------------------*/
void Delay_ms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=1222;j>0;j--)
{;}
}
void Delay_us(uint us)
{
while(us--);
}
//----------------------------------------------------------------------------------------
void Busy(void)
{
Rs=0;
Rw=1;
P0=0xff;
En=1;
while((P0&0x80)!=0);
En=0;
}
//WR_DATA&CMd
void wrdata(uchar a,uchar b,uchar c,uchar lcddata)
{
Lcd_Csa=a;
Lcd_Csb=b;
Busy();
Rs=c;
Rw=0;
En=1;
P0=lcddata;
En=0;
Lcd_Csa=1;
Lcd_Csb=1;
Rs=1;
Rw=1;
}
//LCM INITIAL
void initallcd(void)
{
Lcd_Csa=1;
Lcd_Csb=1;
Rst=0;
Delay_ms(50);
Rst=1;
Delay_ms(50);
wrdata(0,0,0,0x3E);
Delay_ms(5);
wrdata(0,1,0,0x3E);
Delay_ms(5);
wrdata(1,0,0,0x3E);
Delay_ms(5);
wrdata(0,0,0,0x3F);
Delay_ms(5);
wrdata(0,1,0,0x3F);
Delay_ms(5);
wrdata(1,0,0,0x3F);
Delay_ms(5);
}
void Clear(uchar dat)
{
uchar i,j;
uchar page=0xb8;
for(i=0;i<8;i++)
{
wrdata(0,0,0,page|i);
wrdata(0,0,0,0x40);
wrdata(0,0,0,0xc0);
wrdata(0,1,0,page|i);
wrdata(0,1,0,0x40);
wrdata(0,1,0,0xc0);
wrdata(1,0,0,page|i);
wrdata(1,0,0,0x40);
wrdata(1,0,0,0xc0);
for(j=0;j<64;j++)
{
wrdata(0,0,1,dat);
wrdata(0,1,1,dat);
wrdata(1,0,1,dat);
}
}
}
void disp4848(uchar a,uchar b,uchar c,uchar addr,uchar row,uchar *p)
{
uchar i,ch;
addr=0xb8+addr;
wrdata(a,b,0,addr);
wrdata(a,b,0,row);
for(i=0;i<144;i++)
{
ch=*p;
wrdata(a,b,c,ch);
p++;
if((i==24)||(i==48)||(i==72)||(i==96)||(i==120))
{
wrdata(a,b,0,++addr);
wrdata(a,b,0,row+1);
}
}
}
void Time_ini(void)
{
TMOD=0x02;
TH0=6;
TL0=6;
TR0=1;
ET0=1;
EA=1;
}
void Time0()interrupt 1
{
TF0=0;
BTime_Count++;
if(BTime_Count==2000)
{
BTime_Count=0;
BSec++;
if(BSec==2)
{
BSec=0;Sec++;Sec_Flag=1;
if(Sec==60)
{
Sec=0;Min++;
if(Min==60)
{
Min=0;Hour++;
if(Hour==24)
{
Hour=0;
}
}
}
}
}
}
/*------------------------------------------
void Time_Pro(void)
{
disp4848(0,0,1,0,0x40,zk3[Hour/10]);
disp4848(0,0,1,0,0x58,zk3[Hour%10]);
disp4848(1,0,1,0,0x40,zk3[Min/10]);
disp4848(1,0,1,0,0x58,zk3[Min%10]);
disp4848(0,1,1,0,0x40,zk3[Sec/10]);
disp4848(0,1,1,0,0x58,zk3[Sec%10]);
}
*///-----------------------------------------
void Time_Pro(void)
{
disp4848(0,0,1,0,0x40,zk3[clock[0]]);
disp4848(0,0,1,0,0x58,zk3[clock[1]]);
disp4848(1,0,1,0,0x40,zk3[clock[2]]);
disp4848(1,0,1,0,0x58,zk3[clock[3]]);
disp4848(0,1,1,0,0x40,zk3[clock[4]]);
disp4848(0,1,1,0,0x58,zk3[clock[5]]);
}
void Disp(void)
{
clock[0]=display_number[Hour/10];
clock[1]=display_number[Hour%10];
clock[2]=display_number[Min/10];
clock[3]=display_number[Min%10];
clock[4]=display_number[Sec/10];
clock[5]=display_number[Sec%10];
}
void main()
{
initallcd();
Clear(0x00);
init();
Sec=read_add(0);
//clock=Read_Flash();
Time_ini();
while(1)
{
Time_Pro();
if(Sec_Flag)
{
Sec_Flag=0;Led=~Led;
write_add(0,Sec);
write_add(1,Min);
write_add(2,Hour);
}
}
}
#define uchar unsigned char
#define uint unsigned int
sbit IIC_Sda=P3^5;
sbit IIC_Scl=P3^6;
uchar a;
void delay()
{ ;; }
void start() //开始信号
{
IIC_Sda=1;
delay();
IIC_Scl=1;
delay();
IIC_Sda=0;
delay();
}
void stop() //停止
{
IIC_Sda=0;
delay();
IIC_Scl=1;
delay();
IIC_Sda=1;
delay();
}
void respons() //应答
{
uchar i;
IIC_Scl=1;
delay();
while((IIC_Sda==1)&&(i<250))i++;
IIC_Scl=0;
delay();
}
void init() //初始化
{
IIC_Sda=1;
delay();
IIC_Scl=1;
delay();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
IIC_Scl=0;
delay();
IIC_Sda=CY;
delay();
IIC_Scl=1;
delay();
}
IIC_Scl=0;
delay();
IIC_Sda=1;
delay();
}
uchar read_byte()
{
uchar i,k;
IIC_Scl=0;
delay();
IIC_Sda=1;
delay();
for(i=0;i<8;i++)
{
IIC_Scl=1;
delay();
k=(k<<1)|IIC_Sda;
IIC_Scl=0;
delay();
}
return k;
}
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
void Read_Flash(uchar *Array,uchar nAdd,uchar nLen)
{
start();
write_byte(0xa0);
respons();
write_byte(nAdd);
respons();
start();
write_byte(0xa1);
respons();
while(--nLen)
{
*Array=read_byte();
Array++;
respons();
}
*Array=read_byte();
stop();
}
void Write_Flash(uchar *Array,uchar nAdd,uchar nLen)
{
uchar i;
start();
write_byte(0xa0);
respons();
write_byte(nAdd);
respons();
for(i=0;i<nLen;i++)
{
write_byte(*Array);
Array++;
}
respons();
stop();
}
复制代码
弄上去(书上没有),写着写着,发现有点麻烦,哎,先上单字节的程序了;
作者:
liuda
时间:
2015-1-23 00:59
昨天,晚上也难眠;
上午起得比较晚,坐在床上弹了一个上午的吉他,只是自已从来没有认真练过弹与唱,有点感觉了的时候就投入了;
今天,终于调通了IIC—AT24C04,写了一个时钟程序,每隔一秒钟把时分秒往AT24C04里写一次;
这样上电后就记录了断电时的数据;
下午,一个员工一边玩我的电脑,和我扯谈了一个下午,扯得我嗓子都痛了;
呵呵,我真不知我这么菜的,还能不能接上外单业务,这个我还真没把握,没想过要赚得多少钱;
只是想玩玩,可是发现如果没投入进去,又老是觉得不过隐;
好了,到这基本可以上路了,天马行空,自由发挥啊!
上程序了:且看,往IIC里面写数据,要延时啊,不然数据老是不对;1T的芯片啊!
#include<reg51.h>
#include<intrins.h>
#include<at24c04.c>
#define uint unsigned int
#define uchar unsigned char
uint BTime_Count;
uchar BSec,Sec,Min,Hour,Sec_Flag;
sbit Rst = P1^5;sbit Lcd_Csb = P1^4;sbit Lcd_Csa = P1^3;
sbit Rs = P1^2;sbit Rw = P1^1;sbit En = P1^0;
sbit BL = P2^1;sbit Led = P2^3;
sbit Key_1=P2^5;sbit Key_2=P2^6;sbit Key_3=P2^7;
uchar clock[3];
uchar rclock[3];
uchar code zk3[][144]={
// 0(0) 1(1) 2(2) 3(3) 4(4) 5(5) 6(6) 7(7) 8(8) 9(9)
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,
0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,
0x00,0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x01,0x00,0x00,0x00,
0x00,0x01,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7E,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"0",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0xC0,0xC0,0xF0,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"1",1*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,
0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xF0,
0x00,0x3E,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x03,0x01,0x00,0x80,0xC0,
0xE1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xF0,
0xF0,0xF8,0xFC,0xFC,0xFE,0xFF,0x7F,0x7F,0x3F,0x1F,0x1F,0x0F,0x0F,0x07,0x03,0x03,
0x70,0x7C,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",2*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,
0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xE0,
0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0xC1,0xC0,0xC0,0xE1,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0x80,0x07,0x07,0x07,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"3",3*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFC,0xFE,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"4",4*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0xF1,0xF1,0xF1,
0xF1,0xF1,0xF1,0xF1,0xF1,0xF1,0xE1,0xE1,0x00,0x80,0x83,0x83,0x83,0x87,0x87,0x87,
0x87,0xC7,0xC7,0x87,0x03,0x01,0x01,0x01,0x03,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x03,0x0F,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"5",5*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,
0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,
0x00,0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE1,0xF0,0xF0,0xF0,
0xF0,0xF1,0xF3,0xF3,0xF3,0xF3,0xE3,0xE3,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x87,0x03,0x01,0x01,0x01,0x03,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"6",6*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xC1,0xE1,0xF1,0xFD,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xF0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"7",7*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xF8,
0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,
0x00,0x00,0x0F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,0xE0,0xE0,0xE0,
0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x8F,0x07,0x03,0x03,0x03,0x07,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"8",8*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0xF0,0xF8,0xF8,
0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xE0,
0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x81,0x00,0x00,0x00,
0x81,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x81,0x83,0x87,0x8F,0x8F,0x9F,
0x9F,0x9F,0x9F,0x1F,0x1F,0x1F,0x1F,0x1F,0x0F,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,0x7E,
0x7F,0x7F,0x7F,0x3F,0x3F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"9",9*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",11*/
};
/*------------------------------------?-------------------------------------*/
void Delay_ms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=1222;j>0;j--)
{;}
}
void Delay_us(uint us)
{
while(us--);
}
//----------------------------------------------------------------------------------------
void Busy(void)
{
Rs=0;
Rw=1;
P0=0xff;
En=1;
while((P0&0x80)!=0);
En=0;
}
//WR_DATA&CMd
void wrdata(uchar a,uchar b,uchar c,uchar lcddata)
{
Lcd_Csa=a;
Lcd_Csb=b;
Busy();
Rs=c;
Rw=0;
En=1;
P0=lcddata;
En=0;
Lcd_Csa=1;
Lcd_Csb=1;
Rs=1;
Rw=1;
}
//LCM INITIAL
void initallcd(void)
{
Lcd_Csa=1;
Lcd_Csb=1;
Rst=0;
Delay_ms(50);
Rst=1;
Delay_ms(50);
wrdata(0,0,0,0x3E);
Delay_ms(5);
wrdata(0,1,0,0x3E);
Delay_ms(5);
wrdata(1,0,0,0x3E);
Delay_ms(5);
wrdata(0,0,0,0x3F);
Delay_ms(5);
wrdata(0,1,0,0x3F);
Delay_ms(5);
wrdata(1,0,0,0x3F);
Delay_ms(5);
}
void Clear(uchar dat)
{
uchar i,j;
uchar page=0xb8;
for(i=0;i<8;i++)
{
wrdata(0,0,0,page|i);
wrdata(0,0,0,0x40);
wrdata(0,0,0,0xc0);
wrdata(0,1,0,page|i);
wrdata(0,1,0,0x40);
wrdata(0,1,0,0xc0);
wrdata(1,0,0,page|i);
wrdata(1,0,0,0x40);
wrdata(1,0,0,0xc0);
for(j=0;j<64;j++)
{
wrdata(0,0,1,dat);
wrdata(0,1,1,dat);
wrdata(1,0,1,dat);
}
}
}
void disp4848(uchar a,uchar b,uchar c,uchar addr,uchar row,uchar *p)
{
uchar i,ch;
addr=0xb8+addr;
wrdata(a,b,0,addr);
wrdata(a,b,0,row);
for(i=0;i<144;i++)
{
ch=*p;
wrdata(a,b,c,ch);
p++;
if((i==24)||(i==48)||(i==72)||(i==96)||(i==120))
{
wrdata(a,b,0,++addr);
wrdata(a,b,0,row+1);
}
}
}
void Time_ini(void)
{
TMOD=0x02;
TH0=6;
TL0=6;
TR0=1;
ET0=1;
EA=1;
}
void Time0()interrupt 1
{
TF0=0;
BTime_Count++;
if(BTime_Count==2000)
{
BTime_Count=0;
BSec++;
if(BSec==2)
{
BSec=0;Sec++;Sec_Flag=1;
if(Sec==60)
{
Sec=0;Min++;
if(Min==60)
{
Min=0;Hour++;
if(Hour==24)
{
Hour=0;
}
}
}
}
}
}
void Time_Pro(void)
{
disp4848(0,0,1,0,0x40,zk3[clock[2]/10]);
disp4848(0,0,1,0,0x58,zk3[clock[2]%10]);
disp4848(1,0,1,0,0x40,zk3[clock[1]/10]);
disp4848(1,0,1,0,0x58,zk3[clock[1]%10]);
disp4848(0,1,1,0,0x40,zk3[clock[0]/10]);
disp4848(0,1,1,0,0x58,zk3[clock[0]%10]);
}
void WDisp(void)
{
clock[2]=Hour;
clock[1]=Min;
clock[0]=Sec;
}
void RDisp(void)
{
Hour=clock[2];
Min=clock[1];
Sec=clock[0];
}
void main(void)
{
uchar i;
initallcd();
Clear(0x00);
init();
for(i=0;i<3;i++)
{clock[i]=read_add(i);Delay_ms(10);}
RDisp();
Time_ini();
while(1)
{
Time_Pro();
if(Sec_Flag)
{
Sec_Flag=0;Led=~Led;WDisp();
for(i=0;i<3;i++)
{write_add(i,clock[i]);Delay_ms(10);}
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1