搜索
bottom↓
回复: 44

今天把我的128X64整了贪吃蛇

[复制链接]

出0入0汤圆

发表于 2007-10-18 19:51:34 | 显示全部楼层 |阅读模式
学习AVR-GCC一个礼拜了,想着整点东西,把自己以前的无线解码控制三色LCD的程序全写成了AVR-GCC,看着自己的LCD只能这样动态的显示下数字,就是动态显示当前三色灯的状态,没有其他用处,因而一直想着玩点别,通过一天多的时间,终于搞定了,明天附图。
   毕竟自己是个刚学AVR不久的人,所以不是现啊,只是想说,只要自己努力了,其实是可以做到的。

   这里还是说下自己的心得,对于128X64的原理及其点阵分布,搞单片机的都清楚,也就是因为其128X64==128X(8X8)  对于写坐标的形式真是要煞费苦心啊,这还真的要点数学功底哦,还好我不是很差,我都是以坐标的形式存放于一个数组,(也可以结构),数组中的点(x,y)就是我当前在屏幕上显示的蛇,吃到一个增加输出一个点,以此类推。
   其实驱动LCD实在不难,难的是任意的一个点驱!

   下一步,准备学习AVR的SPI,然后FAT系统,准备使用废弃好久的64M SD卡,搞个MP3,哈哈!

   等待下篇成功的喜悦。

出0入0汤圆

 楼主| 发表于 2007-10-18 19:54:32 | 显示全部楼层
想想前两天我还问  为什么我的程序很多东西不执行,优化掉了,呵呵,所以,各位始终不要放弃自己的理想和信念啊

出0入0汤圆

发表于 2007-10-18 20:31:03 | 显示全部楼层
楼主能发出来分享下吗?

出0入0汤圆

 楼主| 发表于 2007-10-19 09:45:49 | 显示全部楼层





代码如下:
点击此处下载ourdev_177420.rar(文件大小:63K)

出0入0汤圆

发表于 2007-10-19 12:21:15 | 显示全部楼层
多谢楼主

出0入0汤圆

发表于 2007-10-19 12:23:54 | 显示全部楼层
楼主有电路图吗?我刚好想研究下这个
头像被屏蔽

出0入0汤圆

发表于 2007-10-19 13:12:01 | 显示全部楼层
是啊,上传一下电路,这样就更有参考价值了。

先置COOL!

出0入0汤圆

发表于 2007-10-19 15:34:56 | 显示全部楼层
楼主历害

出0入0汤圆

发表于 2007-10-19 16:56:51 | 显示全部楼层
厉害

出0入0汤圆

 楼主| 发表于 2007-10-19 19:26:11 | 显示全部楼层
电路画还要点时间,今天刚接到总经理的任务,目前在寻找TOUCHPAD的相关资料

直接说吧,很简单的,看源程序就知道我开始的定义的管脚。可以随便改前面定义的,移植方便,

我用的ATMEGA48V,

PD0--PD7 LCD数据
PB0--PB3 四个方向开关(接地,呵呵,简单嘛)
PC0--PC5 依次为RS,RW,E,CSA,CSB,RST

注意移植其他IC时,改变了管脚,在PORT_INIT()函数里注意初始化管脚的变化。

今天开始有任务,因而在找寻TOUCHUPAD的相关知识,哪位兄弟有这些资料,能否赐教啊,呵呵,谢谢了!
早点回去弄那个sony clie peg-nx70   今天老总给的写程序用,不会用,回去弄弄

出0入0汤圆

发表于 2007-10-19 20:05:51 | 显示全部楼层
看了下程序! 里面的算法看了头晕    那位强人能帮我移植到PIC16F877里就好了(AVR一点也不懂,工具.芯片也没有)

出0入0汤圆

 楼主| 发表于 2007-10-19 20:13:50 | 显示全部楼层
呵呵,我在整时就是满脑的坐标啊

出0入0汤圆

发表于 2007-10-19 20:25:19 | 显示全部楼层
#define RSH  PORTC|=0X01  //sbi PORTD,0
#define RSL  PORTC&=0XFE  //CBI PORTD,0
#define RWH  PORTC|=0X02  //SBI PORTD,1
#define RWL  PORTC&=0XFD  //CBI PORTD,1
#define EH   PORTC|=0X04  //SBI PORTD,2
#define EL   PORTC&=0XFB  //CBI PORTD,2
#define CSAH PORTC|=0X08  //SBI PORTD,3
#define CSAL PORTC&=0XF7  //CBI PORTD,3
#define CSBH PORTC|=0X10  //SBI PORTD,4
#define CSBL PORTC&=0XEF  //CBI PORTD,4
#define RSTH PORTC|=0X20  //SBI PORTD,5
#define RSTL PORTC&=0XDF  //CBI PORTD,5


#define display_on  0X3F
#define display_off 0X3E
#define l_x         0XB8
#define l_y         0X40
#define l_move      0XC0

#define DATAPORT PORTD
#define PINPORT  PIND
#define DATAPORT_IN DDRD=0X00
#define DATAPORT_OUT DDRD=0XFF



#define  move_up     (PINB&0X01)
#define  move_right  (PINB&0X02)
#define  move_down   (PINB&0X04)
#define  move_left   (PINB&0X08)

上面的定义看不大懂啊!麻烦楼主能注译下吗?     小弟对AVR不懂的!

出0入0汤圆

发表于 2007-10-19 20:44:29 | 显示全部楼层
前段时间看到bozi有一个类似程序和电路帖子,不知有关否?

出0入0汤圆

 楼主| 发表于 2007-10-19 21:07:56 | 显示全部楼层
#define RSH  PORTC|=0X01  //sbi PORTD,0     //应该是SBI PORTC.0  以下都是PORTC,因为我后来用,这是PWM时避免端口冲突
#define RSL  PORTC&=0XFE  //CBI PORTD,0
#define RWH  PORTC|=0X02  //SBI PORTD,1
#define RWL  PORTC&=0XFD  //CBI PORTD,1
#define EH   PORTC|=0X04  //SBI PORTD,2
#define EL   PORTC&=0XFB  //CBI PORTD,2
#define CSAH PORTC|=0X08  //SBI PORTD,3
#define CSAL PORTC&=0XF7  //CBI PORTD,3
#define CSBH PORTC|=0X10  //SBI PORTD,4
#define CSBL PORTC&=0XEF  //CBI PORTD,4
#define RSTH PORTC|=0X20  //SBI PORTD,5
#define RSTL PORTC&=0XDF  //CBI PORTD,5      //以上都是对LCD操作对应的端口,方便移植

                                             //下面四个你就要看LCD手册了,
#define display_on  0X3F                  
#define display_off 0X3E
#define l_x         0XB8
#define l_y         0X40
#define l_move      0XC0
                                       //以下也是方便移植
#define DATAPORT PORTD
#define PINPORT  PIND
#define DATAPORT_IN DDRD=0X00
#define DATAPORT_OUT DDRD=0XFF

                                 //四个方向键

#define  move_up     (PINB&0X01)
#define  move_right  (PINB&0X02)
#define  move_down   (PINB&0X04)
#define  move_left   (PINB&0X08)

出0入0汤圆

 楼主| 发表于 2007-10-19 21:23:44 | 显示全部楼层
如果真是用别人的那也没有什么高兴的,

我要说下,LCD的使用是4天前写的无线遥控 PWM 控制三色LED 的程序,同时显示。同时也发上这个程序,希望对有需要的人有帮助

同时在这两个的程序里你们可以看到我两个程序的很多相似,只有一个人之手才会在他的程序里都有这个印子,记得在这个论坛上我也

看到个说LCD坐标的,我没有看完,我心里就想我应该也可以。所以才写完很开心来把自己的程序发上来希望比我更新的新手有用啊

对了下面的无线遥控三色LED  (PWM)  调节颜色的程序可以说我从AVR 汇编  又把他写成C  很累,呵呵。

学习还是第一,希望高手能对小弟的思路指点指点,我公司就我一个搞单片机的,写遥控器程序,所以这里才是我的家哦!

点击此处下载 无线遥控三色LED  (PWM)(汇编)(文件大小:20K)
点击此处下载 无线遥控三色LED  (PWM)(AVR-GCC)(文件大小:64K)

出0入0汤圆

发表于 2007-10-19 21:57:38 | 显示全部楼层
PORTC|=0X01   
  PORTC&=0XFE   
  PORTC|=0X02  
  PORTC&=0XFD  
  PORTC|=0X04  
  PORTC&=0XFB  
  PORTC|=0X08   
  PORTC&=0XF7   
  PORTC|=0X10  
  PORTC&=0XEF
  PORTC|=0X20  
  PORTC&=0XDF


    (PINB&0X01)
   (PINB&0X02)
   (PINB&0X04)
   (PINB&0X08)



我想知道后面定义的表达试是什么意思啊?

出0入0汤圆

 楼主| 发表于 2007-10-19 22:21:17 | 显示全部楼层
PORTC|=0X01     //直接把PC0 置1
  PORTC&=0XFE     //直接把PC0 置0
  PORTC|=0X02     //直接把PC1 置1
  PORTC&=0XFD     //直接把PC1 置0
  PORTC|=0X04     //直接把PC2 置1
  PORTC&=0XFB     //直接把PC2 置0
  PORTC|=0X08   
  PORTC&=0XF7   
  PORTC|=0X10   
  PORTC&=0XEF  
  PORTC|=0X20   
  PORTC&=0XDF  


    (PINB&0X01)   //判断PINB.0是否为低电平用  如 if(!move_up)  也就是说如果PINB.0接地 则条件成立
   (PINB&0X02)    //判断PINB.1是否为低电平用
   (PINB&0X04)    //判断PINB.2是否为低电平用
   (PINB&0X08)    //判断PINB.3是否为低电平用

出0入0汤圆

发表于 2007-10-20 07:40:01 | 显示全部楼层
多卸楼主!这个程序我有的看了!呵呵

出0入0汤圆

发表于 2007-10-20 21:48:19 | 显示全部楼层
今天把移植了下!想用PIC来玩  可不知道这几个函数是什么意思.移植不获取
void delay1ms(uchar y)
{
asm  volatile("push r22"::);
asm  volatile("push r23"::);
asm  volatile("d1: ldi r23,205"::);
asm  volatile("d2: ldi r22,12"::);
asm  volatile("d3: dec r22"::);
asm  volatile("brne d3"::);
asm  volatile("dec r23"::);
asm  volatile("brne d2"::);
asm  volatile("dec r24"::);
asm  volatile("brne d1"::);
asm  volatile("pop r23"::);
asm  volatile("pop r22"::);

}

//****************此函数是在8M条件下得出的准1us延时**********************//
//****************当使用4M时延时翻倍,因而减半参数即可*******************//

void delay1us(uchar x)
{       asm  volatile("push r24"::);
        asm  volatile("dus: dec r24" ::);
        asm volatile("nop" ::);
                asm volatile("nop" ::);
        asm volatile("nop" ::);
        asm volatile("nop" ::);
                asm volatile("nop" ::);
        asm volatile("brne dus" ::);
                asm  volatile("pop r24"::);

出0入0汤圆

 楼主| 发表于 2007-10-21 18:10:56 | 显示全部楼层
哦,这个啊,是延时程序,一直觉得汇编比较精准,这个是AVR-GCC的,可能不适合其他平台,你可以自己写其他的延时来代替

出0入0汤圆

发表于 2007-10-21 19:05:53 | 显示全部楼层
哦知道了!  谢谢楼主!

出0入0汤圆

发表于 2008-8-21 21:56:02 | 显示全部楼层
下来学习下

出0入0汤圆

发表于 2008-8-25 11:44:50 | 显示全部楼层
顶起来再说

出0入0汤圆

发表于 2008-8-25 13:25:24 | 显示全部楼层
ding!

出0入0汤圆

发表于 2008-8-25 13:48:40 | 显示全部楼层
不要在左半屏,弄个全屏式的的,看你怎么弄!

出0入0汤圆

发表于 2008-8-25 14:28:14 | 显示全部楼层
dddd

出0入0汤圆

发表于 2008-8-25 16:43:40 | 显示全部楼层
不错!

出0入0汤圆

发表于 2009-3-17 20:58:28 | 显示全部楼层
顶起来

出0入0汤圆

发表于 2009-3-17 21:41:58 | 显示全部楼层
楼主发个流程图算了 晕的。

出0入0汤圆

发表于 2009-3-17 22:34:41 | 显示全部楼层
楼主厉害啊 MARK

出0入0汤圆

发表于 2009-3-17 23:16:44 | 显示全部楼层
不错

出0入0汤圆

发表于 2009-5-23 19:47:30 | 显示全部楼层
楼主厉害啊

出0入0汤圆

发表于 2009-5-24 17:42:11 | 显示全部楼层
不错,不过我建议把蛇身放大,把文字去掉。不然看的眼睛累。

出0入0汤圆

发表于 2009-9-22 15:31:58 | 显示全部楼层
越大 可能需要的ram越大吧

出0入0汤圆

发表于 2009-10-21 15:22:23 | 显示全部楼层
0

出0入0汤圆

发表于 2009-10-21 19:45:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-21 20:14:15 | 显示全部楼层
to xhero 秋天爱吃橘

越大 可能需要的ram越大吧   
__________________________


既然左边显示汉字,那肯定也是使用了ram
实际上整屏就占用一块ram空间,点亮某一点实际是给对应的ram地址写1而已

出0入0汤圆

发表于 2009-10-21 20:57:27 | 显示全部楼层
怕优化加一:volatile

出0入0汤圆

发表于 2009-10-22 11:43:05 | 显示全部楼层
mark下,我也琢磨着要玩一下!

出0入0汤圆

发表于 2009-10-22 12:11:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-29 03:22:26 | 显示全部楼层
不错不错。。有空玩玩

出0入0汤圆

发表于 2010-2-16 12:24:38 | 显示全部楼层
谢谢 LZ

出0入0汤圆

发表于 2012-8-13 17:07:25 | 显示全部楼层
蛇怎么这么细

出0入0汤圆

发表于 2012-8-13 18:45:49 | 显示全部楼层
还不错吧。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 10:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表