完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序贴上,用595驱动数码管,数组显示按键按一下加一,要求加到几,断电之后继续显示几,求助烧友们帮忙看看程序,谢谢了
/* ************************************************************************************ Fuction:STC89C52单片机内部4K的EEPROM操作驱动 Software Designer:Jason ************************************************************************************ */ #include #include #define uchar unsigned char #define uint unsigned int /******************定义命令字节******************/ #define Read_COM 0x01 //字节读数据命令 #define Prog_COM 0x02 //字节编程数据命令 #define Erase_COM 0x03 //扇区擦除数据命令 #define En_Wait_TIME 0x81 //设置等待时间 ,并使能ISP/IAP #define Start_ADDRH 0x20 //扇区地址高位 #define Start_ADDRL 0x00 //扇区地址低位 /****************特殊功能寄存器声明****************/ sfr ISP_DATA = 0xe2; sfr ISP_ADDRH = 0xe3; sfr ISP_ADDRL = 0xe4; sfr ISP_CMD = 0xe5; sfr ISP_TRIG = 0xe6; sfr ISP_CONTR = 0xe7; /*****************关闭ISP&IAP功能*****************/ ***it SD=P3^5; ***it SCK=P3^7; ***it RCK=P3^6; ***it ADD=P1^7; uchar i,u,n; uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void WR1_595(uchar num1) { uchar date; uchar b; date=num1; for(b=0;b<=7;b++) { if((date&0x80)==0x80) //最高位为1,则向SDATA_595发送1 SD=1; //发出数据的最高位 else SD=0; date<<=1; //左移位 SCK=0; _nop_(); _nop_(); SCK=1; //产生上升沿 } } void ISP_IAP_disable(void) { ISP_CONTR = 0x00; ISP_CMD = 0x00; ISP_TRIG = 0x00; } /*********************字节读**********************/ uchar Byte_read(uint byte_addr) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间 ISP_CMD = Read_COM; //送字节读命令字 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字节 ISP_TRIG = 0x46; //送触发命令字0x46 ISP_TRIG = 0xB9; //送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; //开中断 return (ISP_DATA); } /*********************字节编程*********************/ void Byte_program(uint byte_addr,uchar isp_iap_data) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间 ISP_CMD = Prog_COM; //送字节编程命令字 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字节 ISP_DATA = isp_iap_data; //送数据进ISP_DATA ISP_TRIG = 0x46; //送触发命令字0x46 ISP_TRIG = 0xB9; //送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; //开中断 } /*********************扇区擦除*********************/ void Sector_erase(uint sector_addr) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP;并送等待时间 ISP_CMD = Erase_COM; //送扇区擦除命令字 ISP_ADDRH = (uchar)(sector_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(sector_addr & 0X00FF); //送地址低字节 ISP_TRIG = 0X46; //送触发命令字0x46 ISP_TRIG = 0XB9; //送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; } void main() { TMOD = 0x01; TH0 = 0x4C; TL0 = 0x00; EA = 1; ET0 = 1; TR0 = 1; u=Byte_read(0x2000); while(1) { RCK=0; WR1_595(u); RCK=1; _nop_(); _nop_(); _nop_(); _nop_(); Sector_erase(0x2000); //扇区擦除 Byte_program(0x2000,tab[n]); } } void tim0() interrupt 1 //中断函数 { TH0 = 0x4C; TL0 = 0x00; // t++; //if(t==20) //{ // t=0; if(ADD==1) { n++; if(n==11) n=0; } } |
|
相关推荐
2个回答
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
串口发送中断中对发送I/O口定义为GPIO输出,出现发送数据不完整,缺少2个字节,求解答
1589 浏览 3 评论
777 浏览 0 评论
【xG24 Matter开发套件试用体验】10-Bluetooth示例1
908 浏览 0 评论
996 浏览 0 评论
【xG24 Matter开发套件试用体验】power specification电源规格参数配置
810 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10866 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-27 06:14 , Processed in 0.620949 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191