AVR 单片机小学期 12864液晶 双人贪吃蛇游戏

发布者:平静宁静最新更新时间:2020-02-15 来源: eefocus关键字:AVR  单片机  12864液晶  双人贪吃蛇游戏 手机看文章 扫描二维码
随时随地手机看文章

我就负责编,刚开始因为12864他把管脚插错了,总是不行,刚开始我还比较急躁。


觉得他连硬件电路都搭不好我怎么编,而且眼看着只剩两三天时间就验收了。


好在后来电路搭好了(就一个管脚接错了而已!),而且我编程顺利,最后验收效果不错。


我觉得玩起来挺爽的,加速键用着爽。


算一个纪念吧。


•  #include  

•  #include  

•  #define uchar unsigned char  

•  #define uint  unsigned int  

•  /********************端口************************/  

•  #define RS_0 PORTB&=~(1<<0)  

•  #define RS_1 PORTB|=(1<<0)  

•  #define RW_0 PORTB&=~(1<<1)  

•  #define RW_1 PORTB|=(1<<1)  

•  #define E_0  PORTB&=~(1<<2)  

•  #define E_1  PORTB|=(1<<2)  

•  #define RESET_0 PORTB&= ~(1<<4)   

•  #define RESET_1 PORTB|= (1<<4)  

•  /**************** 常用操作命令和参数定义 *****************/     

•       

•  #define DisplayClear 0x01 //清屏指令(00000001)     

•  #define ReturnHome   0x02 //光标回到"00H"(0000001X)     

•  #define EntryMode    0x06 //进入点设定,光标右移,AC加1(00000110)     

•  #define DisplayOn    0x0c //整体显示开,游标显示关,反白显示关     

•  #define DisplayOff   0x08 //整体显示关     

•  #define CursorOn     0x0e //光标显示开     

•  #define Reverse      0x0d //反白显示开     

•  #define Basic        0x30 //基本指令     

•  #define FAST         0x03;  

•  #define SLOW         0x05;  

•  #define NORM       0x04;  

•  #define Up 0  

•  #define Down 1  

•  #define Left 2  

•  #define Right 3  

•  /******************************延迟函数***********************************/  

•  uchar snakex1[16]={32,31,30,29,28,27,26,25,0,0};  

•  uchar snakey1[16]={16,16,16,16,16,16,16,16,0,0};  

•  uchar snakex2[16]={82,81,80,79,78,77,26,25,0,0};  

•  uchar snakey2[16]={16,16,16,16,16,16,16,16,0,0};  

•  uchar count1,count2;  

•  uchar stonex1[9]={31,50,10,15,20,2,22,44,47/*,8,5,55,12,34,10*/};  

•  uchar stoney1[9]={3,21,22,20,35,40,24,11,22/*,41,35,10,5,27,33*/};  

•  uchar stonex2[9]={70,77,80,100,120,112,90,99,88/*,78,96,111,122,64,100*/};  

•  uchar stoney2[9]={3,13,11,20,35,15,24,11,22/*,39,25,10,5,41,33*/};  

•  uchar len1,len2;  

•  uchar nowdir1,nowdir2;  

•  uchar flag1;//游戏结束的标志  

•  uchar flag2;  

•  uchar stop1,stop2;  

•  uchar Movex[4]={0,0,-1,1};//依次是上下左右  

•  uchar Movey[4]={-1,1,0,0};  

•  uchar speed;  

•  uchar player;  

•  void delay(uint ms)  

•  {  

•      uint i,j;  

•      for(i=0;i•      {  

•          for(j=0;j<1141;j++);  

•      }  

•  }  

•  /************************检测LCD是否忙***************************/  

•  void check_busy(void)   

•  {  

•      DDRD =0xff;  

•      RS_0;  

•      RW_1;  

•      E_1;  

•      DDRD =0x00;  

•      delay(1);  

•      while(PIND&0x80);  

•      E_0;  

•      DDRD =0xff;   

•    

•  }  

•    

•  /***********************************写指令**********************************/  

•  void write_com(uchar com)  

•  {         

•         check_busy();  

•         RS_0;  

•         RW_0;  

•         PORTD=com;  

•         E_1;  

•         delay(1);  

•         E_0;  

•         

•  }  

•  /***********************************写数据*********************/  

•  void write_data(uchar write_data)  

•  {      

•         check_busy();  

•         RS_1;  

•         RW_0;  

•         PORTD=write_data;  

•         E_1;  

•         delay(1);  

•         E_0;  

•    

•  }  

•  void DisplayCLR()//GDRAM清屏,如果没有清屏,会出现花屏现象。  

•  {  

•      uchar i,j,k;  

•      write_com(0x36);  

•      delay(1);  

•      for(i=0;i<2;i++)  

•      {  

•          for(j=0;j<32;j++)  

•          {  

•              write_com(0x80+j);  

•              delay(1);  

•              if(i==0)  

•              {  

•              write_com(0x80);  

•              delay(1);  

•              }  

•              else//写下半屏  

•              {  

•                  write_com(0x88);  

•              }  

•              for(k=0;k<16;k++)  

•              {  

•                  write_data(0x00);  

•                  delay(1);  

•              }  

•          }  

•      }  

•      write_com(0x30);  

•  }  

•  /********************************初始化**********************************/  

•  void init(void)  

•  {  

•      DDRD=0XFF;  

•      DDRB|=0x1f;  

•      E_0;  

•      RESET_1;  

•      len1=5;  

•      len2=5;  

•      nowdir1=Right;  

•      nowdir2=Right;  

•      flag1=0;  

•      flag2=0;  

•      count1=0;  

•      count2=0;  

•      delay(50);  

•      RESET_1;  

•      RESET_0;  

•      RESET_1;  

•      delay(50);  

•      write_com(Basic);  

•      delay(50);  

•      write_com(Basic);  

•      delay(50);  

•      write_com(DisplayOn);//开显示  

•      delay(500);  

•      write_com(DisplayClear);//清屏  

•      delay(50);  

•      write_com(EntryMode);//显示模式  

•      delay(50);  

•    

•  }  

•  uchar read_write_dataa()  

•  {  

•      uchar i;  

•      check_busy();  

•      RW_1;  

•      RS_1;      

•      delay(1);  

•      E_0;  

•      delay(1);  

•      E_1;  

•      delay(1);  

•      DDRD=0X00;  

•      delay(1);//缺了这句话则不行!!!  

•      i=PIND;  

•      delay(1);  

•      E_0;  

•      delay(1);  

•      DDRD=0XFF;  

•      return i;    

•  }     

•  void Showdot(uchar x, uchar y,uchar i)//在128*64的lcd矩阵中显示单个像素点  

•  {  

•      uchar x_byte,x_bit;  

•      uchar y_byte,y_bit;  

•      x_byte=x/16;  

•      x_bit=x%16;  

•      y_byte=y/32;  

•      y_bit=y%32;  

•      write_com(0x36);//开扩展指令集  

•      delay(1);  

•      write_com(0x80+y_bit);  

•      delay(1);  

•      write_com(0x80+x_byte+8*y_byte);  

•      delay(1);  

•      read_write_dataa();  

•      delay(1);  

•      uchar check_busy1;  

[1] [2] [3] [4]
关键字:AVR  单片机  12864液晶  双人贪吃蛇游戏 引用地址:AVR 单片机小学期 12864液晶 双人贪吃蛇游戏

上一篇:AVR端口先设置方向还是先赋值?
下一篇:基于AVR单片机的U盘MP3设计与实现

推荐阅读最新更新时间:2024-11-18 12:56

基于单片机的智能太阳能路灯控制系统的设计方案
  随着科学技术的迅速发展,世界能源危机日益严重,利用常规能源已不能适应世界经济快速增长的需要,开发和利用新能源越来越引起各国的重视。太阳能源本身的安全可靠、无噪声、无污染和可再生性的特点,加之现今光伏技术的逐渐成熟,利用光伏发电成为解决能源问题的一大途经。   智能太阳能路灯是利用太阳能组件的光生伏特效应,将光能转换为电能,并储存在蓄电池中供负载使用,它是集太阳能光伏技术、蓄电池技术、照明光源技术于一体的新兴技术。太阳能路灯控制器是应用于太阳能光伏系统中,协调太阳能电池板、蓄电池、负载的工作,使整个太阳能光伏系统高效,安全的运作。   1 智能太阳能路灯系统总体方案   智能太阳能路灯系统的由太阳能电池板、蓄电池
[单片机]
运用pic单片机设计直流电机无级调速系统方案
现代工业生产中,电动机是主要的驱动设备,目前在直流电动机拖动系统中已大量采用晶闸管(即可控硅)装置向电动机供电的KZ—D拖动系统,取代了笨重的发电动一电动机的F—D系统,又伴随着电子技术的高度发展,促使直流电机调速逐步从模拟化向数字化转变,特别是单片机技术的应用,使直流电机调速技术又进入到一个新的阶段,智能化、高可靠性已成为它发展的趋势。本调速系统采用PIC16F874单片机作为中心处理器,充分利用了PIC16F874单片机捕捉、比较、模/数转换模块的特点作为触发电路,其优点是:结构简单,能与主电路同步,能平稳移相且有足够的移相范围,控制角调整量可达10000步,能够实现电机的无级平滑控制,脉冲前沿陡且有足够的幅值,脉宽可设定,稳
[单片机]
运用pic<font color='red'>单片机</font>设计直流电机无级调速系统方案
基于H桥控制的移动机器人系统方案
引言 近年来随着人工智能技术、计算机技术等相关技术的发展,对移动机器人的研究越来越广泛。本设计是采用OpenWrt操作系统的移动机器人,它可实现多种不同功能,如探测险情、巡视、图像采集、定位、无线通信等。它还可以作为各种智能控制方法(包括动态避障、路径规划、群体协作策略)的良好载体,开展研究。 1 系统方案 采用2层架构。上层以ARM处理器S3C2440为核心,选用MINI2440开发板作为上层的主板,负责图像采集,并将图像通过WiFi方式发送给远端的PC机。WiFi无线通信是利用PC机与无线路由器搭建环境平台共同实现的。 下层是以51单片机为核心的单片机控制板,由51单片机及外围电路组成。下层主要负责机器人移动控制,
[单片机]
基于H桥控制的移动机器人系统方案
基于AVR单片机和CMX865的串口转FSK通信模块
本文利用ATmega48芯片和CMX865芯片为硬件架构设计了串口转FSK通信模块,实现数据传输方式的转换。基于此模块,用户与业务平台之间进行FSK信息交互,相对于终端来说就是简单的串口通信。硬件电路以ATmega48微处理器为核心,并利用C/BUS总线控制CMX865芯片,实现FSK/DTMF收、发功能;外围电路由振铃检测、FSK数据收发接口电路组成。模块软件设计主要包括串口通信和FSK通信两部分程序,串口通信程序实现串口通信命令的组包发送、收包解析/处理功能;FSK通信程序实现利用中断方式发送、接收FSK数据功能。由于ATmega48芯片与ATmega88芯片除了Flash、EEPROM、SR AM容量差异外,性能完全相同。通
[单片机]
基于<font color='red'>AVR</font><font color='red'>单片机</font>和CMX865的串口转FSK通信模块
MCU的供电和去藕
1、建议在印制电路板中,VDD和GND分别由电源层和地层实现。连接到AVDD和AGND引脚的模拟电源应直接布线到电源层和地层,它们不能和任何一个数字电源共享线路连接。 2、数字和模拟电源端都必须安放退藕电容。 数字电源连线上的每两个电源引脚必须至少接有一个100nF电容,并尽量靠近这些引脚。较为理想的是每个电源引脚都有一个10nF或100nF的退藕电容。模拟电源应单独使用100nF和1nF电容并联去藕,并尽量靠近AVDD和AGND引脚。所有这些退藕电容都应是低ESR的陶瓷电容。 3、在硬件设计的某些地方需要附加大量的退藕电容。在供电电源上至少需要一个10uF、低ESR的钽或铝电解电容,通常位于电源输入端或电源稳压器的输出端。
[单片机]
STM32单片机串口接收不定长无标志位字符串定时器判断结束
写在前面的话,以警示所有程序员。 你们或许还没有发现,随着我们深入编程领域的时间越久,我们程序员的思维越来越简单,情商也越来越低,这就是编程行业对我们自身的影响。整体跟逻辑的东西打交道,思维当然会固化。如何避免呢?想知道的话留个言,我会在下一篇博文中更新。 还要警示的是:做一个程序员的能力是有限的,一个程序员团队才可以做成大事。无论哪种语言,哪种程序,都不重要,重要的是我们的思路和逻辑,语言只是工具,不是目的! //串口1中断服务程序 void USART1_IRQHandler(void) { u8 rec_data; u8 i=0; if(USART_GetITStatus(USART1, USART_IT_RXNE
[单片机]
基于PIC16C55单片机控制多用电子钟原理介绍
本 电子钟 采用 PIC16C55 单片机 控制,适于温室的定时恒温或自来水的定时定压控制等。PIC16C55单片机工作电压为2.5~6.25V,功耗低、驱动能力强。本电子钟可以控制一路负载在24小时内的3次开/关;一个双限触发的定时输出口,既可接传统的功率保持型继电器,也可接脉冲继电器。本机用四位LED数码管扫描式显示,还有消隐(省电)工作方式,使用起来非常灵活、方便。 一、 电子钟工作原理 电子钟电路见图1。RB7口是定时指示端,在定时开期间输出高电平,驱动V1发光,该口也可经缓冲作定时输出口;RB6是双限触发控制的定时输出口,其工作方式是:在RB7高电平期间,若RB1为高电平,则RB6输出高电平;若RB0为高电平,RB6输出
[单片机]
基于PIC16C55<font color='red'>单片机</font>控制多用电子钟原理介绍
“掉电”不能忽视 单片机系统为电路保护提供条件
通常,在数字钟、打铃仪、某些定时器和日历钟等类型的 单片机 系统中,当主电源 DC5V 失去时,我们称之为掉电。掉电之后,单片机会停止工作,时钟会停止往前走,这种结果在许多场合往往是不希望的,为了保证单片机在主电压失去时仍然能够保持运行,人们就利用干电池对单片机系统继续进行供电。 应该感谢 单片机 芯片的工程技术设计师,是他们首先提供了单片机系统能够顺利实施“掉电保护”的内部条件,这就是:单片机允许在电压低至 2V 甚至更加小一些的电压供电时。仍然可以保证其最基本的运行(对外部输入输出功能将会失效或者停止)。 电池在主电源失去时,对单片机的继续运行提供能源,此时的电池能源是非常宝贵的,往往都是以“uA” 级进行计算。而且还有一个不
[电源管理]
“掉电”不能忽视 <font color='red'>单片机</font>系统为电路保护提供条件
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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