|
[E.ET的每日总结]器件清单出来了 天 发表于 2005-8-31 1:13:08 |
| 今天电设的器件清单出来了,整个实验室炸开锅。所以今天就没做什么事,猜题,猜题。
极力想做FFT,不过要用Core的话,XC2S200e做不了1024点FFT,只能用S3的。老大又不肯买,不肯做板。虽然也不一定买得到。明天去买买看。本来还想叫Jingjing买好寄过来的类。。。汗。 |
|
[E.ET的每日总结]隔直 天 发表于 2005-8-30 1:54:10 |
| 数字相位仪做了一个礼拜,碰到两个最花时间的傻问题,一个是程序——CS信号,一个是硬件,输入隔直没加对地电容! |
|
[E.ET的每日总结]8.23 天 发表于 2005-8-24 0:44:11 |
| 今天: SPI发送 测量周期 7528程序 会用XCF02配置XC2S200E
决定模拟示波器先缓一下,先做FFT Core,那是杀手锏 |
|
[E.ET的每日总结]8.22 天 发表于 2005-8-22 1:32:50 |
|
今天还算小有成就的
把DDS Core应用的差不多了。实现了多路输出,由单片机输入,给出任意频率正弦波。
接着要测试SPI发送,FFT
明天要完成测频率的任务
还有把信号显示在模拟示波器上的话题,今天开阔了思路。 可以通过内部X轴配合外部Y轴给电压,也可以XY都外部控制。其实XY都外部控制就是VGA了,单色VGA。通过两个DAC控制XY。 不过由于DAC输出的电压只能是正或者只能是负,所以象限的问题有必要考虑。现在想到的解决方法有,再用另外的信号控制Vref的值的正负,可以用MUX。 设都使用8bit DAC,每个象限每个轴256个点,那么整个屏幕就是512x512点。产生一个点的时间算他1us,如果每个点都要扫到,那么整个屏幕需要0.262144秒,3.8Hz。。。不行啊。如果扫完一个点的时间0.1us(DAC10M速度),那么38Hz,还算可以接受吧。况且平时显示的话,是不用满屏的。 |
|
[E.ET的每日总结]8.21 天 发表于 2005-8-21 23:58:45 |
| 时间是越来越紧了
决定明天开始,花四天做一个完整的项目
今天晚上调好了SPI和DDS。没想到这么有效率的,呵呵^_^
原来的SPI有问题是因为连线的抖动,现在换了牢固的线,就一点问题也没有了。
DDS的瓶颈在于DAC,希望明天能用上YL的7528。当然,以后老大肯买更快一点的就更好了。
接下来又空的时候要看各种Core的使用,比如FFT,乘法器,除法器,各种RAM等等。
…… |
|
[E.ET的每日总结]DDS Core 天 发表于 2005-8-15 1:43:25 |
| 在研究Xilinx的DDS Core。
现在已经可以出正弦波了,是从chipscope里面看的,不过一个问题是,他的输出都是有符号数输出,而DAC一般要求无符号数输出,这该怎么办呢?? |
|
[C.程序资源]点阵LCD程序(2) 天 发表于 2005-8-13 23:43:03 |
| #i nclude <hidef.h> /* for EnableInterrupts macro */ #i nclude <MC68HC908GP32.h> /* include peripheral declarations */
#define LCD_DB PTB #define LCD_RS PTA_PTA0 #define LCD_RW PTA_PTA1 #define LCD_EN PTA_PTA2 #define LCD_CS1 PTA_PTA3 #define LCD_CS2 PTA_PTA4 #define LCD_RST PTA_PTA5
const byte logo_pic[]= { 0,0,0,0x40,0x5,0,0,0,0,0,0,0xff,0xff,0,0,0, 0,0,0xe0,0x3,0xc0,0x7,0,0,0,0,0x3c,0,0x2,0x3c,0,0, 0,0,0xe,0,0x22,0xf0,0,0,0,0x80,0x3,0,0x22,0x81,0x1,0, 0,0xe0,0,0,0x2,0x1,0x7,0,0,0x70,0,0,0x20,0x41,0xc,0, 0,0x18,0,0,0,0x38,0x18,0,0,0xcc,0,0xe0,0xf,0x4,0x32,0, 0,0x26,0x1,0x1e,0xf0,0,0x61,0,0,0x13,0xc3,0x1,0,0x83,0xc8,0, 0x80,0xa1,0x30,0,0,0xc,0x84,0x1,0xc0,0x40,0x8,0,0,0x10,0,0x3, 0x40,0,0x6,0xc,0xf0,0x61,0,0x6,0x60,0,0x3,0xff,0xff,0xc7,0x20,0x6, 0x30,0x80,0x81,0xff,0x9f,0xf,0x11,0xc,0x10,0xc0,0xd0,0x3,0,0x1e,0x2,0x9, 0x18,0x40,0xf0,0x3,0x7f,0x3e,0xc6,0x18,0x8,0x20,0x20,0x83,0xff,0xfa,0x25,0x10, 0xc,0x10,0,0xc2,0xc0,0xf3,0x8,0x30,0xc,0x10,0,0xe0,0x80,0xff,0x19,0x20, 0x4,0x8,0,0x1e,0x83,0xe7,0x11,0x20,0x86,0xc,0,0x8,0x72,0xc1,0x13,0x60, 0xee,0xc4,0,0x8,0x7,0xe1,0x23,0x4f,0x9a,0xc5,0x1,0xe8,0,0xbb,0x23,0x40, 0xa2,0x4,0x1,0x18,0x3e,0x9c,0x27,0xc0,0x53,0x4,0,0x80,0xff,0xec,0x47,0xc1, 0x2,0xe2,0,0xe3,0xe0,0x8f,0x4f,0xc0,0x3,0x52,0,0xf2,0xc1,0xdf,0x47,0xc0, 0x3,0xe2,0,0x8c,0x83,0x3d,0x47,0x83,0x3,0x2,0,0xc,0xc2,0x3,0x47,0xc4, 0x3,0xe2,0,0x4,0x3e,0x3,0x47,0x88,0x3,0xa2,0,0xc4,0x3,0x82,0x47,0xc0, 0x3,0xa2,0,0x3c,0,0xde,0x47,0x80,0x2,0x62,0,0x4,0xf8,0xf1,0x47,0xc0, 0x3,0x2,0,0x4,0xff,0xb3,0x47,0xcd,0x2,0x24,0x1,0xc0,0xef,0x1f,0x4f,0x40, 0x2,0xc5,0,0xe2,0x81,0xcd,0x27,0x40,0xc6,0x44,0,0xf3,0x81,0xbc,0x23,0x41, 0xc6,0x8,0,0x1a,0xc1,0x81,0x23,0x62,0xc4,0xa,0x2,0xc,0xdf,0xc0,0x11,0x64, 0x2c,0x10,0x4,0xc4,0xc3,0xe0,0x11,0x20,0xc,0x10,0x4,0x3c,0x80,0xf0,0x8,0x30, 0x8,0x20,0x18,0x44,0xf5,0x7f,0x6c,0x10,0x18,0x40,0x30,0xf0,0xff,0x3f,0x84,0x18, 0x10,0xc0,0xe0,0xec,0xaf,0x1c,0x2,0x9,0x30,0x80,0xc0,0x3f,0xff,0xf,0x1,0xc, 0x60,0,0x83,0x3f,0xf2,0x83,0x4,0x4,0x60,0,0x6,0xfe,0x1,0x60,0x1a,0x6, 0xc0,0,0xa,0,0,0x30,0x2c,0x3,0x80,0x1,0x32,0,0,0xc,0x88,0x1, 0,0xa3,0xc1,0,0,0x83,0xc0,0,0,0x66,0,0xf,0xe0,0x80,0xc0,0, 0,0xec,0x1,0xf0,0x1f,0x44,0x30,0,0,0x58,0,0,0x40,0x88,0x38,0, 0,0x70,0,0,0x84,0x8,0xc,0,0,0xe0,0,0,0x84,0x10,0x7,0, 0,0x80,0x1,0,0x82,0x80,0x3,0,0,0,0x7,0,0x2,0xe0,0,0, 0,0,0x3c,0,0,0x3c,0,0,0,0,0xe0,0x3,0x80,0xf,0,0, 0,0,0,0xff,0xff,0x1,0,0,0,0,0,0xd0,0xb,0,0,0 }; const byte logo_char[]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0xf8,0xff,0x7, 0xc0,0xff,0xff,0xf,0xe0,0xff,0xf,0,0xe0,0x7,0,0,0xc0,0x1,0x4,0, 0xc0,0x1,0x1e,0,0xc0,0x11,0x3e,0,0xc0,0x39,0x1f,0,0xc0,0x39,0xf,0, 0xc0,0x39,0x1e,0,0xc0,0x1,0x1e,0,0xc0,0,0xc,0,0xc0,0,0,0x3, 0xe0,0,0x80,0x7,0xe0,0x1,0x80,0x3,0xe0,0xf,0xe8,0x1,0xc0,0xff,0x7f,0, 0,0xff,0x1f,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0x4,0,0,0x80,0x1f,0,0,0xf0,0x1f,0,0xc0,0xff,0x1, 0,0xe8,0xf,0,0,0xe,0,0,0xb0,0x7,0,0,0x70,0,0xe,0, 0x60,0,0x1f,0,0,0x80,0xf,0,0,0xc0,0x7,0,0,0xcc,0x3,0, 0xc0,0xfe,0xf1,0x7,0x70,0x38,0xfc,0x3,0x70,0x90,0x3c,0,0x38,0xc8,0x30,0, 0x3c,0xfe,0xf8,0x1,0xbe,0x3f,0xf8,0,0xfc,0x4,0x60,0,0xf4,0,0x30,0, 0x60,0x7e,0x1c,0x18,0x20,0xe6,0xc,0xe,0,0xd3,0xfe,0x3,0,0x39,0xfc,0, 0,0x3c,0,0,0,0x7c,0,0,0,0xe0,0,0,0,0xc0,0,0, 0,0xc0,0,0,0,0xc0,0x1,0,0,0x80,0x1,0,0,0x80,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0x3,0,0,0x80,0x3,0, 0,0x80,0x3,0x7,0,0xc0,0xc3,0x7,0,0xc0,0xf1,0x1,0,0xc0,0xff,0, 0,0xe0,0x7f,0,0,0xfe,0x3f,0,0xc0,0xff,0xf,0,0xe0,0xff,0x1,0, 0xf0,0xc3,0x1,0,0x60,0xc0,0x1,0,0,0xc0,0x71,0,0,0xc0,0xf1,0, 0,0xc0,0xe0,0x1,0,0,0xe0,0x3,0,0,0xc0,0x1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa0,0x1,0,0,0xfc,0x1,0,0,0xfc,0,0,0,0x3c,0,0, 0xf8,0x3f,0,0,0xf8,0x39,0x40,0,0x10,0x19,0xe6,0,0xf8,0x33,0x67,0x30, 0x78,0x19,0x67,0x70,0xd8,0x17,0x67,0x38,0xf8,0x1b,0x73,0x18,0xf8,0x19,0x7f,0x1e, 0xf8,0x9e,0xff,0xf,0xd8,0x99,0xf7,0x3,0xcc,0x19,0x73,0,0xec,0x19,0x60,0, 0x7c,0x18,0x70,0,0x3c,0x38,0,0,0,0x38,0,0,0,0x38,0,0, 0,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; const byte logo_start[]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0x80,0,0,0,0,0,0,0,0xf0,0,0,0,0,0,0, 0,0x7e,0,0,0,0,0,0,0x80,0x1f,0,0,0,0,0,0, 0x80,0x11,0,0,0,0,0,0,0x80,0x10,0,0,0,0,0,0, 0x80,0x18,0,0,0,0,0,0,0x80,0xf,0,0,0,0,0,0, 0x80,0x7,0,0,0,0,0,0,0,0x70,0,0,0,0,0,0, 0,0xfc,0,0,0,0,0,0,0,0x8c,0,0,0,0,0,0, 0,0x82,0,0,0,0,0,0,0,0xc2,0,0,0,0,0,0, 0,0x7e,0,0,0,0,0,0,0,0x3e,0,0,0,0,0,0, 0,0,0,0,0xfe,0x7f,0,0,0,0,0,0,0xfe,0x7f,0,0, 0,0xfe,0,0,0xfe,0x7f,0,0,0,0xfe,0,0,0x3e,0,0,0, 0,0x60,0,0,0xfc,0,0,0,0,0x18,0,0,0xf0,0x7,0,0, 0,0xfe,0,0,0x80,0xf,0,0,0,0xfe,0,0,0,0xe,0,0, 0,0x70,0,0,0x80,0xf,0,0,0,0x3c,0,0,0xe0,0x7,0,0, 0,0xe,0,0,0xf8,0,0,0,0,0x2,0,0,0x3e,0,0,0, 0,0x70,0,0,0xfe,0x7f,0,0,0,0xfc,0,0,0xfe,0x7f,0,0, 0,0x9c,0,0,0xfe,0x7f,0,0,0,0x92,0,0,0,0,0,0, 0,0x9a,0,0,0,0xf,0,0,0,0x5e,0,0,0xc0,0x3f,0,0, 0,0x84,0,0,0xc0,0x3f,0,0,0,0xf0,0,0,0xe0,0x70,0,0, 0,0x7e,0,0,0x60,0x60,0,0,0,0xe,0,0,0x60,0x60,0,0, 0,0x4,0,0,0x60,0x60,0,0,0,0x6,0,0,0xe0,0x70,0,0, 0,0x70,0,0,0xc0,0x3f,0,0,0,0xfc,0,0,0xc0,0x3f,0,0, 0,0x9c,0,0,0,0xf,0,0,0,0x92,0,0,0,0,0,0, 0,0x9a,0,0,0,0,0,0,0,0x5e,0,0,0x60,0,0,0, 0,0x4,0,0,0xfc,0x3f,0,0,0,0xf0,0,0,0xfc,0x7f,0,0, 0,0xfc,0,0,0xfc,0x7f,0,0,0,0x8c,0,0,0x60,0x60,0,0, 0,0x82,0,0,0x60,0x60,0,0,0,0xc2,0,0,0x60,0x60,0,0, 0,0xf2,0,0,0,0xf,0,0,0,0x7e,0,0,0xc0,0x3f,0,0, 0xc0,0xf,0,0,0xc0,0x3f,0,0,0xc0,0x1,0,0,0xe0,0x70,0,0, 0,0,0,0,0x60,0x60,0,0,0,0,0,0,0x60,0x60,0,0, 0,0x80,0,0,0x60,0x60,0,0,0,0xf0,0,0,0xe0,0x70,0,0, 0,0xfe,0,0,0xc0,0x3f,0,0,0x80,0x8f,0,0,0xc0,0x3f,0,0, 0x80,0x89,0,0,0,0xf,0,0,0x80,0xc8,0,0,0,0,0,0, 0x80,0x78,0,0,0,0,0,0,0x80,0x3f,0,0,0xe0,0x7f,0,0, 0x80,0x7,0,0,0xe0,0x7f,0,0,0,0,0x3,0,0xe0,0x7f,0,0, 0,0xfe,0x3,0,0xc0,0,0,0,0,0xfe,0,0,0xe0,0,0,0, 0,0x70,0,0,0xe0,0,0,0,0,0x38,0,0,0xe0,0,0,0, 0,0xe,0,0,0,0xf,0,0,0,0x6,0,0,0xc0,0x3f,0,0, 0,0x2,0,0,0xc0,0x3f,0,0,0,0,0,0,0xe0,0x70,0,0, 0,0,0,0,0x60,0x60,0,0,0,0,0,0,0x60,0x60,0,0, 0,0,0,0,0x60,0x60,0,0,0,0,0,0,0xe0,0x70,0,0, 0,0,0,0,0xc0,0x3f,0,0,0,0,0,0,0xc0,0x3f,0,0, 0,0,0,0,0,0xf,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0xff,0x7f,0,0, 0,0,0,0,0xff,0x7f,0,0,0,0,0,0,0xff,0x7f,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0x38,0,0,0,0,0,0,0xe0,0x7c,0,0, 0,0,0,0,0x60,0x7e,0,0,0,0,0,0,0x60,0x66,0,0, 0,0,0,0,0x60,0x66,0,0,0,0,0,0,0x60,0x26,0,0, 0,0,0,0,0xe0,0x7f,0,0,0,0,0,0,0xc0,0x7f,0,0, 0,0,0,0,0xc0,0x7f,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; void delay(byte time) { while(time>0) { time--; } } /******************************************************** ------------------------LCD命令函数---------------------- 功能描述:被调用,用来执行对LCD的操作 传入参数:flag,data 参数设置:flag 1------数据 0------指令 data 为指令或数据的内容 *********************************************************/ void lcd_cmd(byte flag,byte data) { LCD_EN=0; if(flag==0x0) { LCD_RS=0; } else { LCD_RS=1; } LCD_RW=0; LCD_DB=data; //delay(100); _asm NOP _asm NOP LCD_EN=1; //LCD开始接受数据,置使能位为1 _asm NOP //等待 _asm NOP delay(10); LCD_EN=0; //LCD结束接受数据,置使能位为0 //LCD_RW=1; //LCD_RS=1; asm //等待40us { PSHH PSHX PSHA LDHX #$0040 LOOP: DBNZX LOOP PULA PULX PULH } } void lcd_reset() { LCD_RST=0; delay(255); delay(255); LCD_RST=1; delay(255); delay(255); } void lcd_clr() { byte i,j; LCD_CS1=1; LCD_CS2=1; delay(10); for(i=0xb8;i<0xc0;i++) { lcd_cmd(0x0,i); lcd_cmd(0x0,0x40); for(j=0;j<0x40;j++) { lcd_cmd(0x1,0xff); } } delay(10); LCD_CS1=0; LCD_CS2=0; delay(10); } void lcd_start() { lcd_reset(); lcd_cmd(0x0,0x3e); lcd_cmd(0x0,0xc0); lcd_cmd(0x0,0x3f); lcd_clr(); } void lcd_clr_from_left() { byte line,col; LCD_CS1=1; LCD_CS2=0; for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,0x00); } asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08FF ClrLCD_2MS: AIX #-1 CPHX #0 BNE ClrLCD_2MS } } LCD_CS1=0; LCD_CS2=1; for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,0x00); } asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08ff ClrLCD_2MS2: AIX #-1 CPHX #0 BNE ClrLCD_2MS2 } } LCD_CS1=0; LCD_CS2=0; } void lcd_clr_from_center() { byte line,col; byte temp=63; for(col=0x40;col<0x80;col++) { LCD_CS1=1; LCD_CS2=0; for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col+temp); lcd_cmd(0x1,0x00); } temp=temp-2; LCD_CS1=0; LCD_CS2=1; for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,0x00); } asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08FF ClrLCD_2MS: AIX #-1 CPHX #0 BNE ClrLCD_2MS } } LCD_CS1=0; LCD_CS2=0; } void lcd_display_logo_pic() { byte line,col; word i=0; LCD_CS1=1; LCD_CS2=0; for(col=0x60;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_pic[i]); i++; } } LCD_CS1=0; LCD_CS2=1; //i=256 for(col=0x40;col<0x60;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_pic[i]); i++; } } LCD_CS1=0; LCD_CS2=0; } void lcd_display_logo_char() { byte line,col; word i=0; LCD_CS1=1; LCD_CS2=0; for(col=0x40;col<0x80;col++) { for(line=0xba;line<0xbe;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_char[i]); i++; } } LCD_CS1=0; LCD_CS2=1; //i=256 for(col=0x40;col<0x80;col++) { for(line=0xba;line<0xbe;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_char[i]); i++; } } LCD_CS1=0; LCD_CS2=0; } void lcd_display_logo_start() { byte line,col; word i=0; LCD_CS1=1; LCD_CS2=0; for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_start[i]); i++; } } LCD_CS1=0; LCD_CS2=1; //i=256 for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_start[i]); i++; } } LCD_CS1=0; LCD_CS2=0; } /******************************************************** ------------------------LCD显示函数---------------------- 功能描述:对于特定的行和列显示特定的字符 传入参数:line,col,code 参数设置:line-----------取值范围为0~3,即只有四行 col------------取值范围为0~7,即只有八列 code-----------为数组,是用来显示的内容 *********************************************************/ void lcd_display(byte line,byte col,byte code[32]) { byte i; //byte temp; line=0xb8+line*2; if(col<4) { LCD_CS1=1; LCD_CS2=0; col=col*16+0x40; } else { LCD_CS1=0; LCD_CS2=1; col=(col-4)*16+0x40; } lcd_cmd(0x0,line); lcd_cmd(0x,col); for (i=0;i<32;i++) { if (i==16) { lcd_cmd(0x0,line+1); lcd_cmd(0x0,col); } //temp=~code[i]; //lcd_cmd(0x1,temp); lcd_cmd(0x1,code[i]); } LCD_CS1=0; LCD_CS2=0; } void main(void) { //SOPT_COPE=0; //禁止看门狗 CONFIG1_COPD=1; //禁止看门狗 DDRB=0xff; //B口为输出 DDRA=0b00111111; lcd_start(); //lcd_clr_from_left(); lcd_clr_from_center(); //lcd_display_logo_pic(); //lcd_display_logo_char(); lcd_display_logo_start(); for(;;); }
|
|
[C.程序资源]点阵LCD程序(1) 天 发表于 2005-8-13 23:34:30 |
| #i nclude <hidef.h> /* for EnableInterrupts macro */ #i nclude <MC68HC908GP32.h> /* include peripheral declarations */
#define LCD_DB PTB #define LCD_RS PTA_PTA0 #define LCD_RW PTA_PTA1 #define LCD_EN PTA_PTA2 #define LCD_CS1 PTA_PTA3 #define LCD_CS2 PTA_PTA4 #define LCD_RST PTA_PTA5
const byte logo_GT60[]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0x1c,0,0,0,0,0,0,0xc0,0xff,0x1,0,0, 0,0,0,0xf8,0xc1,0x7,0,0,0,0,0,0x1e,0,0x1e,0,0, 0,0,0x80,0xf,0,0x78,0,0,0,0,0xc0,0x3,0,0xe0,0,0, 0,0,0xe0,0xf1,0x3,0xc0,0x1,0,0,0,0xf0,0xfc,0x7,0x80,0x3,0, 0,0,0x78,0x1e,0xe,0,0x7,0,0,0,0x3c,0x7,0xf,0,0xe,0, 0,0,0x1e,0x83,0x7,0,0xc,0,0,0,0xf,0xe3,0x1,0,0x1c,0, 0,0x80,0x7,0xe7,0xf,0,0x38,0,0,0x80,0x7,0xe6,0xf,0,0x38,0, 0,0xc0,0xc3,0,0,0,0x70,0,0,0xe0,0xc3,0,0x70,0xff,0x71,0, 0,0xe0,0x61,0,0x70,0xff,0x71,0,0,0xf0,0xe1,0xff,0x1,0,0x60,0, 0,0xf0,0xf1,0xff,0x81,0xff,0x60,0,0,0xf0,0x30,0,0xc0,0xff,0x60,0, 0,0x78,0x18,0,0xc0,0x1,0xe0,0,0,0x78,0x98,0xf,0xe0,0,0xe0,0, 0,0x78,0xe0,0x1f,0xe0,0x1,0xe0,0,0,0x3c,0xf8,0x39,0xe0,0x7f,0xe0,0, 0,0x3c,0xdc,0x38,0xc0,0x3f,0xe0,0,0,0x3c,0xc6,0x3c,0,0,0xe0,0, 0,0x3c,0x86,0x1f,0xf0,0x18,0xe0,0,0,0x3e,0x30,0x7,0xf8,0x19,0xe0,0, 0,0x1e,0xfe,0,0x9c,0x1b,0xe0,0,0,0x1e,0xcf,0x3,0x1c,0x1f,0xe0,0, 0,0x9e,0x3,0x7,0x8,0xe,0xe0,0,0,0x9e,0x1,0x7,0,0,0xe0,0, 0,0x9f,0x83,0xc3,0xfd,0x7,0x70,0,0,0xf,0xff,0xc1,0xfd,0x7,0x70,0, 0,0xf,0x7c,0,0,0,0x70,0,0,0x8f,0x3,0,0xfc,0,0x70,0, 0,0xcf,0x7,0,0xff,0x1,0x38,0,0,0xdf,0x7,0x80,0x87,0x1,0x38,0, 0,0x9e,0x7,0x80,0xc3,0x1,0x38,0,0,0x9e,0x7,0xf8,0xff,0,0x1c,0, 0,0xbe,0x7,0xf8,0xff,0,0x1c,0,0,0x3e,0xf,0,0,0,0xe,0, 0,0x1c,0xf,0,0x7,0,0xf,0,0,0,0x1e,0xc0,0x3f,0,0x7,0, 0,0,0x1e,0xe0,0x7f,0x80,0x3,0,0,0,0x3c,0x70,0x66,0xc0,0x3,0, 0,0,0x3c,0x70,0x73,0xe0,0x1,0,0,0,0x78,0xe0,0x39,0xf0,0,0, 0,0,0xf0,0xc0,0x1c,0x78,0,0,0,0,0xe0,0x1,0,0x3e,0,0, 0,0,0xc0,0x7,0x80,0xf,0,0,0,0,0x80,0x7f,0xf8,0x3,0,0, 0,0,0,0xfe,0x7f,0,0,0,0,0,0,0xf0,0xf,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; /*freescal*/ const byte logo_freescal[]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0x18,0,0,0,0,0,0,0,0x1c,0, 0,0,0,0,0,0x8,0x3e,0,0,0,0,0,0,0xc,0x1e,0, 0,0,0,0,0,0x1c,0x1f,0,0,0,0,0,0,0x3e,0xf,0, 0,0,0,0,0,0x3e,0x7,0,0,0,0,0,0x80,0x1f,0x2,0, 0,0,0,0x8,0,0x4f,0,0,0,0,0,0xc,0,0x67,0,0, 0,0,0xc,0x1e,0,0xe6,0,0,0,0,0xf,0x1e,0x60,0xf0,0x1,0, 0,0xe0,0x83,0x1f,0x60,0xf8,0,0,0,0xfc,0x81,0xf,0xf8,0x7c,0,0, 0,0x1c,0x81,0x47,0xf8,0x78,0,0,0,0x8,0x81,0x67,0x7c,0x30,0,0, 0,0x84,0x1,0xf3,0x7c,0,0,0,0,0xfc,0,0xf8,0x3c,0,0,0, 0,0x7c,0,0x78,0x18,0x2,0,0,0,0,0,0x7c,0,0x7,0,0, 0,0xe0,0,0x3c,0x81,0xf,0,0,0,0xf8,0x1,0xb8,0xc3,0x7,0,0, 0,0x18,0x1,0x90,0xe7,0x7,0,0,0,0x4,0x1,0xc0,0xe7,0x1,0,0, 0,0x84,0x1,0xe0,0xc3,0x1,0,0,0,0xfc,0,0xf0,0x1,0,0,0, 0,0x7c,0,0xe0,0x1,0,0,0,0,0,0,0xc0,0,0,0,0, 0,0,0,0,0,0,0x70,0,0,0xfc,0x1,0,0,0xc,0x7e,0, 0,0xfc,0x1,0,0,0xcc,0x7f,0,0,0xc0,0,0,0,0xfe,0x7f,0, 0,0x30,0,0,0x80,0xff,0x7,0,0,0xfc,0x1,0,0x80,0xff,0x1,0, 0,0xbc,0x1,0,0xc0,0xf,0,0,0,0xe0,0,0,0xc0,0xd,0,0, 0,0x70,0,0,0xc0,0xd,0x70,0,0,0x1c,0,0,0xc0,0,0x7e,0, 0,0xc,0,0,0,0xe0,0x7f,0,0,0xe0,0x1,0,0,0xfe,0x3f,0, 0,0xf8,0x1,0,0,0xfe,0x3,0,0,0x3c,0x1,0,0,0x78,0,0, 0,0x24,0x1,0,0,0x38,0,0,0,0x24,0x1,0,0,0x1c,0,0, 0,0x3c,0x1,0,0,0xe,0x7,0,0,0xbc,0,0,0,0xc0,0xf,0, 0,0x8,0x1,0,0,0xf0,0x1f,0,0,0xe0,0x1,0,0,0xf8,0x3f,0, 0,0xfc,0,0,0,0xb8,0x79,0,0,0x1c,0,0,0,0x9c,0x71,0, 0,0x8,0,0,0,0x8e,0x79,0,0,0xc,0,0,0,0x8e,0x39,0, 0,0xc,0,0,0,0x9c,0x1d,0,0,0xe0,0x1,0,0,0xb8,0x1d,0, 0,0xf8,0x1,0,0,0xf0,0xd,0,0,0x3c,0x1,0,0,0x60,0,0, 0,0x24,0x1,0,0,0,0,0,0,0x24,0x1,0,0,0,0xf,0, 0,0x3c,0x1,0,0,0xe0,0xf,0,0,0xbc,0,0,0,0xf0,0x1f,0, 0,0x8,0,0,0,0xf8,0x3f,0,0,0xe0,0x1,0,0,0xb8,0x79,0, 0,0xf8,0x1,0,0,0x9c,0x71,0,0,0x18,0x1,0,0,0x8e,0x79,0, 0,0x4,0x1,0,0,0x9e,0x39,0,0,0x84,0x1,0,0,0xbc,0x1d,0, 0,0xe4,0x1,0,0,0xf8,0xd,0,0,0xfc,0,0,0,0xf0,0xd,0, 0x80,0x1f,0x1,0,0,0x60,0,0,0x80,0xe3,0x1,0,0,0,0xc,0, 0,0xfc,0x1,0,0,0x60,0x1c,0,0x80,0x1f,0x1,0,0,0xf8,0x38,0, 0x80,0xb,0x1,0,0,0xfc,0x79,0,0,0x84,0x1,0,0,0xfc,0x71,0, 0,0xfc,0,0,0,0xdc,0x7b,0,0,0x7c,0,0,0,0x8e,0x3f,0, 0,0x8,0,0,0,0x9e,0x3f,0,0,0,0x8,0,0,0x9c,0x1f,0, 0,0xfc,0xf,0,0,0x1c,0xf,0,0,0xfc,0x7,0,0,0x18,0x6,0, 0,0x80,0x1,0,0,0x10,0,0,0,0xe0,0,0,0,0xc0,0xf,0, 0,0x70,0,0,0,0xf0,0x1f,0,0,0x1c,0,0,0,0xf8,0x3f,0, 0,0xc,0,0,0,0xf8,0x7c,0,0,0x4,0,0,0,0x3c,0x78,0, 0,0,0,0,0,0x1c,0x78,0,0,0,0,0,0,0x1e,0x38,0, 0,0,0,0,0,0x1e,0x1c,0,0,0,0,0,0,0x1c,0x1c,0, 0,0,0,0,0,0x38,0xc,0,0,0,0,0,0,0x30,0,0, 0,0,0,0,0,0,0xe,0,0,0,0,0,0,0,0x1f,0, 0,0,0,0,0,0xb0,0x3f,0,0,0,0,0,0,0xbc,0x3f,0, 0,0,0,0,0,0xdc,0x7f,0,0,0,0,0,0,0xcc,0x79,0, 0,0,0,0,0,0xce,0x39,0,0,0,0,0,0,0xce,0x1c,0, 0,0,0,0,0,0xdc,0x3f,0,0,0,0,0,0,0xfc,0x7f,0, 0,0,0,0,0,0xf8,0x7f,0,0,0,0,0,0,0x78,0,0, 0,0,0,0,0,0,0x60,0,0,0,0,0,0,0x80,0x7f,0, 0,0,0,0,0,0xf8,0x7f,0,0,0,0,0,0xc0,0xff,0x7f,0, 0,0,0,0,0xc0,0xff,0x3,0,0,0,0,0,0xc0,0x1f,0,0, 0,0,0,0,0xc0,0x1,0x6,0,0,0,0,0,0,0xe0,0x1f,0, 0,0,0,0,0,0xf0,0x1f,0,0,0,0,0,0,0xf8,0x3f,0, 0,0,0,0,0,0xbc,0x39,0,0,0,0,0,0,0x9c,0x71,0, 0,0,0,0,0,0x8e,0x79,0,0,0,0,0,0,0x8e,0x79,0, 0,0,0,0,0,0x9c,0x3d,0,0,0,0,0,0,0xfc,0x1d,0, 0,0,0,0,0,0xf8,0xd,0,0,0,0,0,0,0xe0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; /*Motolora*/ const byte logo_moto[]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0x7e,0,0, 0,0,0,0,0xc0,0x81,0x3,0,0,0,0,0,0x60,0,0x6,0, 0,0,0,0,0x30,0,0xb,0,0,0,0,0,0x18,0xc0,0x11,0, 0,0,0,0,0xc,0x38,0x10,0,0,0,0x6,0,0x84,0x1f,0x20,0, 0,0x80,0x7,0,0xf4,0xf,0x20,0,0,0xf0,0x1,0,0x82,0x1f,0x40,0, 0,0xfe,0,0,0x2,0x3c,0x40,0,0,0x8e,0,0,0x2,0xe0,0x40,0, 0,0x84,0,0,0x2,0x78,0x40,0,0,0xc2,0,0,0x82,0x1f,0x40,0, 0,0x7e,0,0,0xf4,0xf,0x20,0,0,0x3e,0,0,0x84,0x1f,0x20,0, 0,0,0,0,0x8,0x3e,0x10,0,0,0x70,0,0,0x8,0xe0,0x10,0, 0,0xfc,0,0,0x10,0,0xb,0,0,0x8c,0,0,0x60,0,0x6,0, 0,0x82,0,0,0xc0,0x81,0x1,0,0,0xc2,0,0,0,0x7e,0,0, 0,0x7e,0,0,0,0,0,0,0,0x3e,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xfe,0,0,0,0,0,0,0,0xfe,0,0,0,0,0,0, 0,0x60,0,0,0,0,0,0,0,0x18,0,0,0,0xe0,0,0, 0,0xfe,0,0,0,0xf8,0,0,0,0xde,0,0,0,0x7e,0,0, 0,0x70,0,0,0,0x1f,0,0,0,0x38,0,0,0,0xff,0,0, 0,0xe,0,0,0,0xff,0,0,0,0x6,0,0,0,0x78,0,0, 0,0xf0,0,0,0,0x38,0,0,0,0xfc,0,0,0,0xdc,0,0, 0,0x9e,0,0,0,0xff,0,0,0,0x92,0,0,0,0xff,0,0, 0,0x92,0,0,0,0x1f,0,0,0,0x9e,0,0,0,0,0,0, 0,0x5e,0,0,0,0x38,0,0,0,0x84,0,0,0,0x7c,0,0, 0,0xf0,0,0,0,0xfe,0,0,0,0x7e,0,0,0,0xee,0,0, 0,0xe,0,0,0,0xc7,0,0,0,0x4,0,0,0,0xc3,0,0, 0,0x6,0,0,0,0x67,0,0,0,0x6,0,0,0,0x7e,0,0, 0,0xf0,0,0,0,0x3e,0,0,0,0xfc,0,0,0,0x1c,0,0, 0,0x9e,0,0,0,0,0,0,0,0x92,0,0,0,0x6,0,0, 0,0x92,0,0,0,0xe7,0,0,0,0x9e,0,0,0,0xff,0,0, 0,0x5e,0,0,0,0xff,0,0,0,0x4,0,0,0,0x1f,0,0, 0,0xf0,0,0,0,0x7,0,0,0,0xfc,0,0,0,0x7,0,0, 0,0x8c,0,0,0,0x7,0,0,0,0x82,0,0,0,0x3b,0,0, 0,0xc2,0,0,0,0x7c,0,0,0,0xf2,0,0,0,0xfe,0,0, 0,0x7e,0,0,0,0xee,0,0,0xc0,0x8f,0,0,0,0xc7,0,0, 0xc0,0xf1,0,0,0,0xc3,0,0,0,0xfe,0,0,0,0xe7,0,0, 0xc0,0x8f,0,0,0,0x7e,0,0,0xc0,0x85,0,0,0,0x7e,0,0, 0,0xc2,0,0,0,0x3c,0,0,0,0x7e,0,0,0,0xc0,0,0, 0,0x3e,0,0,0,0xf8,0,0,0,0x4,0,0,0,0xff,0,0, 0,0,0x4,0,0,0x3f,0,0,0,0xfe,0x7,0,0,0x37,0,0, 0,0xfe,0x3,0,0,0x33,0,0,0,0xc0,0,0,0,0x73,0,0, 0,0x70,0,0,0,0xfb,0,0,0,0x38,0,0,0,0xff,0,0, 0,0xe,0,0,0,0xce,0,0,0,0x6,0,0,0,0,0,0, 0,0x2,0,0,0,0x38,0,0,0,0,0,0,0,0x7c,0,0, 0,0,0,0,0,0xfe,0,0,0,0,0,0,0,0xe6,0,0, 0,0,0,0,0,0xc3,0,0,0,0,0,0,0,0xc7,0,0, 0,0,0,0,0,0x67,0,0,0,0,0,0,0,0x7e,0,0, 0,0,0,0,0,0x3e,0,0,0,0,0,0,0,0x98,0,0, 0,0,0,0,0,0xe0,0,0,0,0,0,0,0,0xfc,0,0, 0,0,0,0,0,0xff,0,0,0,0,0,0,0,0xdf,0,0, 0,0,0,0,0,0xc7,0,0,0,0,0,0,0,0xc0,0,0, 0,0,0,0,0,0xc0,0,0,0,0,0,0,0,0x40,0,0, 0,0,0,0,0,0x80,0,0,0,0,0,0,0,0xe0,0,0, 0,0,0,0,0,0x78,0,0,0,0,0,0,0,0x3c,0,0, 0,0,0,0,0,0x2f,0,0,0,0,0,0,0,0x27,0,0, 0,0,0,0,0,0x7f,0,0,0,0,0,0,0,0xff,0,0, 0,0,0,0,0,0xf8,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; void delay(byte time) { while(time>0) { time--; } } /******************************************************** ------------------------LCD命令函数---------------------- 功能描述:被调用,用来执行对LCD的操作 传入参数:flag,data 参数设置:flag 1------数据 0------指令 data 为指令或数据的内容 *********************************************************/ void lcd_cmd(byte flag,byte data) { LCD_EN=0; if(flag==0x0) { LCD_RS=0; } else { LCD_RS=1; } LCD_RW=0; LCD_DB=data; //delay(100); _asm NOP _asm NOP LCD_EN=1; //LCD开始接受数据,置使能位为1 _asm NOP //等待 _asm NOP delay(10); LCD_EN=0; //LCD结束接受数据,置使能位为0 //LCD_RW=1; //LCD_RS=1; asm //等待40us { PSHH PSHX PSHA LDHX #$0040 LOOP: DBNZX LOOP PULA PULX PULH } } void lcd_reset() { LCD_RST=0; delay(255); delay(255); LCD_RST=1; delay(255); delay(255); } void lcd_clr() { byte i,j; LCD_CS1=1; LCD_CS2=1; delay(10); for(i=0xb8;i<0xc0;i++) { lcd_cmd(0x0,i); lcd_cmd(0x0,0x40); for(j=0;j<0x40;j++) { lcd_cmd(0x1,0xff); } } delay(10); LCD_CS1=0; LCD_CS2=0; delay(10); } void lcd_clr_from_left() { byte line,col; LCD_CS1=1; LCD_CS2=0; for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,0x00); } asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08FF ClrLCD_2MS: AIX #-1 CPHX #0 BNE ClrLCD_2MS } } LCD_CS1=0; LCD_CS2=1; for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,0x00); } asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08ff ClrLCD_2MS2: AIX #-1 CPHX #0 BNE ClrLCD_2MS2 } } LCD_CS1=0; LCD_CS2=0; } void lcd_clr_from_center() { byte line,col; byte temp=63; for(col=0x40;col<0x80;col++) { LCD_CS1=1; LCD_CS2=0; for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col+temp); lcd_cmd(0x1,0x00); } temp=temp-2; LCD_CS1=0; LCD_CS2=1; for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,0x00); } asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08FF ClrLCD_2MS: AIX #-1 CPHX #0 BNE ClrLCD_2MS } } LCD_CS1=0; LCD_CS2=0; } void lcd_display_logo_6464()/*64×64*/ { byte line,col; word i=0; LCD_CS1=1; LCD_CS2=0; for(col=0x60;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_GT60[i]); i++; } } LCD_CS1=0; LCD_CS2=1; //i=256 for(col=0x40;col<0x60;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo_GT60[i]); i++; } } LCD_CS1=0; LCD_CS2=0; } void lcd_display_logo_12864(byte logo[])/*128×64*/ { byte line,col; word i=0; LCD_CS1=1; LCD_CS2=0; for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo[i]); i++; } } LCD_CS1=0; LCD_CS2=1; //i=256 for(col=0x40;col<0x80;col++) { for(line=0xb8;line<0xc0;line++) { lcd_cmd(0x0,line); lcd_cmd(0x0,col); lcd_cmd(0x1,logo[i]); i++; } } LCD_CS1=0; LCD_CS2=0; } /******************************************************** ------------------------LCD显示函数---------------------- 功能描述:对于特定的行和列显示特定的字符 传入参数:line,col,code 参数设置:line-----------取值范围为0~3,即只有四行 col------------取值范围为0~7,即只有八列 code-----------为数组,是用来显示的内容 *********************************************************/ void lcd_display(byte line,byte col,byte code[32]) { byte i; //byte temp; line=0xb8+line*2; if(col<4) { LCD_CS1=1; LCD_CS2=0; col=col*16+0x40; } else { LCD_CS1=0; LCD_CS2=1; col=(col-4)*16+0x40; } lcd_cmd(0x0,line); lcd_cmd(0x,col); for (i=0;i<32;i++) { if (i==16) { lcd_cmd(0x0,line+1); lcd_cmd(0x0,col); } //temp=~code[i]; //lcd_cmd(0x1,temp); lcd_cmd(0x1,code[i]); } LCD_CS1=0; LCD_CS2=0; } void lcd_start() { byte i; lcd_reset(); lcd_cmd(0x0,0x3e); lcd_cmd(0x0,0xc0); lcd_cmd(0x0,0x3f); lcd_clr(); lcd_clr_from_center(); lcd_display_logo_6464(); for(i=0;i<250;i++) { asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08FF ClrLCD_2MS: AIX #-1 CPHX #0 BNE ClrLCD_2MS } } lcd_clr_from_center(); lcd_display_logo_12864(logo_moto); for(i=0;i<250;i++) { asm //等待清屏完毕,等待时间>1.6ms { LDHX #$08FF ClrLCD_2MS2: AIX #-1 CPHX #0 BNE ClrLCD_2MS2 } } lcd_clr_from_left(); lcd_display_logo_12864(logo_freescal); } void main(void) { //SOPT_COPE=0; //禁止看门狗 CONFIG1_COPD=1; //禁止看门狗 DDRB=0xff; //B口为输出 DDRA=0b00111111; lcd_start(); //lcd_clr_from_left(); //lcd_display_logo_12864(logo_moto); for(;;); }
|
|
[D.其他其他]LCD点阵 天 发表于 2005-8-13 23:22:23 |
| 今天写了几个图形的点阵程序,
一切顺利
^_^
现在我的LCD可以显示图像了
哈哈
不过,过程还是一波三折
首先是不会提取图像的点
虽然小麒把一个图像的二进制文件给了我
but全是0和1
完全不能用
于是,我傻乎乎的自己给这些个0,1加上头标,
整整64×64个点
也就是64×8=512个字节
眼睛看花掉
但还是咬咬牙,坚持住
或许,本不应该如此“固执”
结果等我把512个字节标完(标到我眼发酸,手发麻)
发现小麒给的数据是从MSB到LSB的
我要求的数据是从LSB到MSB
当场暴晕
@_@
于是打定主意上网找软件
通过楼上LY帮忙
找到一款能把图片的数据读出的软件
拿下来一试
又是一阵晕
这个软件的输出还是不符合要求
输出跟小麒给的数据一样
都是是从MSB到LSB的
无奈
……
一气之下
干脆自己用VC写了个转换程序
哈哈
顺利通过编译
拿来图片一试
效果非常好
^_^
强悍
现在,只要是图片(前提是,黑白的,尺寸<=128×64)
都能显示在我的LCD上了(做好的图片,只要5分钟就能显示)
晚上一时性起
一口气写了几个图片的程序
一个字
爽
果然是自己写的程序
用得舒服
用得放心
^_^
写完图片程序
顺便把触摸屏的算法改进了一下
现在的触摸屏已经反应灵敏,基本无误判了 |
|
[C.程序资源]LCD12864 天 发表于 2005-8-12 23:31:56 |
| #i nclude <hidef.h> /* for EnableInterrupts macro */ #i nclude <MC68HC908GP32.h> /* include peripheral declarations */
#define LCD_DB PTB #define LCD_RS PTA_PTA0 #define LCD_RW PTA_PTA1 #define LCD_EN PTA_PTA2 #define LCD_CS1 PTA_PTA3 #define LCD_CS2 PTA_PTA4 #define LCD_RST PTA_PTA5 byte code_0[]= {/*同 C4512 */ 0x00,0xFE,0x02,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x9A,0x12,0x02,0xFF,0x02,0x00, 0x00,0xFF,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x08,0x1F,0x40,0x80,0x7F,0x00,0x00 }; byte code_1[]= {/*济 C2835 */ 0x10,0x22,0x64,0x8C,0x20,0xE4,0x24,0xEC,0x15,0xE6,0x14,0xEC,0x64,0xA6,0x14,0x00, 0x04,0x04,0xFE,0x01,0x82,0x7D,0x2A,0x2B,0x28,0x2B,0x28,0x2B,0xFD,0x00,0x01,0x00 }; byte code_2[]= {/*大 C2083 */ 0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x30,0x20,0x00, 0x00,0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x10,0x20,0x60,0x20,0x00 }; byte code_3[]= {/*学 C4907 */ 0x00,0xC0,0x7F,0x55,0x55,0x40,0x55,0x4A,0x55,0x40,0x55,0x55,0x7F,0x40,0xC0,0x00, 0x09,0x08,0x08,0x09,0x09,0x49,0x89,0x7D,0x0D,0x0B,0x09,0x08,0x08,0x09,0x08,0x00 }; void delay(byte time) { while(time>0) { time--; } } /******************************************************** ------------------------LCD命令函数---------------------- 功能描述:被调用,用来执行对LCD的操作 传入参数:flag,data 参数设置:flag 1------数据 0------指令 data 为指令或数据的内容 *********************************************************/ void lcd_cmd(byte flag,byte data) { LCD_EN=0; if(flag==0x0) { LCD_RS=0; } else { LCD_RS=1; } LCD_RW=0; LCD_DB=data; //delay(100); _asm NOP _asm NOP LCD_EN=1; //LCD开始接受数据,置使能位为1 _asm NOP //等待 _asm NOP delay(10); LCD_EN=0; //LCD结束接受数据,置使能位为0 //LCD_RW=1; //LCD_RS=1; asm //等待40us { PSHH PSHX PSHA LDHX #$0040 LOOP: DBNZX LOOP PULA PULX PULH } } void lcd_reset() { LCD_RST=0; delay(255); delay(255); LCD_RST=1; delay(255); delay(255); } void lcd_clr() { byte i,j; LCD_CS1=1; LCD_CS2=1; delay(10); for(i=0xb8;i<0xc0;i++) { lcd_cmd(0x0,i); lcd_cmd(0x0,0x40); for(j=0;j<0x40;j++) { lcd_cmd(0x1,0x00); } } delay(10); LCD_CS1=0; LCD_CS2=0; delay(10); } void lcd_start() { lcd_reset(); lcd_cmd(0x0,0x3e); lcd_cmd(0x0,0xc0); lcd_cmd(0x0,0x3f); lcd_clr(); } /******************************************************** ------------------------LCD显示函数---------------------- 功能描述:对于特定的行和列显示特定的字符 传入参数:line,col,code 参数设置:line-----------取值范围为0~3,即只有四行 col------------取值范围为0~7,即只有八列 code-----------为数组,是用来显示的内容 *********************************************************/ void lcd_display(byte line,byte col,byte code[32]) { byte i; line=0xb8+line; if(col<4) { LCD_CS1=1; LCD_CS2=0; col=col*16+0x40; } else { LCD_CS1=0; LCD_CS2=1; col=(col-1)*16+0x40; } lcd_cmd(0x0,line); lcd_cmd(0x,col); for (i=0;i<32;i++) { if (i==16) { lcd_cmd(0x0,line+1); lcd_cmd(0x0,col); } lcd_cmd(0x1,code[i]); } LCD_CS1=0; LCD_CS2=0; } void main(void) { //SOPT_COPE=0; //禁止看门狗 CONFIG1_COPD=1; //禁止看门狗 DDRB=0xff; //B口为输出 DDRA=0b00111111; lcd_start(); lcd_display(0x00,0x00,code_0); lcd_display(0x00,0x01,code_1); lcd_display(0x00,0x02,code_2); lcd_display(0x00,0x03,code_3); //lcd_display(0x1,0x1,code_1[]); for(;;); }
|
|
首页 上一页 下一页 尾页 页次:1/3页 10篇日志/页 转到:
|