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

该博客介绍了基于STC15W4K32S4单片机的模式设计,包括模式选择、短动画和波形显示。模式选择利用switch函数通过红外遥控切换,短动画利用视觉暂留效应实现,而波形显示则调用了LCD12864的库函数。博客还提供了主函数及部分代码附录。
摘要由CSDN通过智能技术生成

“所有模式功能都有啦,快快把它们联系起来,好激动哦!!”

3.7 模式选择

关于模式选择,就是一个switch函数。通过红外遥控来更改mode的值,之后==switch(mode)==来进行对应的模式切换,不过有些模式需要初始化,所以设置了一个mode_pre来存放上一次模式的值,当mode!=mode_pre时,说明模式切换了,之后进入新模式的初始化,进行mode_pre=mode赋值操作,这样初始化就只进行了一次,之后在进入switch(mode)就会正常的模式运行了。

定义了一些变量

u8 mode=0xff;				//当前模式
u8 mode_pre=0xff;			//上次模式

正常的模式是从mode=0开始的,单片机上电时先不进行任何模式,所以先设置成0xff。

代码很简单,在这里就不画流程图了,直接上代码图片(完整代码太长,就放最后代码附录里了,下面是模式选择的框架)
在这里插入图片描述

3.8 其余的一些小模式
3.8.1 短动画

如果放较长的动画,单片机的存储器不够用,需要用SD卡,但是。。时间不够,一切从简,从网上找了一个短一点的动画,更确切的是表情包,分出来的图片只有6张。

放动画的原理也很简单,也就是很快的刷新图片,根据人眼的视觉暂留效应。只要能成功显示一张图片,那么动画也就是瞬间的事了。

拍的不是很清楚,见谅撒,嘻嘻嘻!
在这里插入图片描述
在这里插入图片描述

3.8.2 显示正弦,余弦,中心水平垂直线、圆

这个模式纯粹的就是调用LCD12864里的函数,没有什么新奇的东西,具体代码请看链接: LCD12864——基于STC15W5K32S4
在这里插入图片描述

“到这里基本就结束啦,最后附上主函数的代码”

3.9 主函数
#include "STC15Fxxxx.h"
#include "delay.h"
#include "LCD12864.h"
#include "picture.h"
#include "HC595.h"
#include "timer.h"
#include "remotecontrol.h"
#include "adc.h"
#include "jisuan.h"
#include "PS2.h"
#include "Tetris.h"
void main(void)
{
   
	u8 i=0;
	P0M1 = 0;	P0M0 = 0;	//设置为准双向口
	P1M1 = 0;	P1M0 = 0;	//设置为准双向口
	P2M1 = 0;	P2M0 = 0;	//设置为准双向口
	P3M1 = 0;	P3M0 = 0;	//设置为准双向口
	P4M1 = 0;	P4M0 = 0;	//设置为准双向口
	P5M1 = 0;	P5M0 = 0;	//设置为准双向口
	P6M1 = 0;	P6M0 = 0;	//设置为准双向口
	P7M1 = 0;	P7M0 = 0;	//设置为准双向口
	jisuaninit();
	
	HC595_Init();		//595初始化
	//DisableHC595();	//595关闭
	Timer_Init();		//定时器初始化
	ADCinit();			//ADC初始化
	
	delay_ms(100); 		//启动等待,等LCD讲入工作状态
	LCD12864_Init(); 	//LCD初始化
	delay_ms(5); 		//延时片刻(可不要)
	PS2_Init();			//PS2初始化
	EA = 1;				//开启总中断
	LCD12864_Clear();	//LCD清屏
	DisplayListChar(0,1,uctech);	//显示字库中的中文数字
	DisplayListChar(0,2,net);		//显示字库中的中文数字
	DisplayListChar(0,3,mcu);		//显示字库中的中文
	DisplayListChar(0,4,qq);		//显示字库中的中文数字
	delay_ms(5000);			//延时
	delay_ms(5000);
	LCD12864_Clear();		//LCD清屏
	ShowList();				//显示列表目录
	while(1)
	{
   
		 if(B_1ms)   //1ms到
        {
   
            B_1ms = 0;
            if(B_IR_Press)      //检测到收到红外键码
            {
   
                B_IR_Press = 0;
                RemotecontrolSwitch();
				/*****显示接收到的红外编码*******/
				//要显示红外编码的话要把摇杆的显示部分注释/
//                LED8[0] = (u8)((UserCode >> 12) & 0x0f);    //用户码高字节的高半字节
//                LED8[1] = (u8)((UserCode >> 8)  & 0x0f);    //用户码高字节的低半字节
//                LED8[2] = (u8)((UserCode >> 4)  & 0x0f);    //用户码低字节的高半字节
//                LED8[3] = (u8)(UserCode & 0x0f);            //用户码低字节的低半字节
//                LED8[6] = IR_code >> 4;
//                LED8[7] = IR_code & 0x0f;
				/*******************************/
            }
			Mode_Switch();//模式选择函数
			Read_PS2(); //读取PS2函数
			delay_ms(150);
			if(!PS2_RedLight())
			{
   
				LED8[0] = (u8)((out[7] >> 4) & 0x0f);	//左摇杆左右模拟值高半字节
				LED8[1] = (u8)(out[7]& 0x0f);			//左摇杆左右模拟值低半字节
				LED8[2] = (u8)((out[8] >> 4) & 0x0f);	//左摇杆上下模拟值高半字节
				LED8[3] = (u8)(out[8]& 0x0f);			//左摇杆上下模拟值高半字节
				LED8[4] = DIS_;
				LED8[5] = (u8)(Point_L_ShowLine & 0x0f);
				LE
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值