导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[willerwang]求助了,一个KEY程序,一个LCD程序如



No.106812
作者:willerwang
邮件:willerwwang@hotmail.com
ID:80351
登陆:1次
文章数:2篇
最后登陆IP:202.121.58.98
最后登陆:2007/6/5 9:38:29
注册:2007/6/5 9:28:57
财富:115
发帖时间:2007/6/5 9:32:50
发贴者IP:202.121.58.98
标题:willerwang:求助了,一个KEY程序,一个LCD程序如何结合在一起!!
摘要:No.106812求助了,一个KEY程序,一个LCD程序如何结合在一起!! [color=#000000][B]用key控制lcd显示 
2个程序如下:
#define LCDCON  *(unsigned long *)0x800002c0
#define PALLSW  *(unsigned long *)0x80000580
#define PALMSW  *(unsigned long *)0x80000540
#define FBADDR  *(unsigned long *)0x80001000
#define SYSCON1         *(unsigned long *)0x80000100

#define LEFTMASK        "\x00\x80\xc0\xe0\xf0\xf8\xfc\xfe"
#define RIGHTMASK       "\xff\x7f\x3f\x1f\x0f\x07\x03\x01"
#define R2MASK          "\x7f\x3f\x1f\x0f\x07\x03\x01\x00"
#define L2MASK          "\x80\xc0\xe0\xf0\xf8\xfc\xfe\xff"

#define FONT_FILE "/bin/hzk"

typedef struct{
      unsigned char id[2];
      long filesize;
      short reserved[2];
      long headsize;
      long infosize;
      long width;
      long height;
      short planes;
      short bits;
      long biCompression;
      long sizeimage;
      long biXpp;
      long biYpp;
      long biclrused;
      long biclrimportant;
}BMPHEAD;

int lcd_setup(unsigned long start_addr, unsigned short width, unsigned short xmax, unsigned short ymax, unsigned short bits_per_pixel)
{

        /* disable LCD first */
        SYSCON1 &= ~0x00001000;

 LCDCON = 0xE60f7c1f;
 PALLSW = 0x76543210;
 PALMSW = 0xFEDCBA98;

        /* setup LCDFRAME  */
 FBADDR = 0x0000000C;
 /* Enable LCD */
 SYSCON1 |= 0x00001000;
        
 return 0;
}

int _lcd_vline(
 unsigned char *fbuf,
 int  x, 
 int  y, 
 int  y1, 
 int  color,
 int  xorm
)
{
 unsigned char *p;
 int tmp;
 
 if (y1   < y){
  tmp = y;
  y = y1;
  y1 = tmp;
 }

 p = fbuf + x * 12 / 8 + y * (320 * 3 * 4 / 8);
   for (; y   <= y1; y++){
   
    if(x&1)
  {
   *p&=0x0f;
   //*p|=0x70;
   *(p+1)&=0x07;
  }
  else
  {
   *p=0x70;
   *(p+1)&=0xf0;
   *(p+1)|=0xf7;
  }
    p += (320 * 3 * 4 / 8);
 }
//   return 0;
}

int lcd_vline(
 short x, 
 short y1, 
 short y2, 
 unsigned char c,
 int xorm
)
{
 return _lcd_vline(
  (unsigned char*)0xc0000000,
  x,
  y1,
  y2,
  c,
  xorm
 );
}

int _lcd_fillrect(
 unsigned char *fbuf,
 int  x, 
 int  y, 
 int  x1, 
 int  y1, 
 int  color
)
{
 // unsigned char *dst;
 int xt, xf; //xmf, xmt;
 // int xi;
 int tmp, w, h;
 
 if (x1   < x){
  tmp = x;
  x = x1;
  x1 = tmp;
 }
 
 if (y1   < y){
  tmp = y;
  y = y1;
  y1 = tmp;
 }
 w  = x1 - x + 1;
 h = y1 - y + 1;
  
    
   xf = x * 12 / 8; 
   xt = (x + w - 1) * 12 / 8;
   for (w += x; x   < w; x++) {
    lcd_vline(x, y, y1, 0, 0);
   }

   return 0;
}

int lcd_fillrect(short x1, short y1, short x2, short y2, int c)
{
 return _lcd_fillrect(
  (unsigned char *)0xc0000000,
  x1,
  y1,
  x2,
  y2,
  c
 );
}

static int lcd_putbigpixel(short x, short y, unsigned char c, int xorm){
 lcd_fillrect(x-2, y-2, x+2, y+2, c);
 return 0;
}

int lcd_ellipse(
 short x, 
 short y, 
 short a,
 short b, 
 unsigned char c, 
 int xorm
)
{
 int wx, wy;
 int thresh;
 int asq = a * a;
 int bsq = b * b;
 int xa, ya;
 
 lcd_putbigpixel(x, y+b, c, xorm);
 lcd_putbigpixel(x, y-b, c, xorm);
 
 wx = 0;
 wy = b;
 xa = 0;
 ya = asq * 2 * b;
 thresh = asq / 4 - asq * b;
 
 for (;;) {
  thresh += xa + bsq;
  
  if (thresh >  = 0) {
   ya -= asq * 2;
   thresh -= ya;
   wy--;
  }
  
  xa += bsq * 2;
  wx++;
  
  if (xa >  = ya)
    break;
  
  
  lcd_putbigpixel(x+wx, y-wy, c, xorm);
  lcd_putbigpixel(x-wx, y-wy, c, xorm);
  lcd_putbigpixel(x+wx, y+wy, c, xorm);
  lcd_putbigpixel(x-wx, y+wy, c, xorm);
 }
 
 lcd_putbigpixel(x+a, y, c, xorm);
 lcd_putbigpixel(x-a, y, c, xorm);
 
 wx = a;
 wy = 0;
 xa = (bsq * a)   <  < 1;
 
 ya = 0;
 thresh = (bsq >  >   2) - bsq * a;
 
 for (;;) {
  thresh += ya + asq;
  
  if (thresh >  = 0) {
   xa -= bsq + bsq;
   thresh = thresh - xa;
   wx--;
  }
  
  ya += asq + asq;
  wy++;
  
  if (ya >   xa)
    break;
   
  lcd_putbigpixel(x+wx, y-wy, c, xorm);
  lcd_putbigpixel(x-wx, y-wy, c, xorm);
  lcd_putbigpixel(x+wx, y+wy, c, xorm);
  lcd_putbigpixel(x-wx, y+wy, c, xorm);
 } 
// return 0;
}

void lcd_clear(void)
{
        {
                unsigned char *base = (unsigned char *)0xc0000000;
                int i;
                for (i = 0; i   < 320 * 240 * 12 /8 ; i++){
                        *base++ = 0x77;
                }
        }
}
// int main()
static int LCD_Driver(void)//_start()
{
 lcd_setup(0xC0000000,240, 240, 320 ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:78531毫秒 查询6次