资讯详情

ATMEGA16—AT24C1024存储

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

现在贴出来~~

一个哥帮了忙~~

~~

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

老规矩~~

显示上图~~

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

//------------------------------------------------------------------------------ //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); }

//------------------------------------------------------------------------------ //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百科大全!

锐单商城 - 一站式电子元器件采购平台