STM32单片机LCD240128搬货物Proteus仿真程序

2020-08-06来源: 51hei关键字:STM32  单片机  LCD240128

单片机源程序如下:

#include

#include //关卡的界面

#include //在此文件中定义了汉字编码,用点阵液晶字模提取软件

#define uchar unsigned char

#define uint  unsigned int


sbit cd = P2^0;          //=0,数据通道;=1,命令通道

sbit rd = P2^1;          //=0,读选通有效

sbit wr = P2^2;          //=0,写选通有效

sbit ce = P2^3;         

sbit md = P2^4;

sbit rst= P2^5;         


uchar  renh=6,   renl=4,  bu=0,  guan=1;

static uchar SB[8][10];

bit flag=1;


void  wrdat(uchar) ;//写数据

void  wrcmd(uchar cmd);                     //写命令

void  wrdcmd(uchar dat1, cmd);//写带有一个参数的命令

void  lcddcmd(uchar dat1,dat2,cmd);  //写带有两个参数的命令

void  LCD24012864_init();

void  dischar(uchar hang,uchar lie,uchar cha) ;//写ASCII码字符

void  delay();

void  disxg();                   //显示选关提示

void  clear();               //清屏

void  disphz(uchar count) ; //数字和汉字代码写入自定义字符存储区

void  dishan(uchar hang, lie,uchar bianma);//写汉字代码行,列,bianma汉字在自定义字符中的位置,

void  disshu(uchar hang, lie, bianma);//写数字代码行,列,bianma汉字在自定义字符中的位置,

void  bushu();

uchar key()        ;               //检测按键


void tupian()          //画关卡地图

{

        uchar i,j;

        for(i=0;i<8;i++)

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

                {

                        dishan(2*i,2*j,han[map[guan-1][i][j]]);

                        SB[i][j]=map[guan-1][i][j];

                        if(SB[i][j]==0x07) SB[i][j]=0x00;

                }

                dishan(4,22,han[4]);

                disshu(4,24,shu[0]);

                disshu(4,25,shu[guan]);

                dishan(4,26,han[5]);

                bushu();

                dishan(2*renh,2*renl,han[1]);

}


void shengli()                         //过关判断

{

        uchar i,j,s1=0,s2=0;

        for(i=0;i<8;i++)

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

                {

                        if(map[guan-1][i][j]==0x07)     //检视目标

                        {

                                s1++;                                            //目标计数

                                if(SB[i][j]==0x02) s2++;        //目标上箱子计数

                        }

                }

                if(s1==s2)                                    //目标计数和目标上箱子计数相同,则过关

                {

                        dishan(2,20,han[10]);                //显示过关提示

                        dishan(2,22,han[11]);

                        dishan(2,24,han[12]);

                        dishan(2,26,han[5]);

                        disshu(2,28,shu[11]);

                        flag=0;                                     //停止游戏

                        disxg();                                 //显示选关提示

                }

}


void xuanguan(uchar k)                 //选关处理

{

        if((k==1||k==3)&&guan<3) {guan++;renh=6;renl=4;tupian();}

        if((k==2||k==4)&&guan>1) {guan--;renh=6;renl=4;tupian();}

}


void huintfumubiao()                //恢复目标显示,(被人踩的目标)

{

        uchar i,j;

        for(i=0;i<8;i++)

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

                {

                        if(map[guan-1][i][j]==0x07&&SB[i][j]!=0x02)         //有目标且没有箱子

                        {

                                if(renh!=i||renl!=j) dishan(2*i,2*j,han[7]);

                        }

                }        

}


void game(uchar k)                        //游戏控制

{

        if(k==1)                        //向上

        {

                if(SB[renh-1][renl]==0x00)                    //上面是空白

                {

                        dishan(2*renh,2*renl,han[0]);          //人原来的位置清0

                        renh--;                                                          //上移一行

                        dishan(2*renh,2*renl,han[1]);          //人新位置显示

                        bu++;                                                      //步数加1

                }


                else if((SB[renh-1][renl]==0x02)&&(SB[renh-2][renl]==0x00)) //上面是箱子,箱子上是空格

                {

                        dishan(2*renh,2*renl,han[0]);dishan(2*(renh-1),2*renl,han[0]);

                        renh--;

                        dishan(2*renh,2*renl,han[1]);dishan(2*(renh-1),2*renl,han[2]);

                        SB[renh][renl]=0x00;SB[renh-1][renl]=0x02;

                        bu++;

                }

        }


        if(k==4)

        {

                if(SB[renh+1][renl]==0x00)

                {

                        dishan(2*renh,2*renl,han[0]);

                        renh++;

                        dishan(2*renh,2*renl,han[1]);

                        bu++;

                }

                else if((SB[renh+1][renl]==0x02)&&(SB[renh+2][renl]==0x00))

                {

[1] [2] [3]
关键字:STM32  单片机  LCD240128 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic505497.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32温度传感器DS18B20测试程序 可通过TFT显示屏显示
下一篇:MAX30102空气质量监测模块STM32源程序与资料

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准
通过查看Sec的值和上次中断的差值计算的,虽然这个值是不准的 ,但实际上时间是准的,原因如下:stm32在调试模式下虽然进断点之后程序停止了,但定时器的时钟还在走,计数器还在计数,若要在产生断点时计数器停止计数可以在初始化时调用函数DBGMCU_Config(DBGMCU_TIM2_STOP,ENABLE);,这样一来仿真的时候定时时间就是准的了
发表于 2020-09-15
<font color='red'>STM32</font>定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准
STM32的JTAG下载模式
SWJ:串行线JTAG配置 (Serial wire JTAG configuration)SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口。系统复位后的默认状态是启用SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAG或SW(串行线)模式。
发表于 2020-09-15
Python 和OpenMV如何玩转 STM32 MCU
如今网络边缘侧的机器学习现状如何?哪些工具可以帮助工程师收集数据并执行推断运算?在哪里可以找到ST MEMS,它们对现实生活中的产品有哪些影响?本文是我们即将举行的STM32全国研讨会系列的第二篇专题文章。在第14届STM32全国研讨会上,我们将通过应用演示、产品展示以及工程师与观众互动回答问题的方式,来与蝶粉社区近距离交流。在STM32全国研讨会专题系列报道第一部分我们着重介绍了云连接方面的用例,如一款新的智能门铃功能演示,还介绍了工业和数据安全相关应用。 今天,我们将重点探讨人工智能、计算以及感知技术。 人工智能与计算Qeexo 和STM32Cube.AI 当今边缘机器学习解决方案的种类
发表于 2020-09-14
stm32定时器主从模式
TIM2作master;TIM3,TIM4作slave定时器2事件更新被用作触发输出TRGO从定时器TIM3,TIM4工作在从模式:门控模式触发选择设为:ITR1,这样TIM2的TRGO就连到了TIM3和TIM4的内部触发输入ITR1上,经过一系列选择器之后TIM2的TRGO就是TIM3和tim4的TRGI;这样一来就可以通过控制TIM2的period和Pulse来控制TIM3和TIM4输出一定的脉冲个数;
发表于 2020-09-14
<font color='red'>stm32</font>定时器主从模式
STM32驱动74hc595
#include "bsp_74HC595.h"#define HC595_DS        PCout(13)//#define HC595_OE        PAout(0)//#define HC595_ST_CP        PBout(9)//#define HC595_SH_CP             PBout(8)//static void HC595_Delay(u32 t){    u32 i; 
发表于 2020-09-14
定时器周期计算公式
例如:TIM_TimeBaseStructure.TIM_Period = 10000-1;       //当定时器从0计数到10000,即为10000次,为一个定时周期10khz TIM_TimeBaseStructure.TIM_Prescaler = 71;     //设置预分频:1us/clk TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;  //设置时钟分频系数:不分频(是对外部时钟TIMXETR进行滤波的) TIM_TimeBaseStruct
发表于 2020-09-14
定时器周期计算公式
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved