资源简介
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
- 下一篇:智能视频监控与红外热成像技术的应用
相关资源
- PROTEUS仿真DS18B20程序+仿真
- proteus+8086 8255并行I/O扩展实验
- 基于STM32的 ADXL345三轴测量角度 软件
- 基于单片机万年历+温度+LCD12864 prote
- 一个用proteus仿真的数码管显示键盘按
- 51密码锁+proteus仿真
- PID控制直流电机调速含proteus仿真
- AVR ATMEGA16 SPI双机通信的PROTEUS仿真 双
- linux下使用IIC总线读写EEPROM
- proteus仿真 电机驱动电路
- 8253产生方波和中断Proteus8086
- 使用DAC0832的DA转换实验Proteus8086
- 8259的8LED显示按键中断
- 8255的8LED显示矩阵键盘Proteus8086
- 8251串行口通讯仿真Proteus8086
- arduino_LiquidCrystal_I2C库及proteus仿真LC
- 频率电压电流仿真检测_Proteus仿真单片
- proteus纯数字电路数字钟
- proteus中51单片机制作的计算器
- 走马灯,流水灯,KEIL,PROTEUS
- ADC0832 Proteus仿真及C51驱动源码
- 74HC165 并转串 例程,带proteus仿真
- 最完美的STM32读写I2C EEPROM驱动
- stm32 软件I2C 实验
- 51单片机PROTEUS超值仿真 附源程序
- 4511做的八路抢答器 proteus
- 可调时钟+闹钟——基于DS1302
- GPS卫星定位proteus仿真.rar
- 51单片机多机通信PROTEUS仿真
- Proteus 7.10的汉化文件
评论
共有 条评论