单片机实验课程的最后一个综合设计实验,想做的花里胡哨,结果做出来还可以,嘻嘻嘻。为了一下子吸引眼球,创造一种高大上的视觉震撼,用显示屏是最好的。原本打算驱动24寸液晶显示屏来着,结果时间有限,并且实验箱里的STC的最大时钟只有35KHz,只能勉强驱动小一点的液晶显示屏,所以最后一切从简,用了LCD12864。言归正传,开始正文!
这次综合设计的成员:HWQ(MVP),LY(打下手)。
基于STC15W5K32S4实验箱,用红外遥控,PS2游戏手柄,ADC矩阵键盘来实现一些小项目合集(计算器、遥控画线、弹一弹、俄罗斯方块、短动画等)
本综合设计用到STC15W5K32S4实验箱、红外遥控、PS2游戏手柄
红外遥控——基于STC15W5K32S4
PS2游戏手柄——基于STC15W5K32S4
LCD12864——基于STC15W5K32S4
ADC——基于STC15W5K32S4
红外遥控器按键功能说明
第一列 | 第二列 | 第三列 | |
---|---|---|---|
第一行 | 复位 | 模式目录页面 | 空 |
第二行 | 跳转到最后一个模式 | 目录页面,指向上一个功能 | 目录页面,指向下一个功能 |
第三行 | 模式确定,开始 | 跳转到当前运行的模式的上一个模式 | 跳转到当前运行的模式的下一个模式 |
第四行 | 第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; //修改列表标志位
红外遥控按键选择函数
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(第三部分)