完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
应该是主程序出问题,但本人找不出来了,本意是
往EEPROM中写入两位数,在数码管显示,然后擦除, 再写入一个加了1的数,循环往返,关闭开关,再打开, 能再继续显示之前的数 ,继续累加 ,实验结果是数码管显示“01”一会儿在闪烁, 关闭开关,再打开依旧如此 #include"STC12C5A.h" #include"intrins.h" /*数码管动态显示程序,这部分经常使用,问题应该是不会出现在这里*/ int smg[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//数码表 //74HC595的位定义 ***it HC595_REG=P0^6; ***it HC595_RCK=P0^5; ***it HC595_SCK=P0^4; ***it HC595_SEG=P0^7; //延时函数 void delay_ms(unsigned int time) { unsigned int t; for(;time>0;time--) { t = 1500; while(t--); } } //向HC595发送一个字节 void HC595_send_byte(int byte) { int i,temp; for(i=0;i<8;i++) { temp=byte&(1< if(temp) { HC595_SEG=1; } else { HC595_SEG=0; } HC595_SCK=1; HC595_SCK=0; } HC595_RCK=0; HC595_RCK=1; } //数码管静态显示 void HC595_show_num(int num) { HC595_send_byte(smg[num]); } //数码管后两位动态显示 void SMG_display(int dat) { P0=0x00; HC595_show_num(dat/1000); delay_ms(2); P0=0x00; HC595_show_num(dat%1000/100); delay_ms(2); P0=0x04; HC595_show_num(dat%100/10); delay_ms(2); P0=0x08; HC595_show_num(dat%10); delay_ms(2); } /*内部EEPROM的读,写,擦除,经调试问题应该不是在这里*/ //关闭ISP IAP EEPROM 使MCU处在安全的状态 void IAP_Over() { IAP_CONTR=0;//关闭控制寄存器 IAP_CMD=0;//命令寄存器无操作 IAP_TRIG=0;//关闭命令触发器 IAP_ADDRH=0x80;// 清空地址寄存器 IAP_ADDRL=0 ; } //从ISP IAP EEROM的一个地址中读取一个字节 char IAP_rend_addr(int addr) { char dat; IAP_CONTR=0x80;//使能命令寄存器,设置CPU等待时间 IAP_CMD=1;//命令寄存器读操作 IAP_ADDRH=addr>>8; IAP_ADDRL=addr; IAP_TRIG=0x5a;//开启命令寄存器 IAP_TRIG=0xa5; _nop_();//MCU将等待ISP IAP EEROM操作成功 dat=IAP_DATA;//读取ISP IAP EEROM数据 IAP_Over();///关闭ISP IAP EEROM return dat; } //从ISP IAP EEROM的一个地址中写入一个字节 void IAP_write_addr(int addr ,char dat) { IAP_CONTR=0x80;//使能命令寄存器,设置CPU等待时间 IAP_CMD=2;//命令寄存器写操作 IAP_ADDRH=addr>>8; IAP_ADDRL=addr; IAP_DATA=dat;//读取ISP IAP EEROM数据 IAP_TRIG=0x5a;//开启命令寄存器 IAP_TRIG=0xa5; _nop_ ();//MCU将等待ISP IAP EEROM操作成功 IAP_Over();///关闭ISP IAP EEROM } //从ISP IAP EEROM的插除一个地址 void IAP_clean_addr(int addr) { IAP_CONTR=0x80;//使能命令寄存器,设置CPU等待时间 IAP_CMD=3;//命令寄存器插除操作 IAP_ADDRH=addr>>8; IAP_ADDRL=addr; IAP_TRIG=0x5a;//开启命令寄存器 IAP_TRIG=0xa5; _nop_();//MCU将等待ISP IAP EEROM操作成功 IAP_Over();///关闭ISP IAP EEROM } /* 应该是主程序出问题,但本人找不出来了,本意是 往EEPROM中写入两位数,在数码管显示,然后擦除, 再写入一个加了1的数,循环往返,关闭开关,再打开, 能再继续显示之前的数 ,继续累加 */ void main() { char num=0; int s=100; while(s--)//使数码管显示稳定 SMG_display((int)IAP_rend_addr(0x0000)); while(1) { IAP_clean_addr(0x0000); num++; IAP_write_addr(0x0000,num%100); while(s--) SMG_display((int)IAP_rend_addr(0x0000)); delay_ms(10); } } 这是下载串口的设置 “打开程序文件“与”打开EEPROM”都试过,现象不变 求好心人指错 |
|
相关推荐
3个回答
|
|
|
|
|
|
你看看问题是不是在这里,下面加了注释的。
void main() { char num=0; int s=100; while(s--)//使数码管显示稳定 SMG_display((int)IAP_rend_addr(0x0000)); while(1) { IAP_clean_addr(0x0000); num++; IAP_write_addr(0x0000,num%100); while(s--) //执行前面的while时,S已经等于0;因此不会再执行while里的语句,要加个语句:s=100; SMG_display((int)IAP_rend_addr(0x0000)); delay_ms(10); } } |
|
|
|
多谢啦……其实之后就发现是这个问题了。。。
|
|
|
|
只有小组成员才能发言,加入小组>>
2983 浏览 9 评论
2695 浏览 16 评论
3220 浏览 1 评论
8457 浏览 16 评论
3785 浏览 18 评论
6967浏览 6评论
求助,请问MS51FB9AE带隙电压能作为侦测的基准电压吗?
7461浏览 3评论
6962浏览 3评论
支持UART-to-BLE透传的新唐NuTool – BLE ATCMD开发工具推荐
5808浏览 3评论
9379浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-28 05:05 , Processed in 0.726266 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号