锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

ATMEGA16—AT24C1024存储

时间:2024-04-30 17:37:10

总算是把这些问题统统解决了~~

现在贴出来~~

一个哥帮了忙~~

~~

不过以前的错误还是有好几点的~~

AT24C1024存储:

老规矩~~

显示上图~~





然后是程序:(里面有重点要关注的~~)

IAR7_1.c

//------------------------------------------------------------------------------
//IAR7_1.c
//向AT24C1024指定地址写入一个数据,然后从中读出来~~
#include"ioavr.h"
#include"lcdinit.h"
#include"at24c1024.h"
#include"delayics.h"
//------------------------------------------------------------------------------
uchar __flash title0[]="Write:";
uchar __flash title1[]="Read:";
uchar __flash test[]="_Justin";
//uchar __flash display[7]={0,0,0,0,0,0,0};
//------------------------------------------------------------------------------
//端口初始化函数
void port_init()
{
A=0XFF;
PORTA=0XFF;
DDRB=0XFF;
PORTB=0XFF;

DDRC=0XFF;
PORTC=0X00;
DDRD=0X00;
PORTD=0XFF;
}
//------------------------------------------------------------------------------
//main
void main()
{
uchar display[7];
port_init();
twi_init();
lcd_init();
lcd_display_string(0,0,title0,6);
lcd_display_string(1,0,title1,5);


mcu_send_string(0xa0,0x00,0x00,test,7);
delay_s(1);
mcu_receive_string(0xa0,0x00,0x00,display,7);

lcd_display_string(0,9,test,7);
lcd_display_char(1,9,display[0]);
lcd_display_char(1,10,display[1]);
lcd_display_char(1,11,display[2]);
lcd_display_char(1,12,display[3]);
lcd_display_char(1,13,display[4]);
lcd_display_char(1,14,display[5]);
lcd_display_char(1,15,display[6]);
while(1);
}

Init.c

//------------------------------------------------------------------------------
//LCD1602的初始化程序—可调用函数—Atmega 16
#include"ioavr.h"
#include"intrinsics.h"
#include"delayics.h"
#include"bitics.h"
#include"lcdinit.h"
//------------------------------------------------------------------------------
//RS、RW、EN引脚输出高低电平的宏定义
#define lcd_rs_1 SET_BIT(PORTB,0) //数据命令选择端
#define lcd_rs_0 CLR_BIT(PORTB,0)
#define lcd_rw_1 SET_BIT(PORTB,1) //读写命令选择端
#define lcd_rw_0 CLR_BIT(PORTB,1)
#define lcd_en_1 SET_BIT(PORTB,2) //使能信号
#define lcd_en_0 CLR_BIT(PORTB,2)
//------------------------------------------------------------------------------
#define data_port PORTA
#define busy 0x80
//------------------------------------------------------------------------------
//检测LCD忙函数
void lcd_check_busy()
{
uchar temp;
data_port=0xff;
lcd_rs_0;
lcd_rw_1; //读指令
delay_ms(1);
lcd_en_1;
delay_ms(1);
DDRA=0X00; //设置端口A为输入
temp=PINA; //取端口A的值
while(temp&busy) //当D7为0时可以结束whlie循环,继续执行下面的操作
temp=PINA;
lcd_en_0;
DDRA=0xff;
}
//------------------------------------------------------------------------------
//LCD写数据函数
void lcd_write_data(uchar dat)
{
lcd_check_busy();
lcd_rs_1;
lcd_rw_0;
data_port=dat;
delay_ms(1);
lcd_en_1; //LCD的使能端高电平有效,当E端由高电平跳变成低电平时,液晶模块执行命令
delay_ms(1); //送个延时
lcd_en_0;
}
//------------------------------------------------------------------------------
//LCD写指令函数
//其中flag的作用是为0不进行忙检测,为非0则进行忙检测
void lcd_write_command(uchar com,uchar flag)
{
if(flag)
lcd_check_busy();
lcd_rs_0;
lcd_rw_0;
data_port=com;
delay_ms(1);
lcd_en_1; //E端由高电平跳变成低电平时,液晶模块执行命令
delay_ms(1);<

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章