单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-27 发布时间:
|

我就负责编,刚开始因为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;


关键字:AVR  单片机  12864液晶  双人贪吃蛇游戏 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机按键切换下一首歌