phần code này mình đã viết và test rồi nhưng vẫn không chạy đúng. Bạn nào sửa giúp mình với nhé. Cảm ơn nhiều.
Yêu cầu đề bài như sau:
gồm 4 led 7 thanh thứ tư hang nghìn, tram, chục, đơn vị, là 0,1,2,3
phần cứng là mặc định rồi ko sửa được
Viết chương trình ấn nút tăng thì số tăng, ấn nút giảm thì số giảm.
Khởi tạo ban đầu là 0000.
nếu giảm dưới 0 sẽ có dấu (-).
các bạn giúp mình với nhé.
mình khổ sở vì bài này nhiều lắm rồi.
cần thiết lien hệ vs mình qua hòm thư nhé: rikilo1234@gmail.com
Cảm ơn nhiều
code ne
Yêu cầu đề bài như sau:
gồm 4 led 7 thanh thứ tư hang nghìn, tram, chục, đơn vị, là 0,1,2,3
phần cứng là mặc định rồi ko sửa được
Viết chương trình ấn nút tăng thì số tăng, ấn nút giảm thì số giảm.
Khởi tạo ban đầu là 0000.
nếu giảm dưới 0 sẽ có dấu (-).
các bạn giúp mình với nhé.
mình khổ sở vì bài này nhiều lắm rồi.
cần thiết lien hệ vs mình qua hòm thư nhé: rikilo1234@gmail.com
Cảm ơn nhiều
code ne
Code:
#include <AT89x52.h> #define data_7 P1_0 #define clock_7 P1_1 #define latch_7 P1_2 #define Led_R P1_3 #define Led_G P1_4 #define Led_B P1_5 #define nut_tang P0_4 #define nut_giam P0_5 int dem; unsigned int j,k; unsigned char data_ht[4]; unsigned char ma_ht[] = {0x18, 0xde, 0x34, 0x94, 0xd2, 0x91, 0x11, 0xdc, 0x10,0x90,0xf7};// mã led từ 0-9, 0xf7 là led g unsigned char mat_na[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};// mã này dung để tách bit bit nhapnhay = 0; void delay_us(unsigned int delay_us) { unsigned int i; for(i=0;i<=delay_us;i++); } void delay_ms(unsigned int delay_ms) { unsigned int i; for(i=0;i<delay_ms;i++) delay_us(120); }// chương trình trễ phần này mình test rồi void dau_tru(void) // chương trình con hiện dấu trừ { if (dem<10) data_ht[2]=10; // led số 2 có dấu (-) if((dem>=10)&(dem<100))data_ht[1]=10;// led số 1 có dấu (-) if((dem>=100)&(dem<1000))data_ht[0]=10;//led số 0 có dấu (-) }// cái này phần cứng thầy mình cho sẵn tương ưng với led đơn vị, chục, tram, nghìn là : 3,2,1,0. void bam_nut(void) { if ((nut_tang==0)|(nut_giam==0)) // ban đầu kiểm tra có nút bấm hay ko { while(nut_tang==0) //bấm nút tang { delay_ms(100); if(data_ht[3-k]!=10)dem++; // nếu đèn led ngay phía trước không sáng dấu (-) 0xf7 thanh g không sáng thì dem tang, mình dang ko chắc chắn ở dòng lệnh kiểm tra dấu âm này nhưng cũng ko biết sửa sao cho đúng. else dem--; // nếu thanh g sáng tức là có dấu (-) thì dem sẽ giảm } while((nut_giam==0)&(dem!=0)) // trong trường hợp bấm nút giảm mà đếm khác 0 { delay_ms(100); dem--; // giảm đếm( nghĩa là lúc này đếm đang dương) } while((nut_giam==0)) // trong trường hợp bấm nút giảm mà đếm =0 { delay_ms(100); dem++;// tang đếm trong TH này đếm đang âm dau_tru();// và chạy chương trình dấu trừ } // mình biết vòng while này bị lỗi vì nếu tang đếm thì đếm sẽ khác 0 và out ra mất, nhưng vẫn chưa sửa được hic. Các bạn giúp với nhé :laychua: } } // chủ yếu ở chương trình nút bấm này. Mình đã làm nhiều nhưng chương trình không hiển thị được dấu (-) và chạy vẫn ko đúng yêu cầu mặc dù phần (+) đúng void main (void) { P0 = 0xff; P1 = 0x00; dem = 0; while (1) { Led_G = nhapnhay; data_ht[3] = dem%10;// led hang đơn vị data_ht[2] = (dem/10)%10;// led hang chục data_ht[1] = (dem/100)%10;// led hang trăm data_ht[0] = (dem/1000)%10;// led hang nghìn for (k=0;k<4;k++) { for (j=0;j<8;j++) { data_7 = ma_ht[data_ht[k]] & mat_na[j];// tách bit clock_7 = 1; delay_us(10); clock_7 = 0; }// hai dòng for này để chuyển bit vào, các bạn ko cần để ý đâu mình test rồi bam_nut(); dau_tru(); } latch_7 = 1; delay_us(10); latch_7 = 0; nhapnhay = ~nhapnhay; }//of while (1) }// of main ************