综合设计——基于STC15W4K32S4(第一部分)

单片机实验课程的最后一个综合设计实验,想做的花里胡哨,结果做出来还可以,嘻嘻嘻。为了一下子吸引眼球,创造一种高大上的视觉震撼,用显示屏是最好的。原本打算驱动24寸液晶显示屏来着,结果时间有限,并且实验箱里的STC的最大时钟只有35KHz,只能勉强驱动小一点的液晶显示屏,所以最后一切从简,用了LCD12864。言归正传,开始正文!
这次综合设计的成员:HWQ(MVP),LY(打下手)。

我们来秀操作啦!!!
综合设计——基于STC15W4K32S4(第一部分)_第1张图片

文章目录

  • 一、 设计内容
  • 二、设计原理
    • 1 实验器材
    • 2 硬件原理
      • 2.1 红外遥控
      • 2.2 PS2游戏手柄
      • 2.3 LCD12864
      • 2.4 ADC
    • 3 算法分析
        • 3.1 主流程图
        • 3.2 模式目录列表
          • 3.2.1 切换模式函数流程图
          • 3.2.2 过程分析
          • 3.3.3 代码

一、 设计内容

基于STC15W5K32S4实验箱,用红外遥控,PS2游戏手柄,ADC矩阵键盘来实现一些小项目合集(计算器、遥控画线、弹一弹、俄罗斯方块、短动画等)

二、设计原理

1 实验器材

本综合设计用到STC15W5K32S4实验箱、红外遥控、PS2游戏手柄
综合设计——基于STC15W4K32S4(第一部分)_第2张图片

2 硬件原理

2.1 红外遥控

红外遥控——基于STC15W5K32S4

2.2 PS2游戏手柄

PS2游戏手柄——基于STC15W5K32S4

2.3 LCD12864

LCD12864——基于STC15W5K32S4

2.4 ADC

ADC——基于STC15W5K32S4

3 算法分析

3.1 主流程图

综合设计——基于STC15W4K32S4(第一部分)_第3张图片

3.2 模式目录列表

综合设计——基于STC15W4K32S4(第一部分)_第4张图片

3.2.1 切换模式函数流程图

综合设计——基于STC15W4K32S4(第一部分)_第5张图片

3.2.2 过程分析

红外遥控器按键功能说明

第一列 第二列 第三列
第一行 复位 模式目录页面
第二行 跳转到最后一个模式 目录页面,指向上一个功能 目录页面,指向下一个功能
第三行 模式确定,开始 跳转到当前运行的模式的上一个模式 跳转到当前运行的模式的下一个模式
第四行 第0个模式
第五行 第1个模式 第2个模式 第3个模式
第六行 第4个模式 第5个模式 第6个模式
第七行 第7个模式 第8个模式 第9个模式

设置的一些变量和标志位

u8 mode=0xff;				//当前模式
u8 mode_pre=0xff;			//上次模式
u16 lie=1;				//模式选择列号
u16 cmode=0;			//预修改模式
bit B_list;				//修改列表标志位
3.3.3 代码

红外遥控按键选择函数

void RemotecontrolSwitch(void)
{
	switch(IR_code)
	{
		case 0x45:	mode=0xff;mode_pre=0xff;lie=1;B_list=0;cmode=0;
					LCD12864_Clear();
					DisplayListChar(0,1,uctech);	//显示字库中的中文数字
					DisplayListChar(0,2,net);		//显示字库中的中文数字
					DisplayListChar(0,3,mcu);		//显示字库中的中文
					DisplayListChar(0,4,qq);		//显示字库中的中文数字
					break;
		case 0x46:	LCD12864_Clear();//清屏
					ShowList();//显示列表
					mode=0xff;
					break;
		case 0x47:	break;
		case 0x44:	mode=9;break;
		case 0x40:	cmode--;
					if(cmode==-1) cmode=3;
					if(lie<6&&lie!=2)
					{	
						lie--;
						DisplayListChar(6,lie,blank);		
						lie--;						
						DisplayListChar(6,lie,errow);
						lie++;						
					}				
					else if(lie==2)
					{
						DisplayListChar(6,1,blank);
						lie=5;
						DisplayListChar(6,4,errow);
					}				
					break;
		case 0x43:	cmode++;	//选项+
					
					if(lie==1)
					{						
						lie++;
						DisplayListChar(6,2,errow);
					}			
					if(lie==5)
					{	cmode=0;
						lie=2;
						DisplayListChar(6,4,blank);
						DisplayListChar(6,1,errow);
										
					}						 				
					 else if(lie>1)
					{
						DisplayListChar(6,--lie,blank);
						lie++;
						DisplayListChar(6,lie,errow);	
						lie++;						
					}
								
					break;
		case 0x07:	mode=cmode;B_list=1;break;
		case 0x15:	mode--;if(mode<=0)mode=0;break;
		case 0x09:	mode++;if(mode>=9)mode=9;break;
		case 0x16:	mode=0;break;
		case 0x19:	break;
		case 0x0D:	break;
		case 0x0C:	mode=1;break;
		case 0x18:	mode=2;break;
		case 0x5E:	mode=3;break;
		case 0x08:	mode=4;break;
		case 0x1C:	mode=5;break;
		case 0x5A:	mode=6;break;
		case 0x42:	mode=7;break;
		case 0x52:	mode=8;break;
		case 0x4A:	mode=9;break;
		default:break;	
	}
}

显示目录列表

/********************************
功能:显示目录列表
*********************************/
void ShowList(void)
{
	u8 i;
	for(i=0;i<4;i++)//显示列表
	{
		DisplayListChar(0,++i,list[i]);
		i--;
	}
	DisplayListChar(6,lie-1,blank);
	DisplayListChar(6,lie-1,errow);	
}

“其余部分在这里哦”

综合设计——基于STC15W5K32S4(第二部分)

综合设计——基于STC15W5K32S4(第三部分)

你可能感兴趣的:(STC15)