Tải bản đầy đủ (.docx) (35 trang)

Báo cáo hệ thống nhúng đại học vinh

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 (4.07 MB, 35 trang )

TRƯỜNG ĐẠI HỌC VINH
VIỆN KỸ THUẬT VÀ CÔNG NGHỆ

BÁO CÁO THỰC HÀNH
HỆ THỐNG NHÚNG

Nghệ An, 2023


MỤC LỤC
BÀI 1: LẬP TRÌNH C VỚI VI ĐIỀU KHIỂN 8051............................................3
1.1. Mục đích......................................................................................................3
1.2. Cơ sở lý thuyết............................................................................................3
1.2.1. Phần mềm MikroC cho 8051................................................................3
1.2.2. Điều khiển led đơn................................................................................3
1.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao........................................3
1.3.1. Thiết bị thực hành.................................................................................3
1.4. Các bước tiến hành thí nghiệm....................................................................3
1.4.1. Kết nối và lập trình................................................................................3
1.4.2. Bài tập thực hành..................................................................................3
BÀI 2: GIAO TIẾP VỚI MA TRẬN PHÍM VÀ MÀN HÌNH LCD 16x2...........8
2.1. Mục đích......................................................................................................8
2.2. Cơ sở lý thuyết............................................................................................8
2.2.1. Ma trận bàn phím..................................................................................8
2.2.2. Làm việc với LCD 16x2.......................................................................8
2.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao........................................8
2.3.1. Thiết bị thực hành.................................................................................8
2.4. Các bước tiến hành thí nghiệm....................................................................8
2.4.1. Giao tiếp với ma trận phím và màn hình LCD 16x2.............................8
2.4.2. Bài tập thực hành..................................................................................8
BÀI 3: GIAO TIẾP VỚI CÁC ĐÈN LED 7 THANH........................................16


3.1. Mục đích....................................................................................................16
3.2. Cơ sở lý thuyết..........................................................................................16
3.2.1. Giới thiệu led 7 thanh..........................................................................16
3.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao......................................16
3.3.1. Thiết bị thực hành...............................................................................16
3.4. Các bước tiến hành thí nghiệm..................................................................16
3.4.1. Lập trình giao tiếp với các đèn led 7 thanh.........................................16
3.4.2. Bài tập thực hành................................................................................16
BÀI 4: GIAO TIẾP VỚI CẢM BIẾN NHIỆT ĐỘ............................................21
1


4.1. Mục đích....................................................................................................21
4.2. Cơ sở lý thuyết..........................................................................................21
4.2.1. Cảm biến nhiệt độ DS1820.................................................................21
4.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao......................................21
4.3.1. Thiết bị thực hành...............................................................................21
4.4. Các bước tiến hành thí nghiệm..................................................................21
4.4.1. Lập trình giao tiếp với cảm biến nhiệt độ DS1820.............................21
4.4.2. Bài tập thực hành................................................................................21
BÀI 5: LẬP TRÌNH SỬ DỤNG NGẮT NGỒI...............................................29
5.1. Mục đích....................................................................................................29
5.2. Cơ sở lý thuyết..........................................................................................29
5.2.1. Ngắt ngồi của 8051...........................................................................29
5.2.2. Ngun lí ghép nối vi điều khiển với phím bấm và màn hình LCD
16x2...............................................................................................................29
5.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao......................................29
5.3.1. Thiết bị thực hành...............................................................................29
5.4. Các bước tiến hành thí nghiệm..................................................................29
5.4.1. Hiển thị số lần ngắt ngoài trên chân P3.2 lên LCD 16x2....................29

5.4.2. Bài tập thực hành................................................................................29
BÀI 6: HỆ ĐIỀU HÀNH THỜI GIAN THỰC...................................................32
6.1. Mục đích....................................................................................................32
6.2. Cơ sở lý thuyết..........................................................................................32
6.2.1. Hệ điều hành thời gian thực................................................................32
6.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao......................................32
6.3.1. Thiết bị thực hành...............................................................................32
6.4. Các bước tiến hành thí nghiệm..................................................................32
6.4.1. Kết nối và lập trình..............................................................................32
6.4.2. Bài tập thực hành................................................................................32

2


BÀI 1: LẬP TRÌNH C VỚI VI ĐIỀU KHIỂN 8051
1.1. Mục đích
Làm quen với phần mềm MikroC cho 8051
Tìm hiểu và viết chương trình điều khiển cơ bản với C/C++
1.2. Cơ sở lý thuyết
1.2.1. Phần mềm MikroC cho 8051
1.2.2. Điều khiển led đơn
1.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao
1.3.1. Thiết bị thực hành
Máy tính cài đặt phần mềm MikroC for 8051
1.4. Các bước tiến hành thí nghiệm
1.4.1. Kết nối và lập trình
1.4.2. Bài tập thực hành
1. Viết lại chương trình điều khiển Led đơn nói trên với các hiệu ứng led
đuổi nhau từ P0.0 đến P3.7, sử dụng các lệnh dịch bit. Thời gian chuyển trạng
thái của mỗi đèn Led là 1 giây. Mô phỏng trên proteus và kiểm tra trên mạch

phần cứng.
* Code:
char so[] ={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
int i, j;
void main() {
do {
for (j = 0; j < 4; j++) {
for (i = 0; i < 8; i++) {
switch (j) {
case 0:
P0 = so[i];
break;
case 1:
P1 = so[i];
break;
case 2:

3


P2 = so[i];
break;
case 3:
P3 = so[i];
break;
}
delay_ms(300);
}
switch (j) {
case 0:

P0 = 0xff;
break;
case 1:
P1 = 0xff;
break;
case 2:
P2 = 0xff;
break;
case 3:
P3 = 0xff;
break;
}
}
} while (1);
}

4


* Kết quả

Hình 1.1. Led chạy đuổi nhau
2. Sử dụng ma trận đèn Led 4x8 tạo bởi các port P0, P1, P2, P3 để hiện
tên của bản thân, thời gian chuyển trạng thái của mỗi kí tự là 500ms. Mơ phỏng
trên proteus và kiểm tra trên mạch phần cứng.
* Code
#include<REGX52.H>
#include<intrins.h>
#include<string.h>
#include<stdio.h>

int i;
int j,k;
int h,z,w;
int q,e;
void delay(int cnt) {
while(cnt--)
_nop_();
}
unsigned char code chu[][8]= {
{0xff,0x00,0x00,0x3C,0x3C,0x81,0xC3,0xff},//D
{0xFF,0x81,0x01,0x7F,0x7F,0x01,0x01,0xFF},//U
{0xFF,0x01,0x01,0xF3,0xE7,0xCF,0x01,0x01},//N

5


{0xFF,0x81,0x00,0x7E,0x33,0x03,0x1F,0xFF},//G
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//space
};
unsigned char led[][8]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
char character[]={'D','U','N','G',' '};
void hienChuChinhSua(unsigned char code chaychu[][8]){
for(i=0;i<8;i++){
P3=chaychu[0][i];
P2=0x80>>i;
delay(80);
P2=0;
}
}
void chay1Chu(unsigned int tocDo,unsigned int soKyTu){

for(h=0;h<8;h++){
for(z=0;z<7;z++){
led[0][z]=led[0][z+1];
}
led[0][7]=chu[soKyTu][h];
for(w=0;whienChuChinhSua(led);
}
}
}
void quetChu(char *hienthi,unsigned int tocdo){
for(q=0;qfor(e=0;eif(hienthi[q]==character[e]){
chay1Chu(30,e);
break;
}
}
}
}
void main(){
while(1){
quetChu("DUNG",30);
}
}

6


* Kết quả


Hình 1.2. Led Matrix hiện chữ “DUNG” lần lượt

7


BÀI 2: GIAO TIẾP VỚI MA TRẬN PHÍM VÀ MÀN HÌNH LCD 16x2
2.1. Mục đích
Tìm hiểu và viết chươn trình giao tiếp với keypad 4x4
Hiển thị trạng thái phím bấm lên LCD 16x2
2.2. Cơ sở lý thuyết
2.2.1. Ma trận bàn phím
2.2.2. Làm việc với LCD 16x2
2.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao
2.3.1. Thiết bị thực hành
Máy tính cài đặt phần mềm MikroC for 8051
2.4. Các bước tiến hành thí nghiệm
2.4.1. Giao tiếp với ma trận phím và màn hình LCD 16x2
2.4.2. Bài tập thực hành
1. Viết chương trình nhập vào một số nhị phân 4 bit và chuyển đổi số nhị
phân đó sang số hexa hiển thị lên màn hình LCD. Mơ phỏng trên proteus và
kiểm tra trên mạch phần cứng.
* Code
unsigned short kp, cot=5, i, Dec, flag;
char bin[4];
char Hex1[6];
char Hex;
char keypadPort at P0;
sbit LCD_RS at P2_0_bit;
sbit LCD_EN at P2_1_bit;

sbit LCD_D4 at P2_2_bit;
sbit LCD_D5 at P2_3_bit;
sbit LCD_D6 at P2_4_bit;
sbit LCD_D7 at P2_5_bit;
sbit LCD_D8 at P2_6_bit;
void main() {
Keypad_Init();

8


Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"Bin: ");
Lcd_out(2,1,"Hex: ");
do{
kp=0;
do
kp=Keypad_Key_Click();
while(!kp);
switch(kp){
case 1:
kp=49;
bin[i]=1;
i++;
break;
case 14:
kp=48;
bin[i]=1;

i++;
break;
case 15:
kp=48;
bin[i]=1;
i++;
; break;
case 16:
Dec=bin[0]*8+bin[1]*4+bin[2]*2+bin[3]*1;
flag=1;
break;
}
if(flag==1){
switch (Dec) {
case 0:
Hex=48;
break;
case 1:
Hex=49;
break;

9


case 2:
Hex=50;
break;
case 3:
Hex=51;
break;

case 4:
Hex=52;
break;
case 5:
Hex=53;
break;
case 6:
Hex=54;
break;
case 7:
Hex=55;
break;
case 8:
Hex=56;
break;
case 9:
Hex=57;
break;
case 10:
Hex=65;
break;
case 11:
Hex=66;
break;
case 12:
Hex=67;
break;
case 13:
Hex=68;
break;

case 14:
Hex=69;
break;
case 15:
Hex=70;

10


break;
}
}
Lcd_chr(2,7,Hex);
cot++;
Lcd_chr(1,cot,kp);
}
while(1);
}

* Kết quả

Hình 2.1. Chương trình chuyển đổi số nhị phân sang số hexa
2. Viết chương trình nhập vào hai số hexa và tính tổng, tích của hai số
hiển thị hai số đó lên màn hình LCD. Mơ phỏng trên proteus và kiểm tra trên
mạch phần cứng.
* Code
unsigned short kp, cot = 5, i, Dec, flag;
char bin[4];
char Hex1[6];
char Hex;

char keypadPort at P0;
sbit LCD_RS at P2_0_bit;
sbit LCD_EN at P2_1_bit;
sbit LCD_D4 at P2_2_bit;

11


sbit LCD_D5 at P2_3_bit;
sbit LCD_D6 at P2_4_bit;
sbit LCD_D7 at P2_5_bit;
sbit LCD_D8 at P2_6_bit;
unsigned short hexToDec(char hex) {
if (hex >= '0' && hex <= '9') {
return hex - '0';
} else if (hex >= 'A' && hex <= 'F') {
return hex - 'A' + 10;
}
return 0;
}
char decToHex(unsigned short dec) {
if (dec >= 0 && dec <= 9) {
return dec + '0';
} else if (dec >= 10 && dec <= 15) {
return dec - 10 + 'A';
}
return 0;
}
void main() {
unsigned short firstNumber = 0, secondNumber = 0, sum, product;

unsigned short inputCount = 0;
Keypad_Init();
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1, "so1: ");
Lcd_Out(2, 1, "so2: ");
do {
kp = 0;
do
kp = Keypad_Key_Click();
while (!kp);
switch (kp) {
case 1:
kp = '1';

12


break;
case 2:
kp = '2';
break;
case 3:
kp = '3';
break;
case 4:
kp = 'A';
break;
case 5:

kp = '4';
break;
case 6:
kp = '5';
break;
case 7:
kp = '6';
break;
case 8:
kp = 'B';
break;
case 9:
kp = '7';
break;
case 10:
kp = '8';
break;
case 11:
kp = '9';
break;
case 12:
kp = 'C';
break;
case 13:
kp = '*';
break;
case 14:
kp = '0';
break;
case 15:


13


kp = '#';
break;
case 16:
kp = 'D';
break;
}
if (kp == '#') {
inputCount++;
cot = inputCount == 1 ? cot + 1 : cot;
} else if (inputCount == 0) {
firstNumber *= 16;
firstNumber += hexToDec(kp);
Lcd_Chr(1, cot++, kp);
} else if (inputCount == 1) {
secondNumber *= 16;
secondNumber += hexToDec(kp);
Lcd_Chr(2, cot++, kp);
}
if (inputCount == 2) {
sum = firstNumber + secondNumber;
product = firstNumber * secondNumber;

// Corrected the typo

here
Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1, 1, "tong: ");
Lcd_Chr(1, 6, decToHex(sum / 16));
Lcd_Chr(1, 7, decToHex(sum % 16));
Lcd_Out(2, 1, "tich: ");
Lcd_Chr(2, 10, decToHex(product / 256));
Lcd_Chr(2, 11, decToHex((product % 256) / 16));
Lcd_Chr(2, 12, decToHex(product % 16));
}
} while (1);
}

14


* Kết quả

Hình 2.2. Chương trình đang tính tổng

15


BÀI 3: GIAO TIẾP VỚI CÁC ĐÈN LED 7 THANH
3.1. Mục đích
Tìm hiểu về led 7 thanh và phương pháp điều khiển
Lập trình ứng dụng hiển thị led 7 thanh
3.2. Cơ sở lý thuyết
3.2.1. Giới thiệu led 7 thanh
3.3. Thiết bị thực hành thí nghiệm và vật tư tiêu hao
3.3.1. Thiết bị thực hành
Máy tính cài đặt phần mềm MikroC for 8051

3.4. Các bước tiến hành thí nghiệm
3.4.1. Lập trình giao tiếp với các đèn led 7 thanh
3.4.2. Bài tập thực hành
1. Xây dựng đồng hồ hiển thị giờ và phút lên 04 led 7 thanh. Mô phỏng
trên proteus và kiểm tra trên mạch phần cứng.
* Code
#include <REGX51.H>
#define LED_PORT P0
unsigned char gio, phut;
#define led1 P2_0
#define led2 P2_1
#define led3 P2_2
#define led4 P2_3
#define sang 0
#define tat 1
unsigned char code Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82,
0xF8, 0x80, 0x90};
void delay(int time){
while(time--);
}
void main()
{
unsigned char gio, phut;

16


unsigned char chuc, dvi;
unsigned char i;
gio = 11; phut = 0;

while(1)
{
for(i=0;i<166;i++)
{
// Hien thi gio
chuc = gio/10;
dvi = gio%10;
LED_PORT = Code7Seg[chuc];
led1 = 0;
delay(1);
led1 = 1;
LED_PORT = Code7Seg[dvi];
led2 = 0;
delay(1);
led2 = 1;
// Hien thi phut
chuc = phut/10;
dvi = phut%10;
LED_PORT = Code7Seg[chuc];
led3 = 0;
delay(1);
led3 = 1;
LED_PORT = Code7Seg[dvi];
led4 = 0;
delay(1);
led4 = 1;
}
{
phut++;
if(phut==60)


17


{
phut = 0;
gio++;
if(gio == 24)
{
gio = 0;
}
}
}
}
}

* Kết quả

Hình 3.1. LCD đang hiển thị số giờ
2. Viết chương trình thực hiện cơng việc sau: nhập một số có 4 chữ số từ
ma trận phím hiển thị lên màn hình LCD 16x2 sau đó xây dựng bộ đếm tiến từ 0
đến giá trị vừa nhập hiển thị lên led 7 đoạn sau khi bấm phím * trên ma trận
phím. Mơ phỏng trên proteus và kiểm tra trên mạch phần cứng.
* Code
#include <REGX51.H>
charso[]=
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x89,0x06,0xC7,0x40};
char i;

18



int dem;
unsigned char nghin, tram, chuc, donVi;
#define led1 P2_0
#define led2 P2_1
#define led3 P2_2
#define led4 P2_3
#define sang 0
#define tat 1

void delay(int time){
while(time--);
}
void main(){
led1 = led2 = led3 = led4 = tat;
while(1){
for (dem=9999;dem>=0;dem--){
nghin = dem/1000;
tram = (dem%1000)/100;
chuc = ((dem%1000)%100)/10;
donVi = ((dem%1000)%100)%10;
for (i=0 ;i<=3;i++){
led1 =sang;
P0 = so[nghin];
delay(1000);
led1 = tat;
led2 = sang;
P0 = so[tram];
delay(1000);

led2 = tat;
led3 =sang;
P0 = so[chuc];
delay(1000);
led3 = tat;

19



×