Thựchành1:ThựchànhbàiLabvềtạođènnhấpnháy(8Led)
DùngphầnmềmProteusđểxâydựnglậptrìnhnhúngsau
Yêucầuthiếtkế:
01BomạchAT89C51
ĐènLed–Yellow
ĐiệntrởRes
NguồnđiệnPower
Yêu cầu:
1.Thiết kế sơ đồ mạch điện
2.Tạo nhấp nháy cho các bóng đèn
3.Tạo nhấp nháy bóng đèn chạy từ trái qua phảilần lượt
4.Tạo nhấp nháy bóng đèn chạy từ phảiqua trái lần lượt
5.Tạo nhấp nháy bóng đèn chạy từ giữa ra hai bên lần lượt
6.Tạo nhấp nháy bóng chạy từ ngoài hai bên vào chính giữa
Yêucầuthiếtkế:
01BomạchAT89C51
ĐènLed–Yellow
ĐiệntrởRes
NguồnđiệnPower
Yêu cầu:
1.Thiết kế sơ đồ mạch điện
2.Tạo nhấp nháy cho các bóng đèn
3.Tạo nhấp nháy bóng đèn chạy từ trái qua phảilần lượt
4.Tạo nhấp nháy bóng đèn chạy từ phảiqua trái lần lượt
5.Tạo nhấp nháy bóng đèn chạy từ giữa ra hai bên lần lượt
6.Tạo nhấp nháy bóng chạy từ ngoài hai bên vào chính giữa
Vídụ1:ThựchànhbàiLabvềtạođènnhấpnháy(8Led)
//Viết hàm nhấp nháy sang xuôi từ trái sang phải cho 4 cổng chính
void sangXuoi(){
int i;
for(i=0;i<8;i++){
P0 = THUAN[i];
delay(10000); }
for(i=0;i<8;i++){
P1 = THUAN[i];
delay(10000); }
for(i=0;i<8;i++){
P2 = THUAN[i];
delay(10000); }
for(i=0;i<8;i++){
P3 = THUAN[i];
delay(10000); }
}
Vídụ2:Tạođènnhấpnháytráitim(32Led)
//Hoặc viết lại hàm nhấp nháy sáng xuôi từ trái sang phải cho 4 cổng chính
void sangXuoi(int lan){
int i,j;
for(i=0;i<lan;i++){
for(j=0;j<8;j++){
P0=P1=P2=P3=THUAN[j];
delay(10000);
}
}
}
Vídụ2:Tạođènnhấpnháytráitim(32Led)
//Hoặc viết lại hàm nhấp nháy sang ngượctừ phải sang trái cho 4 cổng chính
void sangNguoc(int lan){
int i,j;
for(i=0;i<lan;i++){
for(j=0;j<8;j++){
P0=P1=P2=P3=NGUOC[j];
delay(10000);
}
}
}
Vídụ2:Tạođènnhấpnháytráitim(32Led)
//Tạo hiệu ứng lan tỏa từ giữa ra hai bên và từ trên xuống dưới
void tren_haiben(int lan){
int i,j;
for(i=0;i<lan;i++){
for(j=0;j<8;j++){
P0=THUAN[j];
P3=NGUOC[j];
P1=THUAN[j];
P2=NGUOC[j];
delay(10000);
}
}
}
Vídụ2:Tạođènnhấpnháytráitim(32Led)
//Tạo hiệu ứng lan tỏa từ giữa ra hai bên và từ dướilên trên
void duoi_haiben(int lan){
int i,j;
for(i=0;i<lan;i++){
for(j=0;j<8;j++){
P1=NGUOC[j];
P2=THUAN[j];
P0=NGUOC[j];
P3=THUAN[j];
delay(10000);
}
}
}
Vídụ2:Tạođènnhấpnháytráitim(32Led)
//Hàm chính để chạy chương trình
void main(){
// tao 1 vong while chay vo tan
while(1){
blink(10);
sangXuoi(3);
sangNguoc(3);
}
}
Vídụ2:Tạođènnhấpnháytráitim(32Led)
Các yêu cầu:
Mạch 8051: AT89C51
Thanh 7SEG-MPX2-CA
Đèn LED –BIBY
Điện trở RES
Điện trở bang RESPACK-7
NOT
Nút bấm BUTTON
Nguồn điện POWERvà nguồn tiếp đất GROUND
Lab4:Tạođồnghồsố
Lab5:Tạođèngiaothông
Thiết kế hệ thống mạch tín hiệu giao thông
Các yêu cầu:
Mạch 8051: AT89C52
Thanh 7SEG-COM-ANODE
Đèn LED-GREEN
Đèn LED-RED
Đèn LED-YELLOW
Điện trở RES
Nguồn điện POWERvà nguồn tiếp đất GROUND
Lab5:Tạođèngiaothông
#include"main.h"
#include"delay.h"
unsigned char code so[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90}; //Khai báo các số đèn sang từ 0->9
// Khai bao ket noi
sbit DEN_DO = P0^0;
sbit DEN_VANG = P0^1;
sbit DEN_XANH = P0^2;
#define LED_CHUC P2
#define LED_DVI P3
Lab5:Tạođèngiaothông
Bước 1:
Tạo một file tên là: main.c
void main(){ // Chương trình chính
signed char i;
while(1){
DEN_DO = 0;// Thực hiện bật đèn đỏ
DEN_XANH = 1;
DEN_VANG = 1;
for(i=20;i>=0;i--){
LED_CHUC = so[i/10];
LED_DVI = so[i%10];
Delay_ms(1000);
}
Lab5:Tạođèngiaothông
Bước 2:
Tạo một file mới và lưu lại tên là: main.h
Sau đó thực hiện viết đoạn code chương trình sau:
#ifndef _MAIN_H_
#define _MAIN_H_
#include<regx52.h>
#define FREQ_OSC 12000000ul
#endif
Lab5:Tạođèngiaothông
// Tạo một hàm trễ thời gian Delay
#include"Delay.h"
#include"main.h"
#if(FREQ_OSC == 12000000)
void Delay_ms(unsigned int t){
unsigned int x,y;
for(x=0;x<t;x++){ for(y=0;y<123;y++); }
}
Lab5:Tạođèngiaothông
Bước 3:
Tạo một file tên là: delay.c
để viết hàm độ trễ thời gian
Delay
#elif(FREQ_OSC == 11059200)
void Delay_ms(unsigned int t){
unsigned int x, y;
for(x = 0; x<t; x++){
for(y=0; y<113; y++);
}
}
#elif(FREQ_OSC == 8000000)
void Delay_ms(unsigned int t){
unsigned int x;
unsigned char y;
for(x = 0; x<t; x++){
for(y=0; y<218; y++);
}
}
Lab5:Tạođèngiaothông
#elif(FREQ_OSC == 4000000)
void Delay_ms(unsigned int t){
unsigned int x;
unsigned char y;
for(x = 0; x<t; x++) {
for(y=0; y<106; y++);
}
}
#else
#error "Khong co ham Delay_ms nao
tuong ung"
#endif
Bước 4:
Tạo một file tên là: delay.h
Sau đó viết code cho hàm độ trễ thời gian Delay
#ifndef _DELAY_H_
#define _DELAY_H_
void Delay_ms(unsigned int t);
#endif
Lab5:Tạođèngiaothông
Lab6:MôtảmànhìnhLCDhiểnthịchữchạy
Lab6:MôtảmànhìnhLCDhiểnthịchữchạy
Yêu cầu:
Mạch AT89C51
Màn hình: LM016L
DC: hiển thị 5V trong menu Generator Mode
Nguồn tiếp đất: Ground
BÀI KIỂM TRA: 01 TIẾT
Yêu cầu:
(1). Thiết kế hình ngôi sao 5 cánh sau
(2). Nhấp nháy 3 lần liên tiếp
(3). Vẽ đèn ngôi sao lần lượt theo chiều kim đồng hồ
(4). Vẽ đèn chạy dọc xung quanh theo đườngbiên
(5). Đèn sáng dừng
Anh/ Chị hãy thiết kế đèn Led hình ngôi sao 5 cánh, với
các thiết bị sau:
(1). Mạch 8051: AT89C51
(2). Đèn LED –YELLOW (Tổng 20 đèn Led)
Yêu cầu thực hiện viết chương trình C sau:
1. Tạo cho tất cả đèn Led nhấp nháy liên tục
2. Chạy đèn Led nhấp nháy theo chiều thuận vẽ hình ngôi
sao
3. Chạy đèn Led nhấp nháy theo đườngviền tròn xung
quang
ĐỀ KIỂM TRA (1 tiết)
ARDUINO
ARDUINO
Bước 1: Kết nối arduino uno r3 với máy tính.
HướngdẫnkếtnốiArduinounoR3vớimáytính
Download Bộ thư viên hỗ trợ các dòng Arduino cho
Protues:ARDUINO.IDXvà ARDUINO.LIB để có các mạch của Arduino sau:
-Arduino Uno R3
-Arduino Mega 2560
-Arduino Mega 1280
-Arduino Nano
-Arduino Mini
-Arduino Pro Mini
Sau đó copy vào đường dẫn sau
C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\LIBRARY
Kết nối giữa Arduino với Protues
// Hàm setup chạy một lần duy nhất khi khởi động chương trình
void setup() {
// đặt 'led' là OUTPUT
pinMode(13, OUTPUT);
}
// Hàm loop chạy mãi mãi sau khi kết thúc hàm setup()
void loop() {
digitalWrite(13, HIGH); // bật đèn led sáng
delay(1000); // dừng chương trình trong 1 giây
digitalWrite(13, LOW); // tắt đèn led
delay(1000); // dừng chương trình trong 1 giây
}
HướngdẫnkếtnốiArduinounoR3vớimáytính
Hiển thị màn hình LCD giữa Arduino với Protues
Thiếtbịcầnlấy
(1)BomạchArduino:SIMULINOUNO
(2)MànhìnhLCD:LM016L
(3)Điệntrở:POT
MặcđịnhđườngdẫncủaArduinoxuấtrafile.hex
C:\\Users\\Admin\\AppData\\Local\\Temp\\arduin
o_build_445251/LCD.ino.hex
Hiển thị màn hình LCD giữa Arduino với Protues
#include<LiquidCrystal.h>
LiquidCrystallcd(12,11,5,4,3,2);
voidsetup(){
}
voidloop(){
}
Hiển thị màn hình LCD giữa Arduino với Protues
Thiếtbịcầnlấy
(1)BomạchArduino:SIMULINOUNO
(2)Điệntrở:MINRES330R
(3)ĐènLed:RED,BLUE
MặcđịnhđườngdẫncủaArduinoxuấtrafile.hex
C:\\Users\\Admin\\AppData\\Local\\Temp\\arduin
o_build_445251/LCD.ino.hex
Tạo đèn nhấp nháy giữa Arduino với Protues
Tạo các số sử dụng Arduino với Protues
Thiếtbịcầnlấy
(1)BomạchArduino:SIMULINOUNO
(2)Điệntrở:MINRES330R
(3)ĐènLed:7SEG-COM-CATHODE
Tạo các số trên bo mạch Arduino với Protues
Đo nhiệt độ, độ ẩm trên bo mạchArduino với Protues
Đo lường khoảng cách dựa vào Arduino và cảm biến siêu âmHC-SR04
Đo lường khoảng cách dựa vào Arduino và cảm biến siêu âmHC-SR04
//chân ST_CP của 74HC595
int latchPin = 8;
//chân SH_CP của 74HC595
int clockPin = 12;
//Chân DS của 74HC595
int dataPin = 11;
// Ta sẽ xây dựng mảng hằng số với các giá trị cho trước
// Các bit được đánh số thứ tự (0-7) từ phải qua trái (tương ứng với
A-F,DP)
// Vì ta dùng LED 7 đoạn chung cực dương nên với các bit 0
// thì các đoạn của LED 7 đoạn sẽ sáng
// với các bit 1 thì đoạn ấy sẽ tắt
//mảng có 10 số (từ 0-9) và
const byte Seg[10] = {
0b11000000,//0 -các thanh từ a-f sán
0b11111001,//1 -chỉ có 2 thanh b,c sán
0b10100100,//
0b10110000,//
0b10011001,//
0b10010010,//
0b10000010,//
0b11111000,//
0b10000000,//
0b10010000,//
};
void setup() {
pinMode(latchPin, OUTPUT)
pinMode(clockPin, OUTPUT)
pinMode(dataPin, OUTPUT)
}
void HienThiLED7doan(unsigned long Giatri, byte SoLed = 2) {
byte *array= new byte[SoLed]
for (byte i = 0; i < SoLed; i++)
//Lấy các chữ số từ phải quá trái
array[i] = (byte)(Giatri % 10UL)
Giatri = (unsigned long)(Giatri /10UL)
digitalWrite(latchPin, LOW)
for (int i = SoLed -1; i >= 0; i--
shiftOut(dataPin, clockPin, MSBFIRST, Seg[array[i]]);
digitalWrite(latchPin, HIGH)
free(array)
}
void loop() {
static unsigned long point = 0
HienThiLED7doan(point, 2)
point = (point + 1) % 100UL; // Vòng tuần hoàn từ 0--9
delay(500);//Đợi 0.5 s cho mỗi lần tăng s
}