11.8-11.12学习总结

单片机之电子表(闪烁、加加减减)

#include<REG52.H>
unsigned char SEG[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

char i,cp,num,key1_s,key2_s,key3_s,sec=50,min=59,hour=23,mode,flash;
unsigned cp1;
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2;
void delay(unsigned int x){
	while(x--);
}

void key(void){
	if(key1==0){
		delay(500);
		if(key1==0){
			key1=1;
			key1_s=1;
			}
		}
	if(key1==1&&key1_s==1){
		 key1_s=0;
		 mode++;
		 //这时候估计要开始闪烁
		}

	if(key2==0){		//按第二下,加秒
		delay(500);
		if(key2==0){
			key2_s=1;
			key2=1;
			}
			
		}
	if(key2==1&&key2_s==1){
		key2_s=0;
		//加
		if(mode==1){
			sec++;
			if(sec>59) sec=0;
		}
		if(mode==2){
			min++;
			if(min>59) min=0;
		}
		if(mode==3){
			hour++;
			if(hour>23) hour=0;
		}
		//减
	}	
	if(key3==0){		//按第二下,
		delay(500);
		if(key3==0){
			key3_s=1;
			key3=1;
			}
			
		}
	if(key3==1&&key3_s==1){
		key3_s=0;
		//减
		if(mode==1){
			sec--;
			if(sec<=0) sec=59;
		}
		if(mode==2){
			min--;
			if(min<=0) min=59;
		}
		if(mode==3){
			hour--;
			if(hour<=0) hour=23;
		}
	
	}

	if(mode>=4) mode=0;
}
void display(void){
	P0 = 0xFF;
	if(mode==0){
		switch(i){
		case 0:P0 = SEG[sec%10]&0x7F;P2 = 0xFE; break;
		case 1:P0 = SEG[sec/10];P2 = 0xFD; break;
		case 2:P0 = SEG[min%10]&0x7F;P2 = 0xFB; break;
		case 3:P0 = SEG[min/10];P2 = 0xF7; break;
		case 4:P0 = SEG[hour%10]&0x7F;P2 = 0xEF; break;
		case 5:P0 = SEG[hour/10];P2 = 0xDF; break;
	   }
	}

	if(mode==1){
		switch(i){
		case 0:P0 = SEG[sec%10]|flash;P2 = 0xFE; break;
		case 1:P0 = SEG[sec/10]|flash;P2 = 0xFD; break;
		case 2:P0 = SEG[min%10]&(0x7F|flash);P2 = 0xFB; break;
		case 3:P0 = SEG[min/10];P2 = 0xF7; break;
		case 4:P0 = SEG[hour%10]&(0x7F|flash);P2 = 0xEF; break;
		case 5:P0 = SEG[hour/10];P2 = 0xDF; break;
	   }
	}
	 if(mode==2){
		switch(i){
		case 0:P0 = SEG[sec%10]&(0x7F|flash);P2 = 0xFE; break;
		case 1:P0 = SEG[sec/10];P2 = 0xFD; break;
		case 2:P0 = SEG[min%10]|flash;P2 = 0xFB; break;
		case 3:P0 = SEG[min/10]|flash;P2 = 0xF7; break;
		case 4:P0 = SEG[hour%10]&(0x7F|flash);P2 = 0xEF; break;
		case 5:P0 = SEG[hour/10];P2 = 0xDF; break;
	   }
	 }

		if(mode==3){
		switch(i){
		case 0:P0 = SEG[sec%10]&(0x7F|flash);P2 = 0xFE; break;
		case 1:P0 = SEG[sec/10];P2 = 0xFD; break;
		case 2:P0 = SEG[min%10]&(0x7F|flash);P2 = 0xFB; break;
		case 3:P0 = SEG[min/10];P2 = 0xF7; break;
		case 4:P0 = SEG[hour%10]|flash;P2 = 0xEF; break;
		case 5:P0 = SEG[hour/10]|flash;P2 = 0xDF; break;
	   }
	 }
	   	if(mode==4){
		switch(i){
		case 0:P0 = SEG[sec%10]&0x7F;P2 = 0xFE; break;
		case 1:P0 = SEG[sec/10];P2 = 0xFD; break;
		case 2:P0 = SEG[min%10]&0x7F;P2 = 0xFB; break;
		case 3:P0 = SEG[min/10];P2 = 0xF7; break;
		case 4:P0 = SEG[hour%10]&0x7F;P2 = 0xEF; break;
		case 5:P0 = SEG[hour/10];P2 = 0xDF; break;
	   }
	 }
	   
		i++;
		if(i>=6) i=0;
	}

void main(void){
	EA=1;
	ET0=1;
	TMOD=0x01;
	TL0 = (65536-10000)%256;
	TH0 = (65536-10000)/256;
	TR0=1;
	while(1){
	key();
	display();

	}		
}

void t0(void) interrupt 1{
	TL0 = (65536-10000)%256;
	TH0 = (65536-10000)/256;
	cp++;
	cp1++;
	if(cp1>=50)
	{
	   cp1=0;
	   flash = ~flash;
	}
	if(cp>=100){
		cp=0;
		
		sec++;				  
		if(sec>59){
			sec=0;
			min++;
			if(min>59){
				min=0;
				hour++;
				if(hour>23){
					hour=0;
				}
			}
		}
	}
}		
	

上了那么多课,0-9的16进制要能熟练打出来,不能考试的时候还看手机

还不完善,缺少定时,并且调整的时候表并不走,需要在interrupt函数里再加一个对mode的判断,也要加变量

定时功能:可以定时与分,秒不定,hour_d与min_d,到时间亮灯或响铃

以上是需要完善的

总结最近:

1.不能关了灯再玩手机了,对眼睛伤害太大了!

2.以前写的CSDN里好多没有解决的问题,计划11.20之前解决

3.下周要考核,妈呀还没开始复习,擦,快忘光了,11.13-11.16复习类接口那一块

4.每天一道算法题,11.19号要更新五道题,在这立个flag,和xl还有yx组队比赛不能拖后腿

5.十月底做的那套四级卷子还没有认真订错,每天认真订错一个题型并展开复习,并且背单词

6.校园跑校园跑校园跑!

7.部门工作加到手机便签里

8.复习计组与数据库,计网上课的时候看看前面的

   结合课表计划

9.省点钱吧

10.前端的课一直没看啊啊啊啊

11.通知培训赶快开了

12.天天开心

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值