📄 程序.txt
字号:
#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit wr=P3^6;
sbit lcden=P3^4;
sbit CLK=P3^1;
sbit DIO=P3^2;
sbit CS1=P3^3;
sbit sda=P1^6;
sbit scl=P1^7;
sbit k1=P3^0;
sbit k2=P3^7;
uchar x,t,FLAG,fa;
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void delay20ms(void) //误差 0us
{
unsigned char a,b;
for(b=215;b>0;b--)
for(a=45;a>0;a--);
}
void delay1(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void delay2()
{;;}
void init_24c256()
{ scl=0;
delay2();
sda=1;
delay2();
}
void start()
{ sda=1;
delay2();
scl=1;
delay2();
sda=0;
delay2();
}
void stop()
{ sda=0;
delay2();
scl=1;
delay2();
sda=1;
delay2();
}
void response()
{ uchar i;
scl=1;
delay2();
while((sda==1)&&(i<255))
i++;
scl=0;
delay2();
}
void write_24c256(uchar dataa)
{ uchar i,temp;
temp=dataa;
for(i=0;i<8;i++)
{ temp=temp<<1;
scl=0;
sda=CY;
delay2();
scl=1;
delay2();
}
scl=0;
delay2();
sda=1;
delay2();
}
uchar read_24c256()
{ uchar i,k;
// scl=0;
//delay2();
//sda=1; //shi fang
for(i=0;i<8;i++)
{ scl=1;
delay2();
k=(k<<1)|sda;
scl=0;
delay2();
}
delay2();
return k;
}
void write_add(uchar address,uchar dat)
{ start();
write_24c256(0xa0);
response();
write_24c256(address);
response();
write_24c256(dat);
response();
stop();
}
uchar read_add(uchar address)
{ uchar date;
start();
write_24c256(0xa0);
response();
write_24c256(address);
response();
start();
write_24c256(0xa1);
response();
date=read_24c256();
stop();
return date;
}
/*void write_com(uchar com)
{
P0=com;
rs=0;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void write_date(uchar date)
{
P0=date;
rs=1;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void init()
{
wr=0;
write_com(0x38);
delay(20);
write_com(0x0c);
delay(20);
write_com(0x06);
delay(20);
write_com(0x01);
delay(20);
} */
unsigned char A_D()
{
unsigned char i,dat;
CS1=1; //一个转换周期开始
CLK=0; //为第一个脉冲作准备
CS1=0; //CS置0,片选有效
DIO=1; //DIO置1,规定的起始信号
CLK=1; //第一个脉冲
CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平
DIO=1; //DIO置1, 通道选择信号
CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
CLK=0; //第二个脉冲下降沿
DIO=0; //DI置0,选择通道0
CLK=1; //第三个脉冲
CLK=0; //第三个脉冲下降沿
DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1
CLK=1; //第四个脉冲
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第四个脉冲
CLK=0;
dat<<=1; //将下面储存的低位数据向右移
dat|=(unsigned char)DIO; //将输出数据DIO通过或运算储存在dat最低位
}
CS1=1; //片选无效
return dat; //将读书的数据返回
}
/*void keyscan()
{ uint i;
if(k1==0)
{
delay20ms();
if(k1==0)
{ while(!k1);
EA=1;
ET0=1;
TR0=1;
}
}
if(k2==0)
{
delay20ms();
if(k2==0)
{ while(!k2);
EA=0;
// ET0=0;
// TR0=0;
FLAG=1;
}
}
} */
void main()
{ uchar bb,cc;
//init();
init_24c256();
//x=read_add(0x00);
TMOD=0X01;
ET0=1;
EA=1;
TL0=(65535-5000)%256;
TH0=(65535-5000)/256;
TR0=1;
while(1)
{
if(fa==1)
{ fa=0;
bb=x;
write_add(bb);
delay20ms();
P2=read_add(0x00);
}
}
}
void time0_interrupt(void)interrupt 1
{ TL0=(65535-5000)%256;
TH0=(65535-5000)/256;
t++;
if(t==20)
{ t=0;
x=A_D();
fa=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -