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 ......
>>返回讨论的主题
|