完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
原子老师 是不是在51里的时序 放到STM32里 延时就得增加相应的倍数啊! 还有你看看我 的IO定义 和 写指令 写数据 这几个函数写的对不对 ?除了红色部分就是时序问题了。我看你的AVR的代码了 真没看懂 ! #include #include #include #include #define RS (1<<2) //P24 PC2 #define RW (1<<0) //P25 PC0 #define EN (1<<13) //P26 PC13 u8 i; //设置使能脚为1或者0 #define LCD_RS(x) GPIOC->ODR=(GPIOC->ODR&~RS)|(x?RS:0) #define LCD_RW(x) GPIOC->ODR=(GPIOC->ODR&~RW)|(x?RW:0) #define LCD_EN(x) GPIOC->ODR=(GPIOC->ODR&~EN)|(x?EN:0) u8 dis1[] = "书山有路勤为径,"; u8 dis2[] = "学海无涯苦作舟,"; u8 dis3[] = "咬定青山不放松,"; u8 dis4[] = "立根原在破岩中."; void delay1(u8 ms) { while(ms--) { u8 j; for(j=0;j<250;j++) { delay_us(5); } } } u8 lcd_busy() { u8 result; LCD_RS(0); LCD_RW(1); LCD_EN(1); delay_us(5); //result = (bit)(P3&0x80); result=(GPIOB->ODR)&(0X80<<8); LCD_EN(0); return(result); } void lcd_wcmd(u8 cmd) { while(lcd_busy()); LCD_RS(0); LCD_RW(0); LCD_EN(0); delay_us(5); delay_us(5); //P3 = cmd; GPIOB->ODR=0XFF00&(cmd<<8); delay_us(5); LCD_EN(1); delay_us(5); LCD_EN(0); } void lcd_wdat(u8 dat) { while(lcd_busy()); LCD_RS(1); LCD_RW(0); LCD_EN(0); //P3 = dat; GPIOB->ODR=0XFF00&(dat<<8); delay_us(5); LCD_EN(1); delay_us(5); LCD_EN(0); } void lcdinit() { RCC->APB2ENR|=1<<3; RCC->APB2ENR|=1<<4; GPIOC->CRL&=0XFFFFF0F0; GPIOC->CRL|=0X00000303; GPIOC->ODR|=5<<0; GPIOC->CRH&=0XFF0FFFFF; GPIOC->CRH|=0X00300000; GPIOC->ODR|=1<<13; GPIOB->CRH&=0X000000000; GPIOB->CRH|=0X333333333; GPIOB->ODR|=0XFFFF; lcd_wcmd(0x34); //?????? delay1(5); lcd_wcmd(0x30); //?????? delay1(5); lcd_wcmd(0x0C); //???,??? delay1(5); lcd_wcmd(0x01); //??LCD????? delay1(5); } void lcd_pos(u8 X,u8 Y) { u8 pos; if (X==0) {X=0x80;} else if (X==1) {X=0x90;} else if (X==2) {X=0x88;} else if (X==3) {X=0x98;} pos = X+Y ; lcd_wcmd(pos); } void display() { lcd_pos(0,0); //????????????1??? i = 0; while(dis1 != ' |