Lập trình quét LE D7 đoạn và nút nhấn

Một phần của tài liệu Giáo trình vi điều khiển cơ bản dùng c++ (Trang 50 - 53)

- Các bit TI và R

Lập trình quét LE D7 đoạn và nút nhấn

Lập trình quét LED 7 đoạn và nút nhấn

Chào các bạn, hôm nay chúng ta sẽ tìm hiểu về quét led 7 đoạn và nút nhấn.

Quét LED 7 không khó như các bạn từng nghĩ, để quét dc led 7 thì trong ctr không dc sử dụng delay quá cao là ok, còn muốn tạo delay một khoảng thời gian nào đó thì lên sử dụng câu điều kiện if else và 1 biến đếm VD:

dem++;//Dem tự tăng

if(dem>time_delay){//Set khoảng thời gian cần time_delay

//code cần delay dem=0; }

OK, nguyên lý quét led 7 như sau: Khi ta cấp điện áp vào số nào thì đồng thời dữ liệu của số cần hiển thị sẽ dc xuất ra rồi cho delay nho nhỏ để nó sáng dạng xung PWM sau đó tắt led và chuyển sang số tiếp theo...v..v..

Có 2 cách quét led 7 là Quét A chung và K chung tương ứng mảng data phải ngược lại thì led 7 mới sáng dc VD: A chung thì để sáng số 0 thì ta phải xuất ra logic 0 ứng với các cạnh của số 0 Còn scan nút nhấn thì chúng ta chỉ cần sử dụng câu điều kiện kiểm tra logic là ok, thêm vòng lặp while để cho vdk không làm gì khi giữ nút.

OK! ta có thể code dc rồi:

#include <REGX51.H> /*

Ctr quet nut nhan va quet LED 7 Code by vuthai - SangTaoClub.Net

*/

#define DOUT P2 //Chan xuat data led 7 #define D1 P3_0 //Quet LED so 1 #define D2 P3_1 //Quet LED so 2 #define D3 P3_2 //Quet LED so 3 #define D4 P3_3 //Quet LED so 4 #define UP P3_6 //Nut nhan UP

#define DOWN P3_7 //Nut nhan DOWN

unsigned char Mang[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//Mang LED 7

char a,b;

unsigned char dem; /////////////////////

void delay(unsigned int t){ //Ham tao tre unsigned int i,j;

for(i=0;i<t;i++)for(j=0;j<100;j++); }

void quet_led(){//Ham quet 4 LED 7 D1=0; //Led so 1 sang

DOUT=Mang[a/10];//Xuat data gtri hang chuc cua bien a delay(1);//Tao tre

DOUT=0xff;//Ngat data (tat bong mo voi led don xep thanh led 7) D1=1;D2=0; //Led so 1 tat, led 2 sang

DOUT=Mang[a%10];//Xuat data gtri hang don vi cua bien a delay(1);

DOUT=0xff;

D2=1;D3=0; //Led so 2 tat, led 3 sang

DOUT=Mang[b/10];//Xuat data gtri hang chuc cua bien b delay(1);

DOUT=0xff;

D3=1;D4=0; //Led so 3 tat, led 4 sang

DOUT=Mang[b%10];//Xuat data gtri hang don vi cua bien b delay(1);

DOUT=0xff; D4=1;//Tat Led so 4 }

void nut_nhan(){//Ham scan nut nhan if(!UP){//Nut UP dc nhan (adsbygoogle = window.adsbygoogle || []).push({});

a++;//Tang gia tri

if(a>99)a=0;//Set ve 0 khi a>99 while(!UP);//Cho nha phim

}else if(!DOWN){//Nut DOWN dc nhan a--;//Giam gia tri

if(a<0)a=99;//Set ve 99 khi a<0 while(!DOWN);//Cho nha phim }

}

void main(){//Ctr chinh delay(500);

while(1){//Vong lap ctr

nut_nhan();//Scan nut nhan quet_led();//Scan LED 7 dem++;//Dem tu tang if(dem>100){

b++;//b tang dem=0;

if(b>99)b=0;//Set lai gia tri }

}} }

Mạch nguyên lý:

Download toàn bộ project:

Một phần của tài liệu Giáo trình vi điều khiển cơ bản dùng c++ (Trang 50 - 53)