em đang chuẩn bị làm mạch thật cái ds1307 và avr nhưng ko biết viết code chỉnh giờ như thế nào mong các anh giúp vơi, có 1 nút mode để chọn và 1 nút tăng giảm nữa là được rồi, với lại các anh chỉ em code chống trôi phím luôn với9.zip
code chỉnh giờ và chống trôi phím
Collapse
X
-
Nếu bạn làm hiển thị với LCD thì có thể tham khảo đoạn code này, đây là 1 file trong project của mình, với chức năng change_time();
Code này viết trên CCS.Code:/* ************************************************************************************************************************************* * SETUP TIME * ************************************************************************************************************************************* */ void set_time(int8 selection) { int8 temp; LCD_Cmd(0x01); if (selection==1) { LCD_Char("SETTING TIME MODE"); LCD_Position(0x40); LCD_Char("Hour: "); int hou= read_ds1307(2); temp=hou; } if (selection==2) { LCD_Char("SETTING TIME MODE"); LCD_Position(0x40); LCD_Char("Minute: "); int min= read_ds1307(1); temp=min; } if (selection==3) { LCD_Char("SETTING TIME MODE"); LCD_Position(0x40); LCD_Char("Date: "); int date= read_ds1307(4); temp=date; } if (selection==4) { LCD_Char("SETTING TIME MODE"); LCD_Position(0x40); LCD_Char("Month: "); int mon= read_ds1307(5); temp=mon; } if (selection==5) { LCD_Char("SETTING TIME MODE"); LCD_Position(0x40); LCD_Char("Year: "); int year= read_ds1307(6); temp=year; } if (selection==6) { LCD_Char("SETTING TIME MODE"); LCD_Position(0x40); LCD_Char("Day: "); int day= read_ds1307(3); temp=day; } LCD_Position(0x49); temp=bcdToDec(temp); printf(LCD_Char, "%u" , temp); while(1){ LCD_Position(0x49); printf(LCD_Char, "%u" , temp); if ( !input(up)) { delay_ms(300); temp++; if( selection==1 && temp==24 ) {temp=0; LCD_Position(0x49);; LCD_Char(" ");} if( selection==2 && temp==60 ) {temp=0; LCD_Position(0x49); LCD_Char(" ");} if( selection==3 && temp==32 ) {temp=1; LCD_Position(0x49); LCD_Char(" ");} if( selection==4 && temp==13 ) {temp=1; LCD_Position(0x49); LCD_Char(" ");} if( selection==5 && temp==100 ) {temp=0; LCD_Position(0x49); LCD_Char(" ");} if( selection==6 && temp==8 ) {temp=1; LCD_Position(0x49); LCD_Char(" ");} } if ( !input(down)) { delay_ms(300); if( selection==1&& temp==0 ) {temp=24; LCD_Position(0x49); LCD_Char(" ");} if( selection==2 && temp==0 ) {temp=60; LCD_Position(0x49); LCD_Char(" ");} if( selection==3 && temp==1 ) {temp=32; LCD_Position(0x49); LCD_Char(" ");} if( selection==4 && temp==1 ) {temp=13; LCD_Position(0x49); LCD_Char(" ");} if( selection==5 && temp==0 ) {temp=100; LCD_Position(0x49); LCD_Char(" ");} if( selection==6 && temp==1 ) {temp=8; LCD_Position(0x49); LCD_Char(" ");} if (temp==10) { LCD_Position(0x49);; LCD_Char(" "); } temp--; } if ( !input(mode)){ delay_ms(400); select_time=7; break; } if ( !input(set)) { delay_ms(400); select_time++; if(select_time==7) select_time=1;break; } } if (selection==1) { hou=decToBcd((int8)temp); write_ds1307(2,hou); } if (selection==2) { min=decToBcd((int8)temp); write_ds1307(1,min); } if (selection==3) { date=decToBcd((int8)temp); write_ds1307(4,date); } if (selection==4) { mon=decToBcd((int8)temp); write_ds1307(5,mon); } if (selection==5) { year=decToBcd((int8)temp); write_ds1307(6,year); } if (selection==6) { day=decToBcd((int8)temp); write_ds1307(3,day); } } void change_time() { switch (select_time) { Case 1: set_time(1); break; Case 2: set_time(2); break; Case 3: set_time(3); break; Case 4: set_time(4); break; Case 5: set_time(5); break; Case 6: set_time(6); break; Case 7: menu=3; select_time=1; break; } }
ThânWeb:
->Nhận thiết kế, hoàn thiện dự án, sản phẩm điện tử<-
-->Giải pháp GSM/GPRS/GPS - Công nghệ RFID<--
-
bạn có thể dùng ngắt. mỗi khi có ngắt tăng biến lên 1 đơn vị và tương ứng vs mỗi giá trị của biến đó là bạn cho nó 1 nhiệm vụ nhất định ví dụ x=1 settime.... kết hợp thêm phím up và down trong mỗi sự kiện nữa là ok rồi.Nguyễn Huy Biên - 01649 802 694
gmail :
Comment
-
đây là cách của mình viết hàm thay thế ngắt :
code :
bit a,sb ; //khai báo biến a,sb có kiểu bit(0 ,1)
DDRA.0=0;//thiết lập porta.0 là nút nhấn
if(sb&&PORTA.0==1)
{
sb=0; //ham kiem tra phim nhan
}
if(sb=0&&PORTA.0=0)
{
a=~a;//thực hiện công việc của bạn ở đây mình đảo bít a
}
Comment
Bài viết mới nhất
Collapse
-
bởi Nexus 6PMạch này chỉ chạy cho LED 10W trở xuống, còn muốn chạy Led công suất cao thì sao bác thớt ơi?-
Channel: Điện tử công suất
Hôm qua, 14:33 -
-
bởi Nexus 6PMạch này chỉ chạy cho LED 10W trở xuống, còn muốn chạy Led công suất cao thì sao bác thớt ơi?-
Channel: Điện tử công suất
Hôm qua, 10:49 -
-
Trả lời cho Tìm VR 5 chânbởi dinhthuong80Cảm ơn bác bqviet . Nhưng hình như các VR 5 chân của linhkienchatluong là loại có 2 chân là công tắc đóng mở. Thấy trên Shopee có chỗ bán linh kiện đàn Organ, mà không biết đúng loại không, với lại sao ... mắc dữ dội luôn ấy!!!
...-
Channel: Hướng dẫn tìm thông tin linh kiện
19-10-2026, 11:30 -
-
Trả lời cho Tìm VR 5 chânbởi bqvietTrang sản phẩm này có loại 5 chân và 8 chân
https://linhkienchatluong.vn/chiet-a...doi_s1595.aspx
Ngoài ra một trang cùng cấp với nó có loại 6 chân nữa, chắc đủ cho người muốn tìm....-
Channel: Hướng dẫn tìm thông tin linh kiện
17-10-2026, 17:19 -
-
bởi dinhthuong80Chào cả nhà, chúc cuối tuần vui vẻ!
Hôm nay mình lên đây nhờ ai biết chỉ dùm biến trở 5 chân này tên gọi là gì, có thể mua ở đâu vậy? Xin cám ơn nhiều! ...-
Channel: Hướng dẫn tìm thông tin linh kiện
-

Comment