STM32(十四)0.96OLED实现数字、汉字、字符串、图片及上下按键功能切换显示

完整工程下载

功能切换显示的实现:使用按键轮询响应,每按一次选择键,箭头向下,箭头指到可显示区域最下方时,继续按选择键,文字开始循环滚动(使用函数指针,将每一个显示写成函数,通过排序改变函数指针指向)。确认键进入该功能,确认键此时变为返回键。即:两个按键实现功能切换、确认、退出等。

void HeadLine1(u8 y)		//主标题显示
{
	OLED_ShowCHinese(10,y,0);	//双线循迹停泊
	OLED_ShowCHinese(28,y,1);	//
	OLED_ShowCHinese(46,y,2);	//
	OLED_ShowCHinese(64,y,3);	//
	OLED_ShowCHinese(82,y,4);	//
	OLED_ShowCHinese(100,y,5);	//
} 
void HeadLine2(u8 y)		//副标题显示
{
//	
//	OLED_ShowCHinese(54,y,10);	//停
//	OLED_ShowCHinese(72,y,11);	//泊
//	OLED_ShowCHinese(72,y,12);	//系
//	OLED_ShowCHinese(54,y,13);	//统
}

void Start1(u8 y)	//开始1	稳中求胜
{
	OLED_ShowCHinese(28,y,27);	//开
	OLED_ShowCHinese(46,y,28);	//始
	OLED_ShowCHinese(64,y,29);	
	OLED_ShowCHinese(82,y,30);	
}
void Start2(u8 y)	//开始2	破釜沉舟
{
	OLED_ShowCHinese(28,y,31);	//开
	OLED_ShowCHinese(46,y,32);	//始
	OLED_ShowCHinese(64,y,33);	
	OLED_ShowCHinese(82,y,34);	
}
void Debug(u8 y)	//调试
{
	OLED_ShowCHinese(46,y,23);	
	OLED_ShowCHinese(64,y,24);	
	
}
void SoftReset(u8 y)	//软件复位
{
	OLED_ShowCHinese(46,y,25);	
	OLED_ShowCHinese(64,y,26);	
}
void About(u8 y)	//关于
{
	OLED_ShowCHinese(46,y,10);	
	OLED_ShowCHinese(64,y,11);	
}
void Thank(u8 y)	//鸣谢
{
	OLED_ShowCHinese(46,y,12);	
	OLED_ShowCHinese(64,y,13);	
}
void HangClear(u8 y)	//清除第y行
{
	OLED_ShowString(0,y,"                ");
}
void OLED_Menu(void)
{
	pFunc[0](0);
	pFunc[1](3);
	pFunc[2](6);
}
void Menu_Init(void)
{
	pFunc[0] = HeadLine1;	//函数指针指向各功能,显示时通过交换函数指针实现功能显示
	pFunc[1] = Start1;
	pFunc[2] = Start2;
	pFunc[3] = Debug;
	pFunc[4] = About;
	pFunc[5] = Thank;
	pFunc[6] = SoftReset;
}
while(1)
{    
        curFunc = pFunc[count];	//获取选中功能
		key = KEY_Scan(0);
		switch(key)
		{
			case KEY0_PRES:		//选择键
				count++;
				i += 3;	//纵坐标下移
				if( count > 2 )	//限幅,可显示的行数最多为3
					count = 2;
				if( i==6 )	//清除第2行的-> 因为此刻->以指向第3行
					OLED_ShowString(0,3,"  ");
				if( i > 6  )
				{
					i = 6;
					/*  循环滚动选择  
					tmpFunc = pFunc[0];
					for( k = 0; k < FUNC_SUM-1; k++ )
						pFunc[k] = pFunc[k+1];
					pFunc[k] = tmpFunc;*/
					
					/*  不带标题栏(标题栏不动)的循环滚动选择  */
					tmpFunc = pFunc[1];
					for( k = 1; k < FUNC_SUM-1; k++ )
						pFunc[k] = pFunc[k+1];
					pFunc[k] = tmpFunc;
					/*  不带标题栏(标题栏不动)的循环滚动选择  */
					OLED_Clear();
					OLED_Menu();
				}
				OLED_ShowString(0,i,"->");  // sign
				break;
			case KEY1_PRES:		//确认键
				OLED_Clear();
				if(curFunc == Start1)	//开始
				{
					SetNum(0);		//数码管设置四位初始数字
					OLED_DrawBMP(0,1,127,8,BMP_CAR);	//显示小汽车图标
					while(1)
						SetNum(SEG_Final);
				}
				else if(curFunc == About)	//关于
				{	
					OLED_ShowCHinese(18,0,21);	//作者
					OLED_ShowCHinese(36,0,22);	//
					//显示作者姓名 图片等
					OLED_ShowCHinese(64,0,19);	//HC
					OLED_ShowCHinese(82,0,20);
					OLED_ShowCHinese(64,3,14);	//GYY
					OLED_ShowCHinese(82,3,15);
					OLED_ShowCHinese(100,3,16);
					OLED_ShowCHinese(64,6,17);	//WYX
					OLED_ShowCHinese(82,6,15);
					OLED_ShowCHinese(100,6,18);
					OLED_DrawBMP(0,2,60,7,BMP_LOGO);	//图片
				}
				else if(curFunc == Thank)	//鸣谢
				{	
					//显示组委会信息 LOGO
					OLED_DrawBMP(0,2,127,6,BMP_XUPT);
				}
				else if(curFunc == Start2)	//开始2
				{
					
				}
				else if(curFunc == Debug)	//调试
				{
					float a = 2;
					u8 str[] = "FFFF";
					while(1)
					{
						OLED_ShowString(50,3,str);
						key = KEY_Scan(0);
						if(key == KEY0_PRES)
						{
							a -= 0.2;
							sprintf(str,"%.2f",a);
						}
						else if(key == KEY1_PRES)
							break;
					}
				}
				else if(curFunc == SoftReset)	//软件复位
				{ 
					Sys_Soft_Reset();
				}
				while(  KEY_Scan(0) != KEY1_PRES )	//检测退出键
					;	//确认键按下进入功能后,确认键变成返回键
				OLED_Clear();
				OLED_Menu();
				break;
			default:
				break;
		}
		delay_diy(100);
}

 

 

  • 19
    点赞
  • 189
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值