BASIC4MCU | 질문게시판 | STM32질문
페이지 정보
작성자 hello 작성일2019-04-09 14:26 조회3,271회 댓글0건본문
int main(void)
{unsigned char c=0;
unsigned int i;
RCC->AHB1ENR |= 0x0000001C; // port C, D, E clock enable
GPIOD->MODER &= 0xFFFF0000; // set PD7~0 to output
GPIOD->MODER |= 0x00005555;GPIOE->MODER &= 0xFFFFF3F3; // set PE5(LCD_E), PE1(TFT_RS) to output
GPIOE->MODER |= 0x00000404;
GPIOE->ODR &= 0xFFFFFFDD; // PE5(LCD_E) = PE1(TFT_RS) = 0Delay_ms(50); // wait for system stabilization
GPIOE->BSRR = 0x00220000; // E = 0, Rs = 0
GPIOD->ODR = 0x38; // DL=1, N=1, F=0
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);GPIOE->BSRR = 0x00220000; // E = 0, Rs = 0
GPIOD->ODR = 0x0F; // D=1, C=1, B=1
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);GPIOE->BSRR = 0x00220000; // E = 0, Rs = 0
GPIOD->ODR = 0x06; // I/D=1, S=0
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);
GPIOE->BSRR = 0x00220000; // E = 0, Rs = 0
GPIOD->ODR = 0x01; // CLEAR LCD
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);
Delay_ms(50);
// TEXT Data Writing
c=0x80;
while(1)
{
for (i=0;i<16;i++)
{
/* DDRAM 위치 80 =00 */
GPIOE->BSRR = 0x00220000; // E = 0, Rs = 0
GPIOD->ODR = c; // 문자 위치
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);
/* km */
GPIOE->BSRR = 0x00200002; // E = 0, Rs = 1
GPIOD->ODR = 0x4B; // "K"
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);
GPIOE->BSRR = 0x00200002; // E = 0, Rs = 1
GPIOD->ODR = 0x6D; // "m"
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);
}Delay_ms(500);
GPIOE->BSRR = 0x00220000; // E = 0, Rs = 0
GPIOD->ODR = 0x01; // CLEAR LCD
Delay_us(1);
GPIOE->BSRR = 0x00000020; // E = 1
Delay_us(1);
GPIOE->BSRR = 0x00200000; // E = 0
Delay_us(50);
c++;
if(c>=0x91)
c=0x80;
}
}/* ----- 사용자 함수 ---------------------------------------------------------- */
void SystemInit(void){
asm volatile("NOP");
}
void Delay_us(unsigned int time_us) /* time delay for us in 16MHz */
{
register unsigned int i;for(i = 0; i < time_us; i++) // 3 cycle
{ asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP");
asm volatile("NOP"); // 13 cycle
}
}void Delay_ms(unsigned int time_ms) /* time delay for ms in 16MHz */
{
register unsigned int i;for(i = 0; i < time_ms; i++)
Delay_us(1000);
}
안녕하세요 stm32공부하고 있는 학생입니다~ ki라는 문자를 LCD 화면에서 오른쪽으로 갔다 왼쪽으로 돌아오게 하고 싶은데 오른쪽으로만 갔다가 다시 외쪽으로 돌아오지가 않습니다 ㅠㅠ
c-- 도써보고 j변수를 추가해서 해보기도 했는데 잘 안되네요ㅜㅜ
댓글 0
조회수 3,271등록된 댓글이 없습니다.