#include #include "intrins.h" //延时 sfr AUXR = 0x8e; sfr P5 = 0xc8; //p5定义 是加的 sfr P5M0 = 0xc9; sfr P5M1 = 0XCA; sfr P3M0 = 0xb2; //p3口设置强推完的定义 sfr P3M1 = 0Xb1; sfr P1M0 = 0x92; //p0口设置强推完的定义 这样设置数码管就亮 sfr P1M1 = 0X91; /***********************掉电存储开始********************/ typedef unsigned char BYTE; typedef unsigned int WORD; //类型定义 unsigned char x = 0; sfr IAP_DATA = 0xC2; //IAP数据寄存器 sfr IAP_ADDRH = 0xC3; //IAP地址寄存器高字节 sfr IAP_ADDRL = 0xC4; //IAP地址寄存器低字节 sfr IAP_CMD = 0xC5; //IAP命令寄存器 sfr IAP_TRIG = 0xC6; //IAP命令触发寄存器 sfr IAP_CONTR = 0xC7; //IAP控制寄存器 #define CMD_IDLE 0 //空闲模式 #define CMD_READ 1 //IAP字节读命令 #define CMD_PROGRAM 2 //IAP字节编程命令 #define CMD_ERASE 3 //IAP扇区擦除命令 #define ENABLE_IAP 0x82 //if SYSCLK<20MHz #define IAP_ADDRESS 0x0400 //测试地址 //void Delay(BYTE n); void IapIdle(); BYTE IapReadByte(WORD addr); void IapProgramByte(WORD addr, BYTE dat); void IapEraseSector(WORD addr); /***********************掉电存储结束****************/ /*****************************数码管开始***********************************/ unsigned int i = 0;//用于扫描数码管 unsigned char bainum1 = 0;//百 unsigned char shinum1 = 0;//十 unsigned char genum1 = 0;//个 sbit pa = P1^0;sbit pb = P3^2;sbit pc = P3^7;sbit pd = P1^3;//数码管段 sbit pe = P1^2;sbit pf = P1^4;sbit pg = P3^3;//数码管段 sbit p1 = P1^1;sbit p2 = P3^6;sbit p3 = P5^5;//数码管位 void s0();void s1();void s2();void s3();void s4();void s5();//数码管部分 void s6();void s7();void s8();void s9();void s10();//数码管部分 void xuaze(unsigned char j);//数码管段显示 void displaynum(unsigned int);//显示函数 //unsigned char code duan [] ={0,1,2,3,4,5,6,7,8,9}; unsigned int bainum11=0,shinum11=0,genum11=0;//用于传到数码管上显示 /*****************************数码管结束***********************************/ unsigned int inum1=0,inum2=0;//触发端子用的计数 unsigned char inum11=0,inum12=0,inum21=0,inum22=0,ss=0;//掉电存储要用到 static unsigned char presstime=0;//时间值按键用到的 unsigned int kf0=1;//按键用的标志位 unsigned int kt0=0;//按键用的标志位 unsigned int if0=1,if0s=1,it0=0; unsigned int mm=0,ff=0,sss=0;//计数用 bit flag_eeprom1=1;//掉电存储的标志位 unsigned int keynum=0;//数码管的位 sbit key2=P3^0;//按键 sbit key1=P3^1;//按键 sbit out= P5^4;//输出 void timer0_1init();//定时器声明 void keycan();//按键 void keyflag();//按键结束调用 void saveeepro();//掉电存储 extern void displaynums();//将数字传到数码管上显示 void main() { timer0_1init(); P3M0 = 0xcc; P3M1 = 0X00; //p3口设置强推挽 P1M0 = 0x1f; P1M1 = 0X00; inum11 = IapReadByte(1);//读取掉电存储里的值 inum12 = IapReadByte(2); inum21 = IapReadByte(3); inum22 = IapReadByte(4); if0 = IapReadByte(5); if0s = IapReadByte(6); ss = IapReadByte(7); inum1=inum11*100+inum12;//组合掉电存储中的值 inum2=inum21*100+inum22; bainum11=inum1/100;//传到数码管显示 shinum11=inum1/10%10; genum11=inum1%10; while(1){ keycan();//按键 } } void keycan(){//按键 if(keynum==0){//当按键值等于0的时候调用显示 displaynums();//数码管的显示 if(if0s==0){//当if0s等于0时,继电器输出 out=0; } if((flag_eeprom1==1)){//加掉电存储 saveeepro();//掉电存储 flag_eeprom1=0; } } if(key1==0){//当按键1按下 if(kf0){//当标志位kf0=1的时候进行 if(presstime>50){//当时间值大于一百的时候 kf0=0;//标志位kf0=0 kt0=1;//标志位kt0=0 flag_eeprom1=1;if0s=1;out=1;if0=1; presstime=0;//时间清零,重新进行 keynum++;//数码管的位 if(keynum==4){//当位到4则置位0 keynum=0; if0=0; } if(out==0){ if0=0; } } } }else{//当按键松开 keyflag(); if((flag_eeprom1==1)){ //加掉电存储,必需加到这,不然有一些小问题 flag_eeprom1=0; saveeepro();//掉电存储 } }//按键1结束 if(key2==0){if(kf0){if(presstime>50){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;//掉电存储的标志位改为1,进行存值操作 // if(out==0){ // if0=0;if0s=1;out=1; // } switch(keynum){ case 1: bainum11++;//数码管一加加 if(bainum11>9){//当数码管一加加到9时置为1 bainum11=0; } break; case 2:shinum11++;if(shinum11>9){shinum11=0;}break; case 3:genum11++;if(genum11>9){genum11=0;}break;
设计资源 培训 开发板 精华推荐
- LIS2DH适配器板,标准DIL24插座
- miku立牌,初音未来立牌
- LTC4367CDD-1 过压电源保护控制器选择两个电源之一的典型应用
- AD8615AUJZ-REEL7高速光电二极管前置放大器典型应用电路
- SC8701_升降压带CV/CC模式
- 使用 BFP640 SiGe 晶体管的 3V、+14 dBm、2.33 GHz SDARS 有源天线第二级低噪声放大器
- RY-1205S 5V、200mA输出DC/DC转换器典型应用电路
- 3D打印屏幕模块
- LT8705AIFE 用于超级电容器备用电源的降压-升压型 DC/DC 控制器的典型应用
- LT1170IT、-10 至 -26/5A LCD 对比度电源的典型应用