Dưới đây là code C của em, chương trình này có chức năng nhập số từ bàn phím, phát ra loa tần số giá trị nhập vào từ bàn phím, em gặp các vấn đề sau:
+ Hàm hiển thị led của em tách hàng đơn vị, hàng chục riêng---> không thể giữ trạng thái Led sáng cùng lúc (em dùng con 7seg-LPX2-CC) khi nhấn phím.
+ Em làm gần xong rồi nhưng yêu cầu của Thầy dạy vi xử lí là tạo thêm một nút stop (ở đây em chọn phím 0) khi nhấn nút stop-->Loa ngừng kêu.
Các Anh có ý tưởng xin hướng dẫn cho em với, gần tới ngày báo cáo rồi, còn vướng chỗ này thôi.
Em đã thử sửa lại vd :case 1: { keep: {sang(1); loa=1; delay(20);loa=0;delay(20); while (1) {goto keep; } break; }} thì đèn đã giữ được trạng thái sáng, và loa (p1.7) kêu, nhưng không làm sao cho nó thoát được, nhấn phím khác thì không ăn thua.
+ Hàm hiển thị led của em tách hàng đơn vị, hàng chục riêng---> không thể giữ trạng thái Led sáng cùng lúc (em dùng con 7seg-LPX2-CC) khi nhấn phím.
+ Em làm gần xong rồi nhưng yêu cầu của Thầy dạy vi xử lí là tạo thêm một nút stop (ở đây em chọn phím 0) khi nhấn nút stop-->Loa ngừng kêu.
Các Anh có ý tưởng xin hướng dẫn cho em với, gần tới ngày báo cáo rồi, còn vướng chỗ này thôi.
Code:
#include <REGX51.H> sbit led1 = P2^0; sbit led2 = P2^1; sbit loa = P1^7; //HAM DELAY CO BAN void delay_us(int time) { while(time--); } //CAC GIA TRI THEO HEX XUAT RA LED 0-->9 unsigned char seg7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void sang(int n) { int c,dv,i; c=n/10; dv=n%10; P0=seg7[c]; led1=1;led2=0; delay_us(500); P0=0xff; delay_us(200); P0=seg7[dv]; led2=1;led1=0; delay_us(500); P0=0xff;delay_us(200); } void delay(unsigned char time){//Chuong trinh tao tre unsigned int t; for(t=0;t<time;t++){ TMOD=0x01; TH0=0xff; TL0=0xce; TR0=1; while(!TF0); TF0=TR0=0; } } //phimduocan void phim_duoc_an(unsigned char phim) { switch(phim)// Tuy vao so lan { case 0: { sang(0); break; } case 1: { {sang(1); loa=1; delay(20);loa=0;delay(20); break; }} case 2: { {sang(2); loa=1; delay(40);loa=0;delay(40); break; } } case 3: { {sang(3); loa=1; delay(60);loa=0;delay(60); break; } } case 4: { {sang(4); loa=1; delay(80);loa=0;delay(80); break; } } case 5: { {sang(5); loa=1; delay(100);loa=0;delay(100); break; } } case 6: {{sang(6); loa=1; delay(120);loa=0;delay(120); break; } } case 7: { {sang(7); loa=1; delay(140);loa=0;delay(140); break; } } case 8: { {sang(8); loa=1; delay(160);loa=0;delay(160); break; } } case 9: { {sang(9); loa=1; delay(180);loa=0;delay(180); break; } } case 10:{{sang(10); loa=1; delay(200);loa=0;delay(200); break; }} case 11:{{sang(11); loa=1; delay(220);loa=0;delay(220); break; }} case 12:{{sang(12); loa=1; delay(240);loa=0;delay(240); break; }} case 13:{{sang(13); loa=1; delay(260);loa=0;delay(260); break; }} case 14:{{sang(14); loa=1; delay(280);loa=0;delay(280); break; }} case 15:{{sang(15); loa=1; delay(300);loa=0;delay(300); break; }} } } unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7}; //HAM Quet PHIM #define solanquetphim 100 unsigned char quetbanphim(void) { unsigned char giatribanphim; unsigned char x,y; for(x=0; x<4;x++) { P3=quetphim[x];// Dua lan luot cac hang xuong 0 for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan { if(P3_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung if(P3_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x if(P3_6==0) giatribanphim=2+4*x;// La may ma gia tri cua if(P3_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung. } } return(giatribanphim); } //Hàm Main. void main(void) { unsigned char i; while(1) { i=quetbanphim(); phim_duoc_an(i); } }
Comment