标题:
proteus仿真单片机开发板上做At24c02读写试验
[打印本页]
作者:
heitian
时间:
2017-8-2 02:29
标题:
proteus仿真单片机开发板上做At24c02读写试验
自己做的一个仿真的单片机开发板,有完整的试验步骤和仿真工程文件提供
板子上带扩展ROM空间(i^2c 24c02)、adc(数字电压表)、dac(信号发生器)、矩形按键(计算器),四个任务通过独立按键进行切换
下面是At24c02读写部分的的单片机源程序
完整代码和仿真工程文件请下载
http://www.51hei.com/bbs/dpj-91558-1.html
#include <reg51.h>
#include "i2c.h"
#include "lcd.h"
//按键IO
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
sbit K4=P3^3;
sbit key=P3^4;
//--定义全局变量--//
unsigned char wordCode0[6] = "write:";
unsigned char wordCode1[6] = " read:";
//--声明全局函数--//
void At24c02Write(unsigned char ,unsigned char );
unsigned char At24c02Read(unsigned char );
void Delay10ms(unsigned int c); //误差 0us
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
*******************************************************************************/
void num24c02()
{
unsigned int num0 = 0,num1 = 0,n;
LcdInit();
LcdWriteCom(0x80);
for(n=0; n<6; n++)
{
LcdWriteData(wordCode0[n]);
}
LcdWriteCom(0x80 + 0x40);
for(n=0; n<6; n++)
{
LcdWriteData(wordCode1[n]);
}
while(key)
{
if(K1 == 0) //按键1按下
{
Delay10ms(1);
if(K1 == 0)
At24c02Write(2,num0);
while((n < 50)&&(K3==0))
{
n++;
Delay10ms(1);
}
n=0;
n=0;
}
if(K2 == 0) //按键2按下
{
Delay10ms(1);
if(K2 == 0)
num1 = At24c02Read(2);
while((n < 50)&&(K2 == 0))
{
n++;
Delay10ms(1);
}
n=0;
}
if(K3 == 0) //按键3按下
{
Delay10ms(1);
if(K3 == 0)
num0++;
while((n < 50)&&(K3 == 0))
{
n++;
Delay10ms(1);
}
n=0;
if(num0==256)
num0=0;
}
if(K4 == 0) //按键4按下
{
Delay10ms(1);
if(K4 == 0)
num0 = 0;
while((n < 50) && (K4 == 0))
{
n++;
Delay10ms(1);
}
n=0;
}
LcdWriteCom(0x86);
LcdWriteData('0' + (num0%1000%100/10));//十位
LcdWriteData('0' + (num0%1000%100%10));//个位
LcdWriteCom(0x89);
LcdWriteData('a');
LcdWriteData('d');
LcdWriteData('d');
LcdWriteData('r');
LcdWriteData('0' + (num0%1000%100/10));//十位
LcdWriteData('0' + (num0%1000%100%10));//个位
LcdWriteCom(0x86 + 0x40);
LcdWriteData('0' + (num1%1000%100/10));//十位
LcdWriteData('0' + (num1%1000%100%10));//个位
}
}
/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
*******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
/*******************************************************************************
* 函 数 名 : void At24c02Write(unsigned char addr,unsigned char dat)
* 函数功能 : 往24c02的一个地址写入一个数据
*******************************************************************************/
void At24c02Write(unsigned char addr,unsigned char dat)
{
I2C_Start();
I2C_SendByte(0xa0, 1);//发送写器件地址
I2C_SendByte(addr, 1);//发送要写入内存地址
I2C_SendByte(dat, 0); //发送数据
I2C_Stop();
}
/*******************************************************************************
* 函 数 名 : unsigned char At24c02Read(unsigned char addr)
* 函数功能 : 读取24c02的一个地址的一个数据
*******************************************************************************/
unsigned char At24c02Read(unsigned char addr)
{
unsigned char num;
I2C_Start();
I2C_SendByte(0xa0, 1); //发送写器件地址
I2C_SendByte(addr, 1); //发送要读取的地址
I2C_Start();
I2C_SendByte(0xa1, 1); //发送读器件地址
num=I2C_ReadByte(); //读取数据
I2C_Stop();
return num;
}
复制代码
作者:
xd_q
时间:
2018-1-19 14:17
下载地址在哪里?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1