ILI9235的51单片机驱动程序-推箱子游戏

发布者:Ziyu2022最新更新时间:2015-06-25 来源: 51hei关键字:ILI9235  51单片机  推箱子游戏 手机看文章 扫描二维码
随时随地手机看文章

完整的代码下载地址:http://www.51hei.com/bbs/dpj-20611-1.html
下面是ILI9235的驱动程序部分预览
#include "mylib.h"


/*******************************************************************************
函数名称:void ClearScreen(uint Color)
函数功能:刷屏使得全屏显示单一的颜色
入口参数:Clolr:屏幕背景的颜色(直接写入颜色的英文,在.h中有定义)
出口参数:无
备    注:
********************************************************************************/
void ClearScreen(uint Color)
{
  uint i,j;
  LCD_SetPos(0,320,0,240);                                  //设置起始地址为(0,0) ~(320,240)
  for (i=0;i<325;i++)
  {
    for (j=0;j<240;j++)
    {
      Write_Data_U16(Color);
    }
  }
}


/*******************************************************************************
函数名称:void Show_RGB (uint x0,uint x1,uint y0,uint y1,uint Color)
函数功能:在屏幕的(x0,y0)到(x1,y1)区域显示某一种颜色
入口参数:(x0,y0)和(x1,y1)表示位置;
           Color :显示区域的颜色
出口参数:无
备    注:可以实现画点和画水平和垂直的直线
          显示时输入的参数x:0-320,y:0-240(横向)
*******************************************************************************/
void Show_RGB (uint x0,uint x1,uint y0,uint y1,uint Color)
{
  uint i,j;
  
  i=x0;x0=y0;y0=i;
  i=x1;x1=y1;y1=i;
  i = y0;
  y0 = 320-y1;
  y1 = 320-i;
  LCD_SetPos(x0,x1,y0,y1); 
  for (i=y0;i<=y1;i++)
  { 
    for (j=x0;j<=x1;j++)
    {
      Write_Data_U16(Color);
    }
  }
}

 

/*******************************************************************************
函数名称:void DrawCoord(uint x0,uint x1, uint y0, uint y1, uint LineWidth, uint Color)
函数功能:在屏幕上画坐标,屏幕是横放的
入口参数:(x0,y0)和(x1,y1)表示位置;
           Color :显示区域的颜色
           Line_Width:坐标轴的线宽
出口参数:无
备    注:无
*******************************************************************************/
void DrawCoord(uint x0,uint x1, uint y0, uint y1, uint LineWidth, uint Color)
{
  LineWidth = LineWidth-1;
  Show_RGB (x0,x0+LineWidth,y0,y1,Color);  //竖
  Show_RGB (x0,x1,y1-LineWidth,y1,Color);  //横
}

 

/*******************************************************************************
函数名称:void Show_Xmark(uint x0,uint x1, uint y0, uint y1, uint LineWidth, uint Color)
函数功能:在屏幕上画横线,屏幕是横放的
入口参数:(x0,y0)和(x1,y1)表示位置;
           Color :显示区域的颜色
           Line_Width:坐标轴的线宽

出口参数:无
备    注:无
*******************************************************************************/
void Show_Xmark(uint x0,uint x1, uint y0, uint y1, uint LineWidth, uint Color)
{
  LineWidth = LineWidth-1;
  Show_RGB (x0,x0+LineWidth,y0,y1,Color);  //竖
}


/*******************************************************************************
函数名称:void Show_Xmark(uint x0,uint x1, uint y0, uint y1, uint LineWidth, uint Color)
函数功能:在屏幕上画竖线,屏幕是横放的
入口参数:(x0,y0)和(x1,y1)表示位置;
           Color :显示区域的颜色
           Line_Width:坐标轴的线宽

出口参数:无
备    注:无
*******************************************************************************/
void Show_Ymark (uint x0,uint x1, uint y0, uint y1, uint LineWidth, uint Color)
{
  LineWidth = LineWidth-1;
  Show_RGB (x0,x1,y0,y0+LineWidth,Color);
}

 

/*******************************************************************************
函数名称:void  Init_data (uchar x,uint y)
函数功能:些数据到寄存器
入口参数:x,y 需要写入的数据
出口参数:无
备    注:无
*******************************************************************************/
void  Init_data (uchar x,uint y)
{
  uchar m,n;
  m=y>>8;
  n=y;
  Write_Cmd(0x00,x);
  Write_Data(m,n);
}


/*******************************************************************************
函数名称:void  Write_Data_U16(uint y)
函数功能:写入颜色
入口参数:y 颜色数据
出口参数:无
备    注:无
*******************************************************************************/
void  Write_Data_U16(uint y)
{
  uchar m,n;
  m=y>>8;
  n=y;
  Write_Data(m,n);
}


/*******************************************************************************
函数名称:void Write_Cmd(uchar DH,uchar DL)
函数功能:写指令
入口参数:DH 高8位数据  DL  低8位数据
出口参数:无
备    注:无
*******************************************************************************/
void Write_Cmd(uchar DH,uchar DL)
{
  CS0
  RS0
  P4DIR = 0xff;
  P4OUT = DH;
  RW0
  RW1
  P4OUT = DL;
  RW0
  RW1
  CS1
}


/*******************************************************************************
函数名称:void Write_Data(uchar DH,uchar DL)
函数功能:写数据
入口参数:DH 高8位数据  DL  低8位数据
出口参数:无
备    注:无
*******************************************************************************/
void Write_Data(uchar DH,uchar DL)
{
  CS0
  RS1
  P4DIR = 0xff;
  P4OUT=DH;
  RW0
  RW1
  P4OUT=DL; 
  RW0
  RW1
  CS1
}

 

[page]
/*******************************************************************************
函数名称:void ILI9325_Initial()
函数功能:初始化液晶模块
入口参数:无
出口参数:无
备    注:无
*******************************************************************************/
void ILI9325_Initial()

  RD1  
  CS1
  REST0
  REST1
  Init_data(0x00e5, 0x8000); 
  Init_data(0x0000, 0x0001); 
  Init_data(0x0001, 0x0000);//输出方式控制0x00,0x100,0x400,0x500,正常显示用0x00
  Init_data(0x0002, 0x0700);//可设置为0x400或0x700;
  Init_data(0x0003, 0x1018);//可设置为0x1030,0x1000,0x1010,0x1020,0x1038,0x1028,0x1018,0x1008;
                            //还可以把最前面的1去掉,如:0x18;
                            //BGR = " 0 ":遵循gb顺序来写的像素数据【即去掉那个1】
                            //BGR = " 1 ":将RGB数据换成BGR数据再写入GRAM【即不去掉那个1】
                            //横向设置0x1018最好/纵向设置0x1000最好
  Init_data(0x0004, 0x0000);//显示大小尺寸控制寄存器0x00为1倍大小,即240x320
  Init_data(0x0008, 0x0202);//可设置为0x0202,0x00, 
  Init_data(0x0009, 0x0000);//扫描设置 
  Init_data(0x000A, 0x0000);
  Init_data(0x000C, 0x0000); 
  Init_data(0x000D, 0x0000); 
  Init_data(0x000F, 0x0000); 
  //-----Power On sequence----------------------- 
  Init_data(0x0010, 0x0000); 
  Init_data(0x0011, 0x0007); 
  Init_data(0x0012, 0x0000); 
  Init_data(0x0013, 0x0000); 
  Init_data(0x0010, 0x17B0); 
  Init_data(0x0011, 0x0007); 
  Init_data(0x0012, 0x013A); 
  Init_data(0x0013, 0x1A00); 
  Init_data(0x0029, 0x000c);  
  //-----Gamma control----------------------- 
  Init_data(0x0030, 0x0000); 
  Init_data(0x0031, 0x0505); 
  Init_data(0x0032, 0x0004); 
  Init_data(0x0035, 0x0006); 
  Init_data(0x0036, 0x0707); 
  Init_data(0x0037, 0x0105); 
  Init_data(0x0038, 0x0002); 
  Init_data(0x0039, 0x0707); 
  Init_data(0x003C, 0x0704); 
  Init_data(0x003D, 0x0807); 
  //-----Set RAM area----------------------- 
  Init_data(0x0050, 0x0000);
  Init_data(0x0051, 0x00EF);
  Init_data(0x0052, 0x0000);
  Init_data(0x0053, 0x013F);
  Init_data(0x0060, 0x2700);
  Init_data(0x0061, 0x0001);
  Init_data(0x006A, 0x0000);
  Init_data(0x0021, 0x0000); 
  Init_data(0x0020, 0x0000); 
  //-----Partial Display Control------------ 
  Init_data(0x0080, 0x0000); 
  Init_data(0x0081, 0x0000);
  Init_data(0x0082, 0x0000);
  Init_data(0x0083, 0x0000);
  Init_data(0x0084, 0x0000); 
  Init_data(0x0085, 0x0000);
  //-----Panel Control----------------------
  Init_data(0x0090, 0x0010); 
  Init_data(0x0092, 0x0000);
  Init_data(0x0093, 0x0003);
  Init_data(0x0095, 0x0110);
  Init_data(0x0097, 0x0000); 
  Init_data(0x0098, 0x0000);
  //-----Display on----------------------- 
  Init_data(0x0007, 0x0173);  
}


/*=================定义显示窗体=============================
---------x0:  窗体中X坐标中较小者
---------x1:  窗体中X坐标中较大者
---------y0:  窗体中Y坐标中较小者
---------y1:  窗体中Y坐标中较大者 
=================定义显示窗体=============================*/
void LCD_SetPos(uint x0,uint x1,uint y0,uint y1)
{
  Init_data(WINDOW_XADDR_START,x0);
  Init_data(WINDOW_XADDR_END,x1);
  Init_data(WINDOW_YADDR_START,y0);
  Init_data(WINDOW_YADDR_END,y1);
  Init_data(GRAM_XADDR,x0);
  Init_data(GRAM_YADDR,y0);
  Write_Cmd (0x00,0x22);
}

 

/*******************************************************************************
函数名称:void ILI9325_Initial()
函数功能:初始化液晶模块
入口参数:无
出口参数:无
备    注:无
*******************************************************************************/
void DisPoint(uchar x, uint y, uint color)

  Show_RGB(x,x,y,y,color);
}


/******************************************************************** 
画直线(可以画任意方向直线,包括横线、竖线、斜线)。
入口参数: (x1,y1)起点, (x2,y2)终点, color颜色。
出口参数: 无
说    明:用指定的颜色在指定的两点间画出一条直线。
***********************************************************************/
void Disline(uint x1,uint x2,uint y1,uint y2,uint color)  
{  
  uint t;  
  int xerr=0,yerr=0,delta_x,delta_y,distance;  
  int incx,incy;  
  uint row,col;  
  delta_x = x2-x1;//计算坐标增量  
  delta_y = y2-y1;  
  col=x1;  
  row=y1;  
  if(delta_x>0) incx=1;//设置单步方向  
  else   
  {  
    if(delta_x==0) incx=0;//垂直线  
    else {incx=-1;delta_x=-delta_x;}  
  }  
  if(delta_y>0)incy=1;  
  else  
  {  
    if(delta_y==0) incy=0;//水平线  
    else {incy=-1;delta_y=-delta_y;}  
  }  
  if(delta_x>delta_y) distance=delta_x;//选取基本增量坐标轴  
  else distance=delta_y;  
  
  for(t=0;t<=distance+1;t++)  
  {                                     //画线输出  
    DisPoint(col,row,color);
    xerr+=delta_x;  
    yerr+=delta_y;  
    if(xerr>distance)  
    {  
      xerr-=distance;  
      col+=incx;  
    }  
    if(yerr>distance)  
    {  
      yerr-=distance;  
      row+=incy;  
    }  
  }  
}


void Dis32x32(uint y,uint x,uchar *Code32x32,uint fColor,uint bColor)
{
  uint i,j;
  y = 320-y-32;
  LCD_SetPos(x,x+31,y,y+31);
  LCD_SetPos(x,x+31,y,y+31);
  for(i=0;i<128;i++)                      //按照字模成分描点 
  {
    ushort w = Code32x32[i];
    for(j=0;j<8;j++) 
    {
      uint Color= (w&0x80)? fColor:bColor;//条件运算符,当为字模成份时描前景色                                                                                                              //否则描背景色
      Write_Data_U16(Color);
      w<<=1;
    } 
  }
       
}


void Dis16x16(uchar x,uchar y,uchar *Code16x16,uint fColor,uint bColor)
{
  uint i,j;
  y = 320-y-16;
  LCD_SetPos(x,x+15,y,y+15);
  for(i=0;i<32;i++)//按照字模成分描点 
  {
    uchar w = Code16x16[i];
    for(j=0;j<8;j++) 
    {
      uint Color= (w&0x80)? fColor:bColor;    //条件运算符,当为字模成份时描前景色
                                              //否则描背景色
      Write_Data_U16(Color);
      w<<=1;
    } 
  } 
}

 

//写16X32字符
void Dis16x32(uint y, uint x,uchar *Code16x32,uint fColor,uint bColor)
{
    uint i,j;
    y=320-y-32;
    LCD_SetPos(x,x+31,y,y+15);
    
    for(i=0;i<64;i++)  //按字模成分描点
    {
      ushort w = Code16x32[i];
      for(j=0;j<8;j++)
      {
        uint Color= (w&0x80)? fColor:bColor;  //条件运算符,当为字模成份时描前景色
                                              //否则描背景色
        Write_Data_U16(Color);
        w<<=1;
      }
                    
    }
 
}

关键字:ILI9235  51单片机  推箱子游戏 引用地址:ILI9235的51单片机驱动程序-推箱子游戏

上一篇:51单片机红外解码库文件
下一篇:51单片机+8*8点阵实现的贪食蛇源代码

推荐阅读最新更新时间:2024-03-16 14:05

基于51单片机的无线识别装置系统
1 引言 射频识别是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据。射频识别工作无须人工干预,非接触,阅读速度快,无磨损,不受环境影响,寿命长,便于使用。目前,射频识别技术在国外发展非常迅速,射频识别产品种类繁多,已广泛用于工业自动化、商业自动化、交通运输控制管理等众多领域,如汽车、火车等交通监控;高速公路自动收费系统;停车场管理系统;物品管理;仓储管理;车辆防盗等。由于我国射频识别技术起步较晚,除用于中国铁路的车号自动识别系统外,仅限于射频公交卡的应用。 在此,给出一种实现简单射频识别系统的方式。阅读器和应答器均包含在单片机控制系统中,利用2ASK调制与解调电路以及匹配网络电路,使整个系统的可识别
[单片机]
基于<font color='red'>51单片机</font>的无线识别装置系统
手把手教学51单片机 | 第三课之 定时器中断
1. 中断 (1)外部中断 打开总中断EA,选择外部中断EX0或EX1,因为ie可寻址,所以直接对EX0或者EX1操作,然后设置IT0(TCOD中)为电平触发还是跳变沿触发(上电默认寄存器0,为电平触发方式),然后写中断处理函数根据下表优先级确定 interrupt 后面的数字 (2)定时器中断 TMOD是定时器/计数器的工作方式寄存器, TCON是控制寄存器,控制T0T1的启动和停止及设置溢出标志 如果选用01工作方式,TH TL是16位 2^16=65536 (65536-N)/256相当于一个能装65536的水桶舀出N单位的水,然后每1us加入1单位的水的时间,最后用了5000us=50ms 接下来是TC
[单片机]
手把手教学<font color='red'>51单片机</font> | 第三课之 定时器中断
TLV5616 51单片机 驱动 程序
========================================第1页======================================== #include reg51.h // 通用的头文件定义 #include intrins.h #define uchar unsigned char #define uint unsigned int //* 函数声明 void tlv5616_da(uint da); //DA 转换函数 //tlc5615 的信号线 sbit tlv5616_clk=P0^2; //TLC5615
[单片机]
利用51单片机来控制LED点阵的设计方案
引言 单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。广大工程技术人员通过学习有关单片机的知识后,也能依靠自己的力量来开发所希望的单片机系统,并可获得较高的经济效益。正因为如此,在我国,单片机已被广泛地应用在工业自动化控制、自动检测、智能仪表、家用电器等各个方面。在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时则需要先根据新的汉
[单片机]
51单片机LCD12864显示屏图片中文英文显示
显示结果: 图片及字体取模 单片机源程序如下: #include reg51.h #include intrins.h #include stdlib.h #define uchar unsigned char #define uint unsigned int //定义端口 sbit A0=P2^0; //定义端口是传输命令还是数据, sbit RW=P2^1;//定义端口是读取还是写入, sbit LCDEN=P2^2;//芯片使能启动 sbit RST=P2^3;//复位键 uchar code dis1 ={/*-- 文字: 我 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x
[单片机]
<font color='red'>51单片机</font>LCD12864显示屏图片中文英文显示
51单片机分外功用寄存器操作进程
  51单片机特有的程序语法以及 Keil 软件的根柢操作进程,请咱们必定要有耐性。   咱们首要是用 C 言语来对单片机编程,而有的单片机有那么几条很分外的特有的编程句子,51 单片机就有,先介绍 2 条。   榜首条句子是:sfr P0 = 0x80;   sfr 这个要害字,是 51 单片机特有的,他的作用是界说一个单片机分外功用寄存器(special function register)。51 单片机内部有许多个小模块,每个模块寓居在具有仅有房间号的房间内,一同每个模块都有 8 个操控开关。P0 便是一个功用模块,就住在了 0x80 这个房间里,咱们便是经过设置 P0 内部这个模块的 8 个开关,来让单片机的 P0 这
[单片机]
<font color='red'>51单片机</font>分外功用寄存器操作进程
51单片机驱动点阵16*16上移C程序
#include reg52.h #define uchar unsigned char #define uint unsigned int #define LINE P0//定义行线IO口,即74HC154控制端 #define shudu 20//字移动的速度 sbit DATA=P1^4;//74HC595数据端 sbit CLK=P1^5;//74HC595移位脉冲端 sbit CLKR=P1^6;//74HC595数据锁存端 uchar move;//移动几位变量 uchar line;//行变量 uchar word;//字节变量 uchar ji;//字节变量 uchar code table ={ 0x00,
[单片机]
<font color='red'>51单片机</font>驱动点阵16*16上移C程序
51单片机60秒倒计时 数码管显示
本资源适用于初学者,使用单片机型号为普中51单片机: 下面展示 代码。 #include reg52.h sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4;//38译码器控制位选 char code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; char a1,a2,s=60;//s为要定时 60秒 void timer0() { TMOD|=0x01; TH0=0xfc; TL0=0x18;//¶¨定时1MS EA=1; ET0=1; TR0=
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved