资源简介
I2C总线proteus测试代码

代码片段和文件信息
#include
#define uchar unsigned char
uchar code table[] = “Write:“;
uchar code table2[] = “Read :“;
uchar code write_data[] = “World“;
sbit port_rs = P3 ^ 4; //数据/命令选择端,1是数据,0是命令(状态)
sbit port_rw = P3 ^ 5; //读写控制,1是读,0是写
sbit port_en = P3 ^ 6; //使能端,高电平允许
sbit scl = P1 ^ 0;
sbit sda = P1 ^ 1;
void delay(uchar t);
void set_lcd(uchar val);
void set_data(uchar dat);
void write_at_addr(uchar addruchar dat);
uchar read_at_addr(uchar addr);
void init();
void delay_us();
void main()
{
uchar i;
init();
set_lcd(0x80);//把位置设置为第一行第一位
for(i=0;i<6;i++)
set_data(table[i]);
set_lcd(0x80+0x40);//把位置设置到第二行第一位
for(i=0;i<6;i++)
set_data(table2[i]);
delay(5);
/*在芯片中写入字符LXJ,再从芯片读取出来,同时显示在液晶上*/
for(i=0;*(write_data+i)!=‘\0‘;i++)
{
set_lcd(0x80+6+i+1);
set_data(*(write_data+i));
write_at_addr(i+1*(write_data+i));
set_lcd(0x80+0x40+6+i+1);
set_data( read_at_addr(i+1) );
}
//下面的形式,要在后面加延时
/*set_lcd(0x80+7);
set_data(‘H‘);
set_data(‘e‘);
set_data(‘l‘);
set_data(‘l‘);
set_data(‘o‘);
write_at_addr(1‘H‘); delay(5);
write_at_addr(2‘e‘); delay(5);
write_at_addr(3‘l‘); delay(5);
write_at_addr(4‘l‘); delay(5);
write_at_addr(5‘o‘); delay(5);
set_lcd(0x80+0x40+7);
set_data( read_at_addr(1) );
set_data( read_at_addr(2) );
set_data( read_at_addr(3) );
set_data( read_at_addr(4) );
set_data( read_at_addr(5) ); */
while(1);
}
void init()
{
//设置液晶
set_lcd(0x38);//设置16*12显示,5*7点阵,8位数据接口
set_lcd(0x0c);//设置开显示,不显示光标
set_lcd(0x06);//写一个字符后地址指针加1
set_lcd(0x01);//显示清0,数据指针清0
set_lcd(0x0f);//显示光标,并让光标闪烁
//设置I2C芯片
sda = 1;
delay_us();
scl = 1;
delay_us();
}
/*********************************液晶部分***********************************/
//延时
void delay(uchar t)
{
uchar ij;
for(i=0;i for(j=0;j<110;j++)
;
}
//设置液晶屏参数
void set_lcd(uchar val)
{
port_rs = 0;//设置成命令
delay(1);
port_rw = 0;
delay(1);
port_en = 1;
delay(1);
P2 = val;//设置命令
delay(5);
port_en = 0;
}
//设置液晶屏数据
void set_data(uchar dat)
{
port_rs = 1;//设置成数据
delay(1);
port_rw = 0;
delay(1);
port_en = 1;
delay(1);
P2 = dat;//设置数据
delay(5);
port_en = 0;
}
/*****************************************存储芯片部分********************************/
//延时4-5微秒
void delay_us()
{
;;;
}
//开始
void start()
{
sda = 1;
delay_us();
scl = 1;
delay_us();
sda = 0;
delay_us();
}
//结束
void stop()
{
sda = 0;
delay_us();
scl = 1;
delay_us();
sda = 1;
delay_us();
}
//等待应答
void respons()
{
uchar i;
scl = 1;
delay_us();
while((sda==1) && (i<250))
i++;
scl = 0;
delay_us();
}
//写数据
void write_byte(uchar dat)
{
uchar itemp;
temp = dat;
for(i=0;i<8;i++)
{
temp = temp << 1;
scl = 0;
delay_us();
sda = CY;
delay_us();
scl = 1;
delay_us();
}
scl = 0;
delay_us();
sda = 1;
delay_us();
}
//读数据
u
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-05-16 16:40 I2C总线\
文件 9492 2010-05-17 21:29 I2C总线\i2c
文件 4149 2010-05-17 21:29 I2C总线\i2c.c
文件 82563 2010-05-17 00:15 I2C总线\i2c.DSN
文件 1408 2010-05-17 21:29 I2C总线\i2c.hex
文件 38 2010-05-17 21:29 I2C总线\i2c.lnp
文件 10008 2010-05-17 21:29 I2C总线\i2c.LST
文件 13409 2010-05-17 21:29 I2C总线\i2c.M51
文件 11094 2010-05-17 21:29 I2C总线\i2c.OBJ
文件 329 2010-05-17 21:29 I2C总线\i2c.plg
文件 1288 2010-05-17 21:29 I2C总线\i2c.PWI
文件 55205 2010-05-17 21:29 I2C总线\i2c.uvopt
文件 13223 2010-05-17 00:15 I2C总线\i2c.uvproj
- 上一篇:协方差与相关系数--ppt
- 下一篇:智能视频监控与红外热成像技术的应用
相关资源
- I2C读写AT24C02 基于STM32F103 cube116540
- 51单片机PWM程序,占空比、周期可调整
- proteus仿真 AT89C51输出各种波形
- 00
- 用DIO 做的I2C程式
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- proteus_24C08—有注释(proteus里面使用的
- DS18B20分布式多点测温的Proteus仿真
- I2C总线接口设计
- 基于proteus的单片机仿真--交通灯控制
- 带时间温度显示的室内灯光控制系统
- 8051F040SMBUS多机通信
- 51多机通信(内附Proteus及.hex文件)
- IIC proteus仿真实验
- 8086交通灯 Proteus原理图及程序
- 单片机仿真软件proteus6.7免安装绿色版
- 关于proteus仿真arm7出现错误的问题
- 基于PROTEUS的ARM7显示系统设计与仿真实
- STM32+1602液晶proteus仿真.zip
- AT89C51+ADC0808 PROTEUS仿真
- 单片机驱动4相步进电机proteus仿真
- DHT10_I2C驱动.zip
- I2C串行EEPROM应用系统的健壮性设计
- 电子-GravityI2C3.7V锂电池电量计stm32L1
- proteus元件库对照表 (整理清晰)
- 微机原理 十字路口交通灯控制 prot
- 中央空调室内智能温控器设计论文、
- 基于51单片机的交通灯设计
- 基于AT89C51的十字路口交通灯设计pro
评论
共有 条评论