当前位置:文档之家› proteus自带uclinux的改造与扩展源代码

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

proteus自带uclinux的改造与扩展源代码
自己写的源代码供大家学习:这里要感谢bqtanterry网友提
供的proteus实例
http://www.protues.com.cn/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。

相关主题