⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lesson 8_9.c

📁 有51单片机C语言基础后在较短时间内学会51单片机C。
💻 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 + -