完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
参照手册写的,两个按键,两个灯,LED3是测试的,按键1灯1亮,然后存储到EEPROM,重新上电后读取EEPROM,然后显示关机前状态,但是现在情况是不显示,重新上电后灯是全灭的。
程序如下: #include #include #define uchar unsigned char #define uint unsigned int ***it LED1 = P2^0; ***it LED2 = P2^1; ***it LED3=P2^2; ***it K1 = P3^2; //按钮1 ***it K2 = P3^3; //按钮2 void cc(uint addr); void xcx(uint addr,uchar dat); uchar dcx(uint addr); void Q0(); uchar V; void delay(uint time) { uint i,j; for(i=0;i for(j=0;j<121;j++); } void main(void)//主函数 { V = dcx(0x0000); //开机时读取EEPROM区0000数据,还原关电前LED的亮灭状态 if(V == 0x01) { LED1=0;LED2=1; if (V == 0x02) { LED1=1;LED2=0; } } while(1) { if(K1==0) { delay(20); if(K1==0) { LED1=0; LED2=1; cc(0x0000); //擦除扇区 xcx(0x0000,0x01); //对EEPROM区0000写入0x01 } } else if(K2==0) { delay(20); if(K2==0) { LED1=1; LED2=0; cc(0x0000); //擦除扇区 xcx(0x0000,0x02); //对EEPROM区0000写入0x10 } } } } void cc(uint addr)//擦除扇区 入口:addr=某一扇区首地址 { IAP_CONTR = 0x83; // 打开IAP功能(IAPEN(IAP_CONTR.7)=1:允许编程改变Flash,设置Flash操作等待时间 IAP_CMD = 0x11; //用户可以对"Data Flash/EEPROM?"进行扇区擦除 IAP_ADDRL = addr; // IAP/IAP操作时的地址寄存器2赴宋? IAP_ADDRH = addr>>8; // IAP/IAP操作时的地址寄存器高八位 IAP_TRIG = 0x5A; //在IAPEN(IAP_CONTR.7)=1时,对IAP_TRIG先写入5a IAP_TRIG = 0xA5; //再写入a5,IAP/IAP命令才会生效 _nop_(); _nop_(); _nop_(); Q0(); //关闭IAP/IAP } void xcx(uint addr,uchar dat)//写1字节 入口:addr=扇区单元地址,dat=待写入数据 { IAP_CONTR = 0x83; IAP_CMD =0x10; // 用户可以对"Data Flash/EEPROM区"进行字节编程 IAP_ADDRL = addr; IAP_ADDRH = addr>>8; IAP_DATA = dat; //数据进IAP_DATA IAP_TRIG = 0x5A; IAP_TRIG = 0xA5; _nop_(); _nop_(); _nop_(); Q0(); // 关闭IAP/IAP } uchar dcx(uint addr)//读1字节 入口:addr=扇区单元地址 出口:dat=读出的数据 { uchar dat; IAP_CONTR = 0x83; IAP_CMD = 0x01; //用户可以对“Data Flash/EEPROM区”进行字节读取 IAP_ADDRL = addr; IAP_ADDRH = addr>>8; IAP_TRIG = 0x5A; IAP_TRIG = 0xA5; _nop_(); _nop_(); _nop_(); dat = IAP_DATA; // 读出数据 Q0(); // 关闭IAP/IAP return dat; } void Q0()//关闭IAP/IAP { IAP_CONTR = 0; // 关闭IAP IAP_CMD = 0; // 待机模式,无IAP操作 IAP_TRIG = 0; // 关闭IAP功能,清除与IAP有关的特殊功能寄存器 IAP_ADDRH=0X80; IAP_ADDRL=0; } |
|
相关推荐
4个回答
|
|
帮忙顶一下,坐等大神解答
|
|
|
|
按键程序不当
if(K1==0) { delay(20); if(K1==0) { LED1=0; LED2=1; cc(0x0000); //擦除扇区 xcx(0x0000,0x01); //对EEPROM区0000写入0x01 while(!K1);//等待松手 } } else if(K2==0) { delay(20); if(K2==0) { LED1=1; LED2=0; cc(0x0000); //擦除扇区 xcx(0x0000,0x02); //对EEPROM区0000写入0x02 while(!K2);//等待松手 } } |
|
1 条评论
|
|
给你改好了。
评分 |
|
1 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
828 浏览 0 评论
824 浏览 0 评论
861 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
836 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1292 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11821 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 08:12 , Processed in 0.704244 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号