Yêu cầu VD2: dùng toán tử số học để thể hiện giá trị nhị phân của các số nguyên trên các Led mắc anode chung Hình mô phỏng trên proteus Code trong adruno #include //LED1 ung voi bit 0 L
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
- -BÁO CÁO THÍ NGHIỆM NGÔN NGỮ LẬP
TRÌNH
Mã lớp học: 697121
Sinh viên thực hiện: Trần Văn Đạt - 20172453
Trang 21 Yêu cầu VD1: mở rộng trên 8 LED và thay đổi tốc độ chạy
Hình ảnh mô phỏng trên Proteus
Code trong adruno
#include <LabC.h>
Output LED1=LED_BAND-17;//LED duoc noi voi chan so 12 va co vai tro la output
Output LED2=LED_BAND-18;
Output LED3=LED_BAND-19;
Output LED4=LED_BAND-20;
Output LED5=LED_BAND-21;
Output LED6=LED_BAND-22;
Output LED7=LED_BAND-23;
Output LED8=LED_BAND-24;
Delay DELAY;
void setup() {
}
void loop() {
//led1 sang
LED1=0;
LED2=1;
Trang 3LED3=1; LED4=1; LED5=1; LED6=1; LED7=1; LED8=1; DELAY=100; //led2 sang LED1=1; LED2=0; LED3=1; LED4=1; LED5=1; LED6=1; LED7=1; LED8=1; DELAY=200; //led3 sang LED1=1; LED2=1; LED3=0; LED4=1; LED5=1; LED6=1; LED7=1; LED8=1; DELAY=300; //led4 sang LED1=1; LED2=1; LED3=1; LED4=0; LED5=1; LED6=1; LED7=1; LED8=1; DELAY=400; //led5 sang LED1=1; LED2=1;
Trang 4LED3=1; LED4=1; LED5=0; LED6=1; LED7=1; LED8=1; DELAY=500; //led6 sang LED1=1; LED2=1; LED3=1; LED4=1; LED5=1; LED6=0; LED7=1; LED8=1; DELAY=600; //led7 sang LED1=1; LED2=1; LED3=1; LED4=1; LED5=1; LED6=1; LED7=0; LED8=1; DELAY=700; //led8 sang LED1=1; LED2=1; LED3=1; LED4=1; LED5=1; LED6=1; LED7=1; LED8=0; DELAY=800;
}
Trang 52 Yêu cầu VD2: dùng toán tử số học để thể hiện giá trị nhị phân của các số nguyên trên các Led mắc anode chung
Hình mô phỏng trên proteus
Code trong adruno
#include <LabC.h>
//LED1 ung voi bit 0 LED2 ung voi bit 1
Output LED1=LED_BAND-17;//LED duoc noi voi chan so 12 va co vai tro la output
Output LED2=LED_BAND-18;
Output LED3=LED_BAND-19;
Output LED4=LED_BAND-20;
Output LED5=LED_BAND-21;
Output LED6=LED_BAND-22;
Output LED7=LED_BAND-23;
Output LED8=LED_BAND-24;
Delay DELAY;
void setup() {
unsigned int a;//a la gia tri so nguyen
}
void loop() {
a=~1;
Trang 6LED1=a/1%2; LED2=a/2%2; LED3=a/4%2; LED4=a/8%2; LED5=a/16%2; LED6=a/32%2; LED7=a/64%2; LED8=a/128%2; DELAY=200; a=~2;
LED1=a/1%2; LED2=a/2%2; LED3=a/4%2; LED4=a/8%2; LED5=a/16%2; LED6=a/32%2; LED7=a/64%2; LED8=a/128%2; DELAY=200; a=~4;
LED1=a/1%2; LED2=a/2%2; LED3=a/4%2; LED4=a/8%2; LED5=a/16%2; LED6=a/32%2; LED7=a/64%2; LED8=a/128%2; DELAY=200; a=~8;
LED1=a/1%2; LED2=a/2%2; LED3=a/4%2; LED4=a/8%2; LED5=a/16%2; LED6=a/32%2; LED7=a/64%2; LED8=a/128%2; DELAY=200;
Trang 7
}
3 Yêu cầu VD3: dùng vòng lặp while để cho các Led chạy từ trái sang phải và ngược lại
Hình ảnh mô phỏng trên proteus
Code trong adruno để LED sáng từ trái sang phải:
#include <LabC.h>
Delay DELAY;
void setup() {
unsigned int i;
}
void loop() {
i=0;
while (i<8){
Output LED=LED_BAND-(17+i);
LED=0;
i++;
DELAY=200;
LED=1;}
}
Để LED sáng từ phải sang trái:
Trang 8#include <LabC.h>
Delay DELAY;
void setup() {
unsigned int i;
}
void loop() {
i=0;
while (i<8){
Output LED=LED_BAND-24+i;
LED=0;
i++;
DELAY=200;
LED=1;}
}
4 Yêu cầu VD4: dùng toán tử sử lý bit để cho các LED sáng lần lượt từ phải sang trái(ngược chiều với VD)
Hình ảnh mô phỏng trên proteus
Code trong druno
#include <LabC.h>
Delay DELAY;
void setup() {}
Trang 9unsigned int a;
void loop() {
a = 1;
while (a < 512) {
unsigned int x = ~a;
for (int i = 0; i < 8; i++) {
Output LED = LED_BAND -24 + i; LED = (x >> i) & 1;
}
DELAY = 100;
a <<= 1;
}
}
5 Yêu cầu VD5: sử dụng LED7 thanh anode chung Hình ảnh mô phỏng trên proteus
Code trong adruno
#include <LabC.h>
Output seg_a=2;
Output seg_b=3;
Output seg_c=4;
Output seg_d=5;
Output seg_e=6;
Trang 10Output seg_f=7;
Output seg_g=8;
Delay DELAY;
void Number(int number) {
switch(number){
case 0: seg_a=0;seg_b=0;seg_c=0;seg_d=0;seg_e=0;seg_f=0;seg_g=1;break; case 2: seg_a=0;seg_b=0;seg_c=1;seg_d=0;seg_e=0;seg_f=1;seg_g=0;break; case 3: seg_a=0;seg_b=0;seg_c=0;seg_d=0;seg_e=1;seg_f=1;seg_g=0;break; case 4: seg_a=1;seg_b=0;seg_c=0;seg_d=1;seg_e=1;seg_f=0;seg_g=0;break; case 5: seg_a=0;seg_b=1;seg_c=0;seg_d=0;seg_e=1;seg_f=0;seg_g=0;break; case 6: seg_a=0;seg_b=1;seg_c=0;seg_d=0;seg_e=0;seg_f=0;seg_g=0;break; case 7: seg_a=0;seg_b=0;seg_c=0;seg_d=1;seg_e=1;seg_f=1;seg_g=1;break; case 8: seg_a=0;seg_b=0;seg_c=0;seg_d=0;seg_e=0;seg_f=0;seg_g=0;break; case 9: seg_a=0;seg_b=0;seg_c=0;seg_d=0;seg_e=1;seg_f=0;seg_g=0;break; default: break;
}
}
void setup(){
}
void loop() {
Number(0);
DELAY =500;
Number(1);
DELAY =500;
Number(2);
DELAY =500;
Number(3);
DELAY =500;
Number(4);
DELAY =500;
Number(5);
DELAY =500;
Number(6);
DELAY =500;
Number(7);
DELAY = 500;
Number(8);
DELAY =500;
Number(9);
DELAY =500;
Trang 116 Yêu cầu VD6: dùng mảng hiển thị số trên LED7 thanh anode chung đưa giá trị ra led được chọn
Hình mô phỏng trên proteus
Code trong adruno
#include <LabC.h>
Delay DELAY;
Output LEDS[4];
Output PINS[8];
unsigned int code7[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; void setup() {
for (int i = 0; i < 4; i++) {
Output led = 10 + i;
led = 1;
LEDS[i] = led;
}
for (int i = 0; i < 8; i++) {
Trang 12Output pin = 2 + i;
PINS[i] = pin;
}
}
void loop() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
LEDS[j] = (i == j);
}
int code = code7[i];
DELAY = 100;
}
}
7 Yêu cầu VD7: dùng con trỏ hiển thị số trên LED7 thanh anode chung đưa giá trị ra LED được chọn
Hình ảnh mô phỏng trên proteus
Code trong adruno
Trang 13#include <LabC.h>
Delay DELAY;
Output LEDS[4];
Output PINS[8];
unsigned int code7[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void setup() {
for (int i = 0; i < 4; i++) {
Output led = 10 + i;
led = 1;
LEDS[i] = led;
}
for (int i = 0; i < 8; i++) {
Output pin = 2 + i;
PINS[i] = pin;
}
}
void loop() {
for (int i = 0; i < 4; i++) {
for (Output * p = LEDS; p < LEDS + 4; p++) {
* p = (p - LEDS == i);
}
int code = code7[i];
DELAY = 100;
}
}
8 Yêu cầu VD8a: viết hàm write cho 8 LED đơn katot chung
Hình ảnh mô phỏng trên proteus
Trang 14Code trong adruno
#include <LabC.h>
Delay DELAY;
Output PINS[8];
unsigned int a;
void Write(int a, int pin) {
for (int i = 0; i < 8; i++) {
Output p = pin + i;
p = a & (1 << i);
}
}
void setup() {
}
void loop() {
for (a=0; a<256;a++){
Write(a,6);
DELAY =100;
}
}
VD8b: Viết hàm write7 để đưa số nhỏ hơn 10 ra LED 7 thanh Hình ảnh mô phỏng trên proteus
Trang 15Code trong adruno
#include <LabC.h>
Delay DELAY;
unsigned int a, hex7[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void Write7(int num){
unsigned int t = hex7[num];
for(int i = 0; i<8; i++){
Output SEG = 8 -i;
SEG = (t >> i) & 1;
}
}
void setup() {
}
void loop() {
for (a=0; a<10;a++){
Write7(a);
DELAY =100;
}
}
9 Yêu cầu VD9: dùng hàm split tách một số nguyên thành 4 chữ số hiển thị từ 0000 đến 9999 trên LED 7 thanh với độ trễ 1s
Trang 16Hình ảnh mô phỏng trên proteus
Code trong adruno
#include<LabC.h>
Output D1 = 10;
Output D2 = 11;
Output D3 = 12;
Output D4 = 13;
unsigned int hex7[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
Delay DELAY;
void Number(int num){
unsigned int a = hex7[num];
for(int i = 0; i<8; i++){
Output Seg = 2 +i;
Seg = (a >> i) & 1;
}
}
void Off(){
D1 = 0;
D2 = 0;
D3 = 0;
D4 = 0;
Trang 17void Print(int num){
int hangnghin = num/1000;
int hangtram = num%1000/100;
int hangchuc = num%1000%100/10;
int hangdonvi = num%1000%100%10;
for(int i = 0; i<25; i++)// trạng thái lặp lại 25 lần tương đương delay 1s
{
Off();
D1 = 1;
Number(hangnghin);
DELAY = 1;
Off();
D2 = 1;
Number(hangtram);
DELAY = 1;
Off();
D3 = 1;
Number(hangchuc);
DELAY = 1;
Off();
D4 = 1;
Number(hangdonvi);
DELAY = 1;
}
}
void setup() {
}
void loop() {
for(int i=0; i<10000; i++){
Print(i);
}
}
10 Yêu cầu VD10: viết hàm để LED đơn(katot chung) chạy từ phải sang trái(loại bỏ
đệ quy)
Hình ảnh mô phỏng trên proteus
Trang 18Code trong adruno
#include <LabC.h>
Delay DELAY;
Output PINS[8];
unsigned int a;
void Write(int a, int pin) { for (int i = 0; i < 8; i++) { Output p = pin + i;
p = a & (1 << i);
}
}
void setup() {
}
void loop() {
for (int j=1;j<256;j=j*2){ Write(j,6);
DELAY =100;
}
}
Trang 19// Do buổi trước em còn nhiều thắc mắc nên báo cáo buổi 1 không đấy đủ nên báo cáo lần này gồm cả buổi 1 và buổi 2
Mong thầy thông cảm
Em xin chân thành cảm ơn!!