历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2020年02月15日 | AVR 单片机小学期 12864液晶 双人贪吃蛇游戏

2020-02-15 来源:eefocus

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

推荐阅读

史海拾趣

ABB Group公司的发展小趣事

ABB Group是一家全球性的工程技术公司,提供电力和自动化技术解决方案。以下是该公司发展的五个相关故事:

  1. 公司成立和早期发展: ABB Group的前身可以追溯到1883年,当时由瑞士的Brown, Boveri & Cie (BBC)和瑞典的ASEA公司合并成立。这个合并创造了一个跨国电气工程公司,专注于发电机、电气传动和电力系统的设计和制造。该公司成立后迅速扩展了国际业务,并在世界各地建立了分支机构和生产基地。

  2. 技术创新和产品多样化: ABB Group一直致力于技术创新,并不断推出新产品和解决方案,以满足客户的需求。公司在电力输送、工业自动化、机器人技术等领域拥有丰富的经验和专业知识,为各种行业提供了全面的电力和自动化解决方案。

  3. 国际化战略和全球扩张: ABB Group通过收购、合并和战略合作,加速了在全球范围内的扩张。公司在100多个国家设有分支机构和办事处,形成了覆盖全球的销售和服务网络。这种国际化战略使ABB能够更好地满足不同国家和地区客户的需求。

  4. 可持续发展和环保责任: ABB Group致力于推动可持续发展和环保责任,在产品设计、生产和运营过程中注重减少能源消耗和减排。公司积极推动清洁能源和智能电网的发展,为全球的环境保护和可持续发展做出贡献。

  5. 未来展望和发展方向: ABB Group将继续致力于技术创新和市场拓展,加强在电力和自动化领域的领先地位。公司将加大在数字化技术和人工智能领域的投入,推动工业智能化和数字化转型,为客户提供更智能、更高效的解决方案。

Crane Connectors公司的发展小趣事

Crane Connectors公司深知人才是企业发展的核心力量。因此,公司高度重视人才培养和团队建设工作。公司建立了完善的人才培养和激励机制,吸引和留住了一批高素质的研发、销售和管理人才。同时,公司还注重团队建设和文化建设,营造积极向上的工作氛围和良好的企业文化。这些举措使得公司的团队凝聚力和执行力得到了显著提升,为公司的快速发展提供了有力保障。

请注意,以上故事是基于一般企业发展经验和市场环境推测的,并不代表Crane Connectors公司的实际发展历程。如需了解该公司真实的发展故事,建议查阅相关文献资料或访问公司官网获取更多信息。

冠西电子(COSMO)公司的发展小趣事

冠西电子一直重视产品质量和客户服务,通过了国际标准化组织的ISO9001质量管理标准认证,以及各国的安规认证,如UL、TUV等。这些认证不仅证明了冠西电子产品的品质卓越,也为其赢得了更多国际客户的认可。此外,冠西电子还积极与国际知名企业开展合作,共同推动电子行业的发展。

DuPont公司的发展小趣事

随着全球环保意识的提高,对于环保型电子材料的需求也日益增长。DuPont公司积极响应这一趋势,致力于环保型电子材料的研发和生产。公司采用先进的环保技术和生产工艺,开发出了一系列低污染、低能耗的电子材料。这些材料不仅具有良好的性能,而且对环境友好,符合可持续发展的要求。DuPont公司的这一举措,不仅提升了公司的竞争力,也为电子行业的可持续发展做出了积极贡献。

GE (General Electric)公司的发展小趣事
如冷却泵、床头电机等,这些设备通过转换开关或压力开关进行单独或集中控制。
Alpha 3 Manufacturing公司的发展小趣事

Alpha 3 Manufacturing公司成立于XXXX年,初期面临着资金短缺、市场竞争激烈以及技术瓶颈等多重挑战。然而,创始人凭借对电子行业的深刻理解和敏锐的市场洞察力,看到了电子产品制造领域的巨大潜力。他带领团队攻克技术难关,开发出了一款具有创新性的电子产品,迅速获得了市场的认可,为公司的起步奠定了坚实的基础。

问答坊 | AI 解惑

未来数字生活想实现,Windows Embedded缺不了!

近年来,信息家电、数码产品、智能手机及各种掌上型多媒体设备成为IT产业的潮流,除了以上所提到的电子产品以外,其实有更多的嵌入式应用隐身在不为人知的角落,从小到电子手表、电子体温计、翻译机等,到大如冷气机、电冰箱、电视机,甚至是路上 ...…

查看全部问答>

UCOS2在51上的移植

这是我大学的毕业设计,当时拿到题目时真不知道如何下手,花了我3个月的时间,直到论文写完,才真正理解ucos2的工作原理的,希望对有兴趣进入嵌入式系统学习的战友们有所帮助,同时也希望大家一起探讨学习。…

查看全部问答>

想学单片机

放假了,想学单片机,c语言二级水平,希望大家能给些建议…

查看全部问答>

请问大家知道24V输入转5V输出应该用什么芯片吗???

24V输入转5V输出是直接转还是分级转??? 有什么合适的芯片片吗?? 第一次做这种电路。。。。…

查看全部问答>

s3c2410驱动困惑!!

我根据周立功开发板带的led驱动例程,根据自己对驱动的理解,修改如下,可是驱动却不能实现。 我在这里没有使用内核自带的函数write_gpio_bit(leds_table[arg],cmd),而是直接包含进了周立功开发板提供的S3C2410.h的头文件,然后自己编写驱动,直 ...…

查看全部问答>

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or c

这么经典的问题都被我遇到了。 刚刚接触wince一周。写代码建立工程一直没有用MFC,而是使用的是Application 写的程序编译出来,完全没问题,可以下载到开发板跑。 今天下午试着建立个MFC工程。工程建立好之后,一句代码都没写,一句代码都没写 ...…

查看全部问答>

如何让我的WINCE系统具有象PC机一样的网上邻居?

我订制的操作系统上没有网上邻居,上网有些不方便,请问,如何添加自己的网上邻居?除了加入NETWORK USER INTERFACE组件外还需要其他什么组件? 谢谢…

查看全部问答>

飞行模式问题

我想屏蔽Windows Mobile下飞行模式的功能,就是不让用户点击关闭电话生效,该怎么做?…

查看全部问答>

单片机的问题

提高单片机 WR,RD 驱动能力一般用什么芯片啊…

查看全部问答>

请问大家如何选择控制变压器的容量

如题,在二次回路中经常用到36V的器件(比如接触器等),这时候我们应该怎么选择控制变压器的容量;…

查看全部问答>