zlf667788 发表于 2006-10-20 22:50:04

弄了一天刚弄出来的OCMJ15x20D的初始化程序,WINAVR下调试通过

#include "public.h"



//WINAVR20040214+AVRSTUDIO4.12下调试通过



//RS--PB5

//CS1--GND

//CS2--PB6

//BUSY--PE6

//INT--PE7

//RST--PG4

//DB0..7--PA0..7



//ATMEGA64@8MHz



const uint8_t init_paras[] PROGMEM =

{

0X00,0X01,0X02,0X03,0X10,0X11,0X12,0X21,0X31,0X41,0X51,0X20,0X30,0X40,0X50,0X60,

0X61,0X70,0X71,0X72,0X80,0X81,0X91,0X90,0XA0,0XA1,0XA2,0XA3,0XB0,0XB1,0XC0,0XC1,

0XC8,0XC9,0XCA,0XD0,0XE0,0XF0,0XF1,

0XC9,0XF2,0X10,0X80,0X6B,0X00,0X91,0X27,0XEF,0X00,0X00,0X27,0XEF,0X00,0X00,0X00,

0X00,0X00,0X00,0XEF,0XAA,0X00,0X00,0X06,0X11,0X00,0X00,0X00,0X27,0XEF,0X00,0X0A,

0X80,0X80,0X00,0X80,0X00,0XA0,0X0F

};



void lcm_reg_write(uint8_t reg_name,uint8_t reg_data)

{

DDRA = 0XFF;

/* PORTB |= (1<<PB6);

PORTB |= (1<<PB5);

PORTG |= (1<<PG0);

PORTG |= (1<<PG1);*/



lcm_reg_wr(reg_name);

for(reg_name=8;reg_name;reg_name--)

{

asm volatile ("nop"::);

}

lcm_reg_wr(reg_data);

}



void lcm_reg_wr(uint8_t d)

{

PORTA = d;

PORTB |= (1<<PB6); //cs2=1

PORTG |= (1<<PG1); //rd=1

PORTB &= (~(1<<PB5)); //rs=0

PORTG &= (~(1<<PG0)); //wr=0

for(d=8;d;d--)

{

asm volatile ("nop"::);

}

PORTG |= (1<<PG0);//wr=1

PORTB |= (1<<PB5);//rs=1

PORTB &= (~(1<<PB6));//cs2=0

}



void lcm_data_write(uint8_t data)

{

DDRA=0XFF;

/* PORTB |= (1<<PB6);

PORTB |= (1<<PB5);

PORTG |= (1<<PG0);

PORTG |= (1<<PG1);*/

while(PINE & (1<<PE6));

PORTA = data;

PORTB |= (1<<PB6); //cs2=1

PORTG |= (1<<PG1); //rd=1

PORTB |= (1<<PB5); //rs=1

PORTG &= (~(1<<PG0)); //wr=0

for(data=8;data;data--)

{

asm volatile ("nop"::);

}

PORTG |= (1<<PG0);//wr=1

PORTB |= (1<<PB5);//rs=1

PORTB &= (~(1<<PB6));//cs2=0

}



uint8_t lcm_reg_read(uint8_t reg_name)

{

DDRA = 0XFF;

/* PORTB |= (1<<PB6);

PORTB |= (1<<PB5);

PORTG |= (1<<PG0);

PORTG |= (1<<PG1);*/

lcm_reg_wr(reg_name);

for(reg_name=8;reg_name;reg_name--);

DDRA=0X00;

PORTA=0XFF;

PORTB |= (1<<PB6); //cs2=1

PORTG |= (1<<PG0); //wr=1

PORTB &= (~(1<<PB5)); //rs=0

PORTG &= (~(1<<PG1)); //rd=0

for(reg_name=8;reg_name;reg_name--)

{

asm volatile ("nop"::);

}

reg_name=PINA;

PORTG |= (1<<PG1);//rd=1

PORTB |= (1<<PB5);//rs=1

PORTB &= (~(1<<PB6));//cs2=0

return reg_name;

}

void lcm_init(void)

{

uint16_t addr=(uint16_t)init_paras;

uint8_t i;

PORTB |= (1<<PB6);

PORTB |= (1<<PB5);

PORTG |= (1<<PG0);

PORTG |= (1<<PG1);

lcm_timer=4;

while(lcm_timer);

PORTG |= (1<<PG4);

PORTG |= (1<<PG3);



lcm_timer=24;

while(lcm_timer);



for(i=39;i;i--)

{

lcm_reg_write(pgm_read_byte(addr),pgm_read_byte(addr+39));

addr++;

}



lcm_clr();

}



void lcm_clr(void)

{

// uint8_t i;

lcm_reg_write(LCMR_PNTR,0);

lcm_reg_write(LCMR_FNCR,(lcm_reg_read(LCMR_FNCR) | 0X08));

lcm_reg_write(LCMR_WLCR,0XC5);

set_position(0,0);

lcm_data_write(0);

}





void set_position(uint8_t x,uint8_t y)

{

lcm_reg_write(LCMR_CPXR,x);

lcm_reg_write(LCMR_CPYR,y);

}



//在x,y处显示置于flash中的字符串



//x,y--显示座标



//str 待显示字符串地址



//mode的456用于设置WCCR的456位



void display_rom_string(uint8_t x,uint8_t y,uint16_t str,uint8_t mode)

{

set_text_mode();

set_position(x,(y<<4));

lcm_reg_write(LCMR_WCCR,((lcm_reg_read(LCMR_WCCR) & 0X8F) | (mode & (~0x8f)) | 0x08));

mode=pgm_read_byte(str++);

while(mode)

{

lcm_data_write(mode);

mode=pgm_read_byte(str++);

}

}





const uint8_t the_str[] PROGMEM = "Hello!你好!";

void main(void)

{

init_devices();

lcm_init();

display_rom_string(0,0,(uint16_t) the_str,0x30);

while(1);



}

sgyyj 发表于 2007-2-13 11:30:17

上过ATMEGA64试吗?

ecat 发表于 2007-2-15 21:00:02

楼主的屏有触摸功能吗?我这两天正搞这个.那个7843读出的数据很不稳,头疼死了!

pcwinner 发表于 2007-2-24 21:09:32

我用内部控制的更麻烦。没触摸也有中断信号出来

anson 发表于 2007-2-25 14:48:02

7843是个很成熟的IC,就是个AD转换器,是需要在软件下做下滤波!

ecat 发表于 2007-2-26 12:59:24

3楼,内部中断是有问题的,芯片缺陷!

anson 发表于 2007-2-26 14:34:19

5楼正解,这是台湾控制ic的缺陷。所以模块制造厂家加了7843到板上去,不用模块内部的触摸功能。还是挺好用的。

pcwinner 发表于 2007-2-26 20:59:25

我后来也知道是这个问题。。。。。只是浪费了不少时间而已。

不过金鹏的售后还是做得不错的

xiaoqiangxcu 发表于 2011-1-18 08:45:37

这程序贴的不全

洛川子 发表于 2013-3-17 15:09:28

请问楼主,那个手册里面不是有基本的读写程序吗?楼主是主要修改的哪里调试成功呢?

jcsasm 发表于 2014-3-10 01:13:19

标记!mark
!!
页: [1]
查看完整版本: 弄了一天刚弄出来的OCMJ15x20D的初始化程序,WINAVR下调试通过