⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 screen.c

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 C
字号:
#include <stdio.h>
#include <absacc.h>
#include <stdarg.h>
#include <./Atmel/at89x52.h>
#include "source.h"	
/*为屏幕的下部分显示时间、信息的区域显示函数*/
bit screen_hbs(void){
	static unsigned char inf_seq=0;
	unsigned char local_msg;
	local_msg=read_hbs_msg();//读其消息队列
	if(local_msg){//如果返回值为非0,则消息不为空
		switch(local_msg){
			case MSG_HBS_INFO_CLEAR:
				switch(screen.hbs_fsm){
					case FSM_HBS_CLEAR:
						break;
					default:
						clr_notice();
						change_hbs_fsm(FSM_HBS_CLEAR);
						break;
				}
				break;
			case MSG_HBS_INFO_SHOW:
				switch(screen.hbs_fsm){
					case FSM_HBS_INFO:
						break;
					default:					
						clr_notice();	//清除以前的信息
						inf_seq=0;
						show_elvinfo(show_notice.ognd+inf_seq);	//显示第一条信息
						change_hbs_fsm(FSM_HBS_INFO);//把状态转换为显示信息状态
						break;
			   	}
				break;
			case MSG_HBS_INFO_CHANGE:
				switch(screen.hbs_fsm){
					case FSM_HBS_INFO://循环显示从1到9的信息
						clr_notice();//清除以前的信息
						inf_seq++;
						inf_seq %=10;
						show_elvinfo(show_notice.ognd+inf_seq);//显示下一条信息
						break;
				}
				break;
			case MSG_HBS_UPD_TIME://更新时间
				break;
			case MSG_HBS_UPD_TEMPE://更新温度
				show_wd(others.temperature);
				break;
			default:
				break;
		}
		return 1;
	}
	else{
		return 0;
	}
}
/*为屏幕显示箭头的区域*/
bit screen_status(void){
	static 	unsigned char move_step=(STATAREA_HEIGHT-ARROW_HEIGHT)/3-1;
	unsigned char this_msg;
	this_msg=read_status_msg();//读其消息队列
	if(this_msg){
		switch(this_msg){
			case MSG_STATUS_UP://为显示箭头向上的消息
				switch(screen.status_fsm){
					case FSM_STATUS_UP:
						break;
					default:
						clr_area(STATAREA_LEFT,STATAREA_TOP,STATAREA_WIDTH,STATAREA_HEIGHT);
						draw_uparrow(POS_ARROW_ORGX,STATAREA_TOP+STATAREA_HEIGHT-ARROW_HEIGHT);
						scentry.arrow_cur_top=STATAREA_TOP+STATAREA_HEIGHT-ARROW_HEIGHT;
						change_status_fsm(FSM_STATUS_UP);
						break;
				}
				break;
			case MSG_STATUS_DOWN://为显示箭头向下的消息
				switch(screen.status_fsm){
					case FSM_STATUS_DOWN:
						break;
					default:
						clr_area(STATAREA_LEFT,STATAREA_TOP,STATAREA_WIDTH,STATAREA_HEIGHT);
						draw_downarrow(POS_ARROW_ORGX,STATAREA_TOP);
						scentry.arrow_cur_top=STATAREA_TOP;
						change_status_fsm(MSG_STATUS_DOWN);
						break;
				
				}
				break;
			case MSG_STATUS_CLEAR://为清除箭头的消息
				switch(screen.status_fsm){
					case FSM_STATUS_CLR:
						break;
					default:
						/*清除显示箭头的区域*/
						clr_area(STATAREA_LEFT,STATAREA_TOP,STATAREA_WIDTH,STATAREA_HEIGHT);
						change_status_fsm(FSM_STATUS_CLR);
						break;
				
				}
				break;
			case MSG_STATUS_MOVE://箭头移动
				switch(screen.status_fsm){
					case FSM_STATUS_DOWN:
						if(scentry.arrow_cur_top+move_step+ARROW_HEIGHT>STATAREA_HEIGHT+STATAREA_TOP){
							//已经到达箭头显示区域的最低部,箭头停止
						}
						else{//向下移动箭头,在移动箭头时没有清除以前的箭头,可以看出其移动轨迹
							set_timer(MOVE_TIMER,MOVE_TIME_LENGTH);
							scentry.arrow_cur_top +=move_step;
							draw_downarrow(POS_ARROW_ORGX,scentry.arrow_cur_top);			
						}
						break;
					case FSM_STATUS_UP:
						if(scentry.arrow_cur_top<(move_step+STATAREA_TOP)){
							//已经到达箭头显示区域的最顶部,箭头停止
						}
						else{//向上移动箭头,在移动箭头时没有清除以前的箭头,可以看出其移动轨迹
							set_timer(MOVE_TIMER,MOVE_TIME_LENGTH);
							scentry.arrow_cur_top -=move_step;			
							draw_uparrow(POS_ARROW_ORGX,scentry.arrow_cur_top);			
						}		
						break;
			   	}
				break;
			default:
				break;
		}
		return 1;
	}
	else{
		return 0;
   	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -