IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 嵌入式工程师成长之路(三十三)之I2C通信以及51单片机读写字符串利用LCD12864显示程序 -> 正文阅读

[嵌入式]嵌入式工程师成长之路(三十三)之I2C通信以及51单片机读写字符串利用LCD12864显示程序

I2C通信以及51单片机读写字符串利用LCD12864显示程序

#include <reg51.h>        
#include <intrins.h>      //包含_nop_()函数定义的头文件
#define	READCOMDE	  0xa1		// 器件地址以及读取操作,0xa1即为1010 0001B
#define	WRITECOMDE  0xa0		// 器件地址以及写入操作,0xa1即为1010 0000B
#define  uchar  unsigned char
#define  uint  unsigned int 
#define port P0//DB0~DB7数据口
unsigned char code table[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
const unsigned char dattable[]={"helloworldhelloworld!"};
#define   size  sizeof(dattable)
sbit e=P2^7;//使能
sbit rw=P2^5;//读写
sbit rs=P2^6;//数据/命令
sbit rst=P3^4;
sbit psb=P3^2;
sbit SDA=P2^0;          //将串行数据总线SDA位定义在为P3.4引脚
sbit SCL=P2^1;         //将串行时钟总线SDA位定义在为P3.3引脚
void  delay_50us (uint n)

   { uint i;
    for( ;n>0;n--)
    for(i=19;i>0;i--);

	 }
	void  delay_50ms (uint n)

   { uint i;
    for( ;n>0;n--)
    for(i=6245;i>0;i--);

	 }
	 
 void comd(uchar com)	 //写指令函数
 {
 	
	 rs=0;
	 rw=0;//写操作
	 delay_50us(1);
	  port=com;
	 e=1;
	 delay_50us(10);
	 e=0;
   delay_50us(2);
	 
 
 }
 void date(uchar dat)  //写数据函数
 {
 
 	
	 rs=1;	//操作数据
	 rw=0; //写操作
	delay_50us(1);
	 port=dat;
	 e=1;
	 delay_50us(10);
	 e=0;
	   delay_50us(2);
 }


//void dispaly()
//{	
//}
 
void init(void)//初始化函数
{

	psb=1;
	rst=1;
 delay_50ms(2);
	comd(0x30);
delay_50us(4);
	comd(0x30);
delay_50us(4);
	comd(0x0f);
delay_50us(4);
	comd(0x01);
delay_50us(240);
	comd(0x06);
delay_50us(10);
}
  void delay1ms()
{
   unsigned char i,j;	
	 for(i=0;i<10;i++)
	  for(j=0;j<33;j++);		 
 }
 void delay()//延时两行空语句的时间,约2us
{ ;; }
void delaynms(int n)
 {
   int i;
	for(i=0;i<n;i++)
	   delay1ms();
 }
void startiic()
{

SDA=1;
delay();
delay();
SCL=1;//初始状态数据线与时钟线为高电平
delay();
SDA=0;//在时钟线为高电平的情况下拉低数据线表示起始信号
delay();
SCL=0;//起始信号完成后需要传输数据,所以拉低时钟线允许数据变化
delay();

}
unsigned char readbit8()
{
unsigned char i;
unsigned char dat=0;//定义一个8位数来存储读出的数据
for(i=0;i<8;i++)
{
SCL=1;//时钟线为高电平时因数据保持不变才可读数据
dat<<=1;
dat|=(unsigned char)SDA;//数据从高位开始读出,并保存在dat中
SCL=0;//时钟线为低电平时才允许数据变化传入
delay();
}
return(dat);

}

void writebit8(unsigned char dat)
{

unsigned char i;
for(i=0;i<8;i++)
{


SDA=(bit)(dat&0x80);
delay();
SCL=1;	
dat<<=1;
delay();
SCL=0;//时钟线为高电平时因数据保持不变才可读数据

}	

}
bit ack()
{
	
bit a;
SDA=1;//释放总线使SDA线由从机控制
SCL=1;//SCL为高电平保持数据
delay();	
a=SDA;
SCL=0;
	
	return(a);
	
}
void stopiic()
{


SDA=0;
delay();
SCL=1;	
delay();
SDA=1;
delay();
}
unsigned char  readdate(unsigned char address)
{  /*要一个地址返回一个数据*/
  /*读数据*/
  unsigned char dat;
	 startiic();//开始读数据
	writebit8(WRITECOMDE);//确定从器件地址
	 ack();	  //回应一下
	 writebit8(address); //存放数据的地址
	 ack();	 //回应一下 
	 startiic();//开始读数据
	writebit8(READCOMDE);//确定从器件地址,读操作,所以后面为1
	 ack();	  //回应一下
	dat=readbit8();//读出来的数据送往P3口
	 stopiic(); 
	 return dat;
}
void writedate(unsigned char address,unsigned char dat)
{
   startiic();
	 writebit8(WRITECOMDE);//确定从器件地址
	 ack();	  //回应一下
	 writebit8(address); //存放数据的地址
	 ack();	 //回应一下 
	 writebit8(dat);//想要写入的数据
	 ack();	  //回应一下
	 stopiic();
	 delaynms(2);
}
void read(unsigned char address,unsigned char *dat,unsigned char len)
{

while(len)
{		
	 *dat++=readdate(address++);
   len--;	
}

}
void write(unsigned char address,unsigned char *dat,unsigned char len)
{
	while(len--)
{


writedate(address,*dat);
address++;
dat++;

}	
	
}

void main()
{
	

	  unsigned char receivedate[size];
	 init();
while(1)
{
uchar i=0;
	   write(8,(unsigned char*)dattable,size);
	  read(8,receivedate,size);
	
		delaynms (1000);

   comd(0x80);

	for(i=0;i<size;i++)
{
 date(receivedate[i]);
delay_50us(1);
}
//dispaly();
}
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:22:14  更:2021-08-03 11:23:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:44:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码