首页 » 互联网 » 基于STC8A8K48D4的动画小人设计_单片机_小人

基于STC8A8K48D4的动画小人设计_单片机_小人

少女玫瑰心 2025-01-20 23:31:14 0

扫一扫用手机浏览

文章目录 [+]

基于STC8A8K48D4的动画小人设计

一、设计任务与哀求

基于STC8A8K48D4的动画小人设计_单片机_小人 基于STC8A8K48D4的动画小人设计_单片机_小人 互联网

1、用单片机设计一个小动画

基于STC8A8K48D4的动画小人设计_单片机_小人 基于STC8A8K48D4的动画小人设计_单片机_小人 互联网
(图片来自网络侵删)

设计基本哀求:

(1)用12864显示器做为显示器。

(2)初始时在显示器中央先显示自己的学号并勾留3秒旁边,接下来清屏并在显示器的左上角画一个小人型的图画。

(3)用按键来掌握小人型的移动,分别用按键表示上,下,左,右。
每按一次,小人型移动一步。

(4)小人型不能跑出显示器。

二、方案设计与论证

首先,我选择这个项目的时候,我认为这个项目须要的硬件根本比较大略,它仅仅只须要几个按键,一块单片机,一个显示屏罢了。
这个项目紧张的问题是在程序的算法层面,要在显示屏上面显示小人,并利用按键来操控它。

由于这次实训指定了STC8A8K48D4的LQFP44封装,以是我先上STC官网下载了一个它的库文件下来,并且看了它的芯片手册。
同时老师给我们供应了利用I2C通讯的0.96寸4PIN的OLED屏,我按照辅导手册接在了单片机相应的IO口上面。

三、硬件电路设计

完成一个课程设计,我们的第一步该当是理解主控芯片,完成最小系统板的设计,在芯片手册中见告我们的最小系统板是在VCC口上连接一个22uf和0.1uf的电容,此芯片内部集成震荡电路可以不用外部晶振,但是末了我还是给它加了12MHZ晶振,这样的话延时会更准一些。
此外,我在P1.0到P1.3上接了10k的上拉电阻,并通过轻触开关接地,当按下轻触开关的时候,P1.0到P1.3就会低电平。
单片机与显示屏的通讯,则是采取SCL和SDA两条线,SDA我接在了P1.4,SCL我接在了P1.5。
电源供电利用DC接口,并且合营自锁开关。
此外,这个板子上还有电源指示灯,检测电源是否接通。

图1.1 流程图

图1.2 事理图

实在这次的设计有很多IO口没有用上,我想在未来的PCB设计中这些没用到的IO口可以用排针引出来,避免产生资源摧残浪费蹂躏。

四、软件设计

OLED屏网上有可以调用的库函数,只须要修正一下引脚,便可以移植到我的设计上面。
同时这个单片机上电后每个IO口都是高阻态,须要我们做出一些引脚配置,把PxM0和PxM1设置为0x00,方可利用。
这个设计所须要的算法便是在OLED屏显示一个BMP图像,并且给它设置好位置坐标,当我按下开关时候,决定它某个方向的坐标就会发生变革,为了避免产生残影之类的,按下该当先清一次屏,再显示图片。
此外,我还创造自己在软件算法方面的知识比较薄弱,在编写程序时,常常碰着语法缺点和逻辑缺点,须要仔细探求和修正才能办理问题,须要多加学习和实践。
详细主函数文件的算法流程如下:

//

#include "stc8a8k64d4.h"

#include "oled.h"

#include "stdio.h"//显示浮点数的sprintf函数

sbit sw2=P1^0;

sbit sw3=P1^1;

sbit sw4=P1^2;

sbit sw5=P1^3;

int a=0;

int b=0;

int c=64;

int d=4;

extern unsigned char code BMP[];

unsigned char disbuf[9];//显示浮点数须要

void delay_tms(unsigned int ms)

{

unsigned int i,j;

for(i=ms;i>0;i--)

for(j=0;j<1100;j++);

}

void Delay20ms(void) //@11.0592MHz

{

unsigned char data i, j;

i = 216;

j = 37;

do

{

while (--j);

} while (--i);

}

int main(void)

{

P1M0=0x00;

P1M1=0X00;

OLED_Init(); //初始化OLED

OLED_Clear() ;

OLED_ShowString(0,4,"20210460523",16);

delay_tms(3000);

OLED_Init(); //初始化OLED

OLED_Clear();

while(1)

{

//测试字符串显示,测试结果:

//第一个参数,以8为间隔;

//第二个参数,是行,如果第四个参数是12,那么以1间隔0-1-2-3-4-5-6,如果第四个参数是16,那么以2间隔,0-2-4-6

//第三个参数,字符串,双引号括起来

//第四个参数,是字体尺寸12或者16,16字体大一写

//图片显示,显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7

if(sw2==0)

{

Delay20ms();

if(sw2==0)

{

if(c<127)

{

a=a+8;

c=c+8;

OLED_Clear();

}

}

}

if(sw3==0)

{

Delay20ms();

if(sw3==0)

{

if(d<7)

{

b=b+1;

d=d+1;

OLED_Clear();

}

}

}

if(sw4==0)

{

Delay20ms();

if(sw4==0)

{

if(b>0)

{

b=b-1;

d=d-1;

OLED_Clear();

}

}

}

if(sw5==0)

{

Delay20ms();

if(sw5==0)

{

if(a>0)

{

a=a-8;

c=c-8;

OLED_Clear();

}

}

}

OLED_DrawBMP(a,b,c,d,BMP);

}

}

仿真过程与仿真结果

由于proteus8.6上面没有现成的stc8a8k48d4的芯片,无法完成仿真。
于是我采取最小系统板合营面包板来接线做一个仿照过程。
仿照过程非常顺利,OLED屏幕可以显示学号和动画小人。
面包板作为一种方便利用的产品,在电子信息专业的学习也是发挥着重要浸染。

图1.3 面包板显示学号

图1.4 面包板显示小人

安装与调试

在器件得手之后,我动手进行焊接。
焊接过程也不是很随意马虎,由于之前从未进行贴片器件的焊接,导致有些引脚由于过热被热掉了,幸亏热化的脚是没有用的,不然就完成不了这次课题了。
我这个PCB一次成功的缘故原由便是在于利用的IO口比较少,很多人由于IO口利用较多,然后又没有焊接履历让芯片断了脚或是贴片的焊盘化了,导致板子不能用。
以是说后期该当要多学习点贴片焊接手法,再把那些剩余IO口用排针引出来这个板子就会好很多。

图1.5 设计的PCB

结论与心得

本次设计让我也是明白了一些道理,世上无难事,只要肯登攀。
原来的我对单片机实在不是很理解,也担心自己没办法做出来。
于是,在百度上一贯搜索资料,找到了好多干系资料,并仔细剖析了那些代码,并融入自己的思想。
我也是在剖析代码后创造别人做的显示图片是定好点位,显示在屏幕上。
只要通过按键把点位移动就能实现动画小人。
在这次的单片机实训中,我深刻体会到了理论与实践相结合的主要性,通过老师的讲解和自己的实践操作,我逐渐节制了单片机的基本知识和运用技巧。
在未来的学习和事情中,我将连续努力提高自己的实践能力,不断学习新知识、新技能。
同时,我也将看重团队协作能力的培养,与他人共同互助、共同进步。

八、参考文献

[1]、实例6 单片机显示数据 https://blog.csdn.net/lmf666/article/details/110117294

[2]、布丁橘长 OLED笔墨、图片左移右移效果事理先容

[3]、单片机事理及运用:基于STC15系列单片机+C51编程 赖义汉

相关文章