BASIC4MCU | 질문게시판 | atmega128 segment에 난수 표현 질문드리겠습니다.
페이지 정보
작성자 남동 작성일2018-12-19 00:11 조회4,461회 댓글0건본문
/*******************************************************
FND Test Program
Function:
random number showed on Seven Segment.
슬롯머신처럼 각각의 세그먼트 셀렉터에 난수를 표현하여 핀을 입력 시 멈추는 프로그램을 짜고 싶습니다.
하지만 현재 실행시 세그먼트 네 자리에 모두 8이라는 값이 뜨고 변하지 않아 이를 해결하지 못해 질문드립니다.
Hardware Interface:
PORTB(1~8) <--------> CN29(1~8): FND 8 Data Lines(a,b,c,d,e,f,g,dp)
PORTE(1~8) <--------> CN30(1~8): SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8
PORTF(5~8) <--------> CN27(1~4): FND 4 Selector Lines(s0, s1, s2, s3)
*******************************************************/
#include <mega128.h>
#include <stdlib.h>
#include <delay.h>
unsigned char nansu;
#define BYTE unsigned char
#define UINT unsigned int
BYTE Seg_Data[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80,0x98}; // 0 ~ 9
UINT Sec = 0, Msec = 0;
UINT Run = 0;
void main(void)
{
BYTE SW, OLD_SW;
nansu=rand()%9;
DDRB = 0xFF; // B 포트 모든 핀 출력 설정
DDRF = 0b11110000; // PF4-PF7 출력 설정
DDRE = 0b00000010; // PE 포트 입력 설정 (PE1 출력)
OLD_SW = PINE & 0b0011000; // SW8 상태값 추출
while(1)
{
PORTF = 0b01110000;
PORTB = Seg_Data[nansu];
delay_ms(2);
delay_us(450);
PORTF = 0b10110000;
PORTB = Seg_Data[nansu];
delay_ms(2);
delay_us(450);
PORTF = 0b11010000;
PORTB = Seg_Data[nansu];
delay_ms(2);
delay_us(450);
PORTF = 0b11100000;
PORTB = Seg_Data[nansu];
delay_ms(2);
delay_us(450);
SW = PINE & 0b00110000;
if(SW != OLD_SW)
{
if(OLD_SW == 0b00110000 && SW == 0b00100000) // SW8
{
Run = (Run + 1) % 2;
}
else if(OLD_SW == 0b00110000 && SW == 0b00010000) //SW14
{
Msec = 0;
Sec = 0;
}
OLD_SW =SW;
}
if(Run == 1)
{
Msec++;
if(Msec == 100)
{
Msec = 0;
Sec++;
if(Sec == 60) Sec =0;
}
}
}
}
댓글 0
조회수 4,461등록된 댓글이 없습니다.