Tải bản đầy đủ (.pdf) (26 trang)

ĐỀ THI THIẾT KẾ PHẦN MỀM software design

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.29 MB, 26 trang )

ĐỀ THI THIẾT KẾ PHẦN MỀM
NGHỀ: ĐIỆN TỬ CÔNG NGHIỆP
(Thời gian làm bài: 120 phút)
Họ và tên thí sinh:
Đơn vị:

Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
1 of 26
NỘI DUNG ĐỀ THI:
Đề thi bao gồm 3 phần:
1. Giới thiệu về đề thi và yêu cầu của đề thi
2. Sơ đồ nguyên lý, mạch in đề thi và
3. Các file datasheets của các linh kiện chính có trong bo mạch đề thi
Lưu ý: Sơ đồ nguyên lý, mạch in đề thi và các file datasheets của các linh kiện chính có
trong bo mạch đề thi được copy vào máy tính cho thí sinh
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
2 of 26
1. GIỚI THIỆU ĐỀ THI THIẾT KẾ PHẦN MỀM
- Đề thi là một bo mạch điện tử có chức năng đo các kích thước khác nhau của các khối lập
phương, khối hình trụ tròn, khối hình hộp chữ nhật, sau đó tính ra thể tích của vật đo được
và hiển thị kết quả lên màn hình LCD16x2 và LED 7 thanh.
YÊU CẦU ĐỐI VỚI THÍ SINH:
- Bật nguồn bo mạch sau đó chạy thử chương trình kiểm tra phần cứng.
- Chạy thử xong chương trình ví dụ để kiểm tra phần cứng.
- Viết chương trình điều khiển điều khiển LCD, 3 LED đơn, 3 LED 7 thanh, sử dụng cảm


biến đo khoảng cách và lựa chọn chế độ điều khiển bởi 5 phím đầu vào theo các yêu cầu
sau:
Khi nguồn cung cấp được bật “ON” hoặc nhấn phím RESET
Yêu cầu 1:
LCD sẽ hiển thị như hình bên dưới:
W E L C O M E T O V S C
P r o g r a m m i n g . . .
0.5 SEC Next ↓
0.5 SEC Next ↓
H a n o i 2 0 1 2 V S C
P r o g r a m m i n g . . .
0.5 SEC Next ↓
0.5 SEC Next ↓
Sau khi hiển thị các nội dung trên, màn hình hiển thị sẽ chuyển sang hiển thị như mục [A]
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
3 of 26
[A] Màn hình hiển thị chế độ lựa chọn khối lập phương:
1 . S q u a r e
2 . R e c t a n g l e
0.5 SEC Next ↓
1 . █ █ █ █ █ █
2 . R e c t a n g l e
Yêu cầu 2:
Khí phím SW5 (↓) được nhấn màn hình LCD chuyển trạng thái hiển thị như ở mục [A]
sang trạng thái hiển thị như mục [B] và sẽ cho phép dịch chuyển lựa chọn xuống dòng thứ 2
[B] Màn hình hiển thị chế độ lựa chọn khối hình hộp chữ nhật
1 . S q u a r e

2 . R e c t a n g l e
0.5 SEC Next ↓
1 . S q u a r e
2 . █ █ █ █ █ █ █ █ █
Yêu cầu 3:
Khi phím SW5 (↓) tiếp tục được nhấn, màn hình đang hiển thị như ở mục [B] sẽ hiển thị
như mục [C].
Nếu phím SW5 (↓) tiếp tục được nhấn thì màn hình LCD sẽ trả về chế độ hiển thị như ở
mục [A] và chương trình có thể lặp lại chế độ lựa chọn bắt đầu từ mục [A]
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
4 of 26
[C] Màn hình hiển thị chế độ lựa chọn khối hình trụ tròn
3 . C i r c l e
0.5 SEC Next ↓
3 . █ █ █ █ █ █
Yêu cầu 4:
Khi phím SW4 (↑) được nhấn khi màn hình đang hiển thị ở mục [C] thì màn hình
LCD sẽ dịch quay trở lại mục [B]. Và nếu tiếp tục nhấn tiếp thì màn hình LCD sẽ dịch quay
trở lại mục [A].
Yêu cầu 5:
Nếu phím SW6 (Enter) được nhấn trong khi màn hình LCD đang hiển thị chế độ lựa
chọn một trong các mục [A], [B], [C] thì màn hình LCD sẽ chuyển sang hiển thị dòng chữ
trạng thái [A], [B], [C] tương ứng sau 0.2 giây.
Trạng thái [A],
Y o u c h o o s e d
P e r f e c t s q u a r e ! !
(0.2sec / 1 Character)

Trang thái [B],
Y o u c h o o s e d
R e c t a n g l e ! !
(0.2sec / 1 Character)
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
5 of 26
Trạng thái [C],
Y o u c h o o s e d
C i r c l e ! !
(0.2sec / 1 Character)
Sau khi màn hình LCD hiển thị xong trạng thái của mục được lựa chọn, sau 1 giây
màn hình sẽ chuyển sang hiển thị như hình bên dưới
A r e y o u s u r e ? ?
(0.2sec / 1 Character)
1.0 SEC Next ↓
A r e y o u s u r e ? ?
1 . Y e s 2 . N o
1.0 SEC Next ↓
A r e y o u s u r e ? ?
█ █ █ █ █ 2 . N o
Câu hỏi 1:
Giả sử màn hình đang hiển thị “Are you sure??” cho lựa chọn ở mục [A]. Khi đó
màn hình nhấp nháy “1.Yes" với chu kì 0.5 giây
Nếu phím SW3 (→) được nhấn thì màn hình sẽ chuyển sang nhấp nháy “2.No" với
chu kì 0.5 giây
Nếu màn hình đang nhấp nháy “2.No" mà phím SW6 (ENTER) được nhấn thì
chương trình sẽ quay trở lại mục [A] và việc lựa chọn khối để đo lại bắt đầu lại từ đầu.

Câu hỏi 2.
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
6 of 26
Trong khi màn hình đang hiển thị như ở câu hỏi 1 nếu phím SW6 (ENTER) được
nhấn khi màn hình nhấp nháy “1.Yes”, thì chương trình sẽ chuyển sang đo kích thước của
khối được chọn với đơn vị đo là cm.
+ Khi lựa chọn chế độ đo kích thước khối lập phương thì màn hình sẽ hiển thị và làm
các công việc như ở mục [D]. Vì vậy cần đo kích thước của 1 cạnh.
+ Khi lựa chọn chế độ đo khối hình hộp chữ nhật thì màn hình sẽ hiển thị và làm các
công việc như ở mục [E]. Vì vậy cần đo 3 kích thước: chiều dài, chiều rộng và chiều cao.
+ Khi lựa chọn chế độ đo khối hình trụ tròn thì màn hình sẽ hiển thị và làm các công
việc như ở mục [F]. Vì vậy cần đo 2 kích thước: chiều cao và đường kính.
[D] Đo kích thước của khối lập phương
Ở chế độ đo khối hình lập phương, màn hình sẽ hiển thị như hình bên dưới. Đồng
thời LED3 sáng nhấp nháy liên tục với tần số 100Hz
L e n g t h o f
O n e s i d e = x . x c m
(x.x là giá trị kích thước đo được và luôn được cập nhật từ cảm biến)
Khi phím SW6 (ENTER) được nhấn thì giá trị x.x được lưu lại và chuyển sang câu
hỏi 3.
[E] Đo kích thước khối hình hộp chữ nhật:
Ở chế độ đo khối hình hộp chữ nhật, màn hình sẽ hiển thị như các hình bên dưới.
Đồng thời LED4 sáng nhấp nháy liên tục với tần số 200Hz
L e n g t h o f
O n e s i d e = x . x c m
(x.x là giá trị kích thước luôn được cập nhật từ cảm biến)
Khi phím SW6 (ENTER) được nhấn màn hình hiển thị như hình bên dưới

Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
7 of 26
O n e s i d e = x . x c m
A n o t h e r = y . y c m
(x.x là giá trị kích thước đã được lưu và y.y là giá trị kích thước luôn được cập nhật
từ cảm biến)
Khi phím SW6 (ENTER) được nhấn màn hình hiển thị xuống hình bên dưới
A n o t h e r = y . y c m
H e i g h t = z . z c m
(y.y là giá trị kích thước đã được lưu và z.z là giá trị kích thước luôn được cập nhật
từ cảm biến)
Khi phím SW6 (ENTER) được nhấn thì giá trị z.z lưu lại và chương trình sẽ chuyển
sang câu hỏi 3.
[F] Đo kích thước của khối hình trụ tròn
Ở chế độ đo khối hình trụ tròn, màn hình sẽ hiển thị như các hình bên dưới. Đồng
thời LED5 sáng
L e n g t h o f
R a d i u s = x . x c m
(x.x là giá trị kích thước luôn được cập nhật từ cảm biến)
Khi phím SW6 (ENTER) được nhấn màn hình hiển thị như hình bên dưới
R a d i u s = x . x c m
H e i g h t = y . y c m
(x.x là giá trị kích thước đã được lưu và y.y là giá trị kích thước luôn được cập nhật
từ cảm biến)
Khi phím SW6 (ENTER) được nhấn thì giá trị y.y được lưu lại và chương trình sẽ
chuyển sang câu hỏi 3.
Câu hỏi 3.

Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
8 of 26
1. Màn hình LCD hiển thị kết quả thể tích tính toán được dưới dạng số thực với phần
thập phân 1 chữ số. Đồng thời LED 7 thanh hiển thị kết quả đo nhưng chỉ lấy phần nguyên.
Sai số cho phép là +/-5%
Ví dụ: Khi kết quả tính toán được là 125.75 cm
3
thì kết quả được hiển thị như sau:
T h e b u l k i s
1 2 5 . 8 c m
3
( Màn hình LCD )
(LED 7 thanh)
2. Nếu phím SW6 (ENTER) được nhấn chương trình sẽ trả về hiển thị như ở mục
[A], các LED đơn và LED 7 thanh tắt.
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
9 of 26
Chương trình kiểm tra phần cứng
#include <p18f4550.h>
#include <timers.h>
#include <delays.h>
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PWRT = ON

#define BYTE unsigned char
#define WORD unsigned int
#define WORD2 unsigned long
#define lcd_rs PORTDbits.RD7
#define lcd_rw PORTDbits.RD6
#define lcd_e PORTDbits.RD5
#define led_1 PORTCbits.RC1 = 0; PORTCbits.RC2 = 1;
PORTBbits.RB5 = 0;
#define led_2 PORTCbits.RC1 = 1; PORTCbits.RC2 = 0;
PORTBbits.RB5 = 0;
#define led_3 PORTCbits.RC1 = 0; PORTCbits.RC2 = 0;
PORTBbits.RB5 = 1;
#define led_off PORTCbits.RC1 = 0; PORTCbits.RC2 = 0;
PORTBbits.RB5 = 0;
#define led_on PORTCbits.RC1 = 1; PORTCbits.RC2 = 1;
PORTBbits.RB5 = 1;
#define lcd_gotoxy(x,y) lcd_data(y ? 0xc0+x : 0x80+x);
short key_flag = 0;
BYTE key = 0xff, mode_flag = 0;
WORD2 result = 0;
char font9[] = " ";
void InterruptHandlerHigh(void);
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void){
_asm
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
10 of 26

goto InterruptHandlerHigh
_endasm
}
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh(void){
if(INTCON & 0x04){
INTCON &= 0xfb;
TMR0H = 0xec;
TMR0L = 0x78;
}
}
void delay_2(WORD2 tmr){
WORD2 i = 0;
for(i=0; i<tmr; i++){ Delay10KTCYx(1); }
}
void busy_check(void){
BYTE busy_flag = 0;
PORTDbits.RD4 = 0;
do{
TRISD = 0x01;
lcd_rs = 0;
lcd_rw = 1;
lcd_e = 1;
busy_flag = PORTDbits.RD7;
Delay100TCYx(1);
lcd_e = 0;
TRISD = 0x00;
} while(busy_flag);
}

BYTE lcd_data_reverse(BYTE xx){
BYTE buff = 0;
buff += (xx >> 7) & 0x01;
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
11 of 26
buff += (xx >> 5) & 0x02;
buff += (xx >> 3) & 0x04;
buff += (xx >> 1) & 0x08;
buff += (xx << 1) & 0x10;
buff += (xx << 3) & 0x20;
buff += (xx << 5) & 0x40;
buff += (xx << 7) & 0x80;
return buff;
}
void lcd_data(char input){
busy_check();
lcd_rs = 0;
lcd_rw = 0;
input = lcd_data_reverse(input);
PORTD = input & 0x0f;
lcd_e = 1;
Delay100TCYx(1);
lcd_e = 0;
lcd_rs = 0;
lcd_rw = 0;
PORTD = (input>>4) & 0x0f;
lcd_e = 1;

Delay100TCYx(1);
lcd_e = 0;
}
void lcd_putc(char bt){
busy_check();
bt = lcd_data_reverse(bt);
PORTD = bt & 0x0f;
lcd_rs = 1;
lcd_rw = 0;
lcd_e = 1;
Delay100TCYx(1);
lcd_e = 0;
PORTD = (bt>>4) & 0x0f;
lcd_rs = 1;
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
12 of 26
lcd_rw = 0;
lcd_e = 1;
Delay100TCYx(1);
lcd_e = 0;
}
void lcd_puts(char *str){
char i;
for(i=0; str[i]!=0; i++){ lcd_putc(str[i]); }
}
void lcd_clean(void){
lcd_gotoxy(0,0);

lcd_puts(font9);
lcd_gotoxy(0,1);
lcd_puts(font9);
}
void seg(BYTE data){
PORTDbits.RD4 = 1;
switch(data){
case 0 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 0;
PORTDbits.RD1 = 0; PORTDbits.RD0 = 0; break;
case 1 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 0;
PORTDbits.RD1 = 0; PORTDbits.RD0 = 1; break;
case 2 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 0;
PORTDbits.RD1 = 1; PORTDbits.RD0 = 0; break;
case 3 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 0;
PORTDbits.RD1 = 1; PORTDbits.RD0 = 1; break;
case 4 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 1;
PORTDbits.RD1 = 0; PORTDbits.RD0 = 0; break;
case 5 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 1;
PORTDbits.RD1 = 0; PORTDbits.RD0 = 1; break;
case 6 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 1;
PORTDbits.RD1 = 1; PORTDbits.RD0 = 0; break;
case 7 : PORTDbits.RD3 = 0; PORTDbits.RD2 = 1;
PORTDbits.RD1 = 1; PORTDbits.RD0 = 1; break;
case 8 : PORTDbits.RD3 = 1; PORTDbits.RD2 = 0;
PORTDbits.RD1 = 0; PORTDbits.RD0 = 0; break;
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
13 of 26

case 9 : PORTDbits.RD3 = 1; PORTDbits.RD2 = 0;
PORTDbits.RD1 = 0; PORTDbits.RD0 = 1; break;
}
}
BYTE key_pad(char old_key){
BYTE x_key = 0xff, new_key;
new_key = PORTB & 0x1f;
if(new_key != 0x1f){
switch(new_key){
case 0x1e : x_key = 1; break;
case 0x1d : x_key = 2; break;
case 0x1b : x_key = 3; break;
case 0x17 : x_key = 4; break;
case 0x0f : x_key = 5; break;
}
}
if(x_key != old_key & x_key != 0xff) key_flag = 1;
return x_key;
}
WORD2 adc_go(void){
WORD ADC_value;
ADCON0bits.ADON=1;
Delay100TCYx(1);
ADCON0bits.GO=1;
while(ADCON0bits.GO);
ADC_value = ADRESH;
ADC_value = (ADC_value<<8)+ADRESL;
return ADC_value;
}
void lcd_init(void){

char font1[] = "2011 LONDON WSC ";
char font2[] = " Programming ";
delay_2(200);
lcd_data(0x28);
lcd_data(0x28);
delay_2(10);
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
14 of 26
lcd_data(0x28);
delay_2(10);
lcd_data(0x28);
lcd_data(0x0c);
lcd_data(0x06);
lcd_gotoxy(0,0);
lcd_puts(font1);
lcd_gotoxy(0,1);
lcd_puts(font2);
seg(8);
led_on;
PORTE = 0x00;
delay_2(250);
PORTE = 0xff;
led_off;
lcd_clean();
delay_2(250);
lcd_gotoxy(0,0);
lcd_puts(font1);

lcd_gotoxy(0,1);
lcd_puts(font2);
PORTE = 0x00;
led_on;
delay_2(250);
lcd_data(0x01);
PORTE = 0xff;
led_off;
delay_2(250);
key_flag = 1;
}
void ad_define(void){
char font1[] = " Distance ";
char font2[] = " AD = ";
static BYTE i = 0;
WORD2 value = 0;
lcd_gotoxy(0,0);
lcd_puts(font1);
lcd_gotoxy(0,1);
lcd_puts(font2);
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
15 of 26
i++;
if(i>=50){
value = adc_go();
lcd_putc(value/1000+48);
lcd_putc(value%1000/100+48);

lcd_putc(value%100/10+48);
lcd_putc(value%10+48);
i = 0;
}
if(key_flag==1){
key_flag = 0;
}
}
void main(void){
BYTE i = 0;
TRISA = 0x0f;
TRISB = 0x1f;
TRISC = 0x80;
TRISD = 0x00;
TRISE = 0x00;
ADCON0 = 0x00;
ADCON1 = 0x3b;
ADCON2 = 0x84;
T0CON = 0x98;
TMR0H = 0xec;
TMR0L = 0x78;
INTCON = 0xa0;
lcd_init();
lcd_data(0x40);
lcd_putc(0b00011100);delay_2(5);
lcd_putc(0b00000100);delay_2(5);
lcd_putc(0b00011100);delay_2(5);
lcd_putc(0b00000100);delay_2(5);
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16

Version: 3.0
Date: 15.07.2012
16 of 26
lcd_putc(0b00011100);delay_2(5);
lcd_putc(0b00000000);delay_2(5);
lcd_putc(0b00000000);delay_2(5);
lcd_putc(0b00000000);delay_2(5);
while(1){
key = key_pad(key);
switch(mode_flag){
case 0 : ad_define(); break;
}
}
}
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
17 of 26
THANG ĐIỂM CHO PHẦN THI
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
18 of 26
2. SƠ ĐỒ MẠCH NGUYÊN LÝ
Sơ đồ nguyên lý mạch CPU
Sơ đồ nguyên lý mạch ngoại vi:
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16

Version: 3.0
Date: 15.07.2012
19 of 26
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
20 of 26
GP2Y0A21SK0F
FND1FND3FND2
SƠ ĐỒ PCB MẠCH CPU (COMPONENT-TOP, BOTTOM - SUB)
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
21 of 26
SƠ ĐỒ PCB (TOP, BOTTOM - SUB)

Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
22 of 26
SƠ ĐỒ PCB MẠCH NGOẠI VI (COMPONENT-TOP - MAIN)
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
23 of 26
SƠ ĐỒ PCB MẠCH NGOẠI VI (COMPONENT-BOTTOM - MAIN)

Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
24 of 26
SƠ ĐỒ PCB MẠCH NGOẠI VI (TOP)
Đề thi nghề Điện Tử Công Nghiệp
Mã nghề: 16
Version: 3.0
Date: 15.07.2012
25 of 26

×