proteus自带uclinux的改造与扩展源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

proteus自带uclinux的改造与扩展源代码自己写的源代码供大家学习:这里要感谢bqtanterry网友提供的proteus实例/forum.php?mod=viewthread&tid=2455

#include

#define com 0u

#define dat 1u

#define rs (1u<<0)

#define rw (1u<<1)

#define e (1u<<2)

#define addr 0x80000020u

unsigned char tab[]="I love ARM!";

unsigned char tbl[]="Fuck! I do!";

void delay(int z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write(unsigned char f,unsigned char input)

{

unsigned int tmp=addr;

*((volatile unsigned *)(tmp+=f))=input;delay(5);

*((volatile unsigned *)(tmp&=~(rw)))=input;delay(5); *((volatile unsigned *)tmp)=input;delay(5);

*((volatile unsigned *)(tmp|=e))=input;delay(5);

*((volatile unsigned *)(tmp&=~e))=input;delay(5);

*((volatile unsigned *)(tmp|=rw))=input;

}

void init()

{

write(com,0x38);

write(com,0x0f);

write(com,0x06);

write(com,0x01);

}

int main()

{

int i;

init();

write(com,0x80+0x10);

for(i=0;i<11;i++)

{

write(dat,tab);

delay(10);

}

write(com,0x80+0x40+0x12); for(i=0;i<11;i++)

{

write(dat,tbl);

delay(10);

}

for(i=0;i<16;i++)

{

write(com,0x1c);

delay(220);

}

return 0;

}

编译:arm-elf-gcc -o lcd lcd.c -elf2flt

生成romfs镜像:./genromfs -d romfs/ -f romfs.img 再用H-Converter.exe转换成romfs.hex

上图可以看出A0是控制LCD_RS,A1控制LCD_RW,A2控制LCD_E

这个是关于地址对lcd的控制逻辑图。U68的Q4有效时ADDR_LCD才能使能,所以有A6A5A4A3=0b0100,即addr

=0x80000020地址使能lcd。

相关文档
最新文档