📄 lesson 8_9.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P3^0;
sbit lcden=P3^1;
sbit sda=P3^7;
sbit sck=P3^6;
uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void write_cmd(uchar cmd); //还要声明
void write_data(uchar data1);
void sda_0() {sda=0;;;;}
void sda_1() {sda=1;;;;}
void sck_0() {sck=0;;;;}
void sck_1() {sck=1;;;;}
void delay1() {;;;}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
sda_1();
sck_1();
}
//+++++++++++I2C子程序++++++++++++++++
void start() //开始信号
{
sda_1();
sck_1();
sda_0();
}
void stop() //停止
{
sda_0();
sck_1();
sda_1();
}
void response() //应答
{
uchar i;
sck_1();
while((sda==1)&&(i<250))i++;
sck_0();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
sck_0();
sda=CY; delay1();
sck_1();
}
sck_0();
sda_1();
response();
}
uchar read_byte()
{
uchar i,temp;
sck_0();
sda_1();
for(i=0;i<8;i++)
{
sck_1();
temp=(temp<<1)|sda;
sck_0();
}
response();
return temp;
}
void write_add(uchar address,uchar data1)
{
start();
write_byte(0xa0);
write_byte(address);
write_byte(data1);
stop();
}
uchar read_add(uchar address)
{
uchar data1;
start();
write_byte(0xa0);
write_byte(address);
start();
write_byte(0xa1);
data1=read_byte();
stop();
return data1;
}
//------------I2C子程序-----------------
//+++++++++++1602显示子程序++++++++++++++++
void display(uint k)
{
uchar bai,shi,ge,temp;
temp=k;
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
write_cmd(0x86);
write_data(table[bai]);
write_cmd(0x87);
write_data(table[shi]);
write_cmd(0x88);
write_data(table[ge]);
}
void initial_LCD()
{
lcden=0;
write_cmd(0x38); // 16X2 5X8显示
write_cmd(0x0c); //开显示 光标 闪烁
write_cmd(0x06); //地址指针自动加一,不移动
write_cmd(0x01); //清屏
write_cmd(0x80); //数据指针设置
}
void write_cmd(uchar cmd)
{
lcdrs=0;
P2=cmd;
delay(2);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar data1)
{
lcdrs=1;
P2=data1;
delay(2);
lcden=1;
delay(5);
lcden=0;
}
//---------------1602显示子程序--------------
void main()
{
uchar i,j;
init();
initial_LCD();
for(i=0,j=0;i<255;i++,j++)
{
write_add(i,j);
}
delay(10);
for(i=0,j=0;i<255;i++,j++)
{
P1=read_add(i);
display(i);
delay(50);
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -