em có 1 file Code cho Avr Atmega 16.lịch vạn niên.nhưng em mù tịt ah.ai giúp em giải thích các câu lệnh trong đoạn code do với.ý em là em sẽ đến tận chỗ các bác.mong các bác thương tình thằng em mới tìm hiểu mà giúp đỡ.yahoo của em nè:thinhvip58 hoặc số dt:01696890257
Thông báo
Collapse
No announcement yet.
Có bác nào rành về lập trình avr thì giúp em với
Collapse
X
-
Ý MÌNH LÀ MÌNH MUỐN ĐƯỢC GIẢI THÍCH TỪNG LỆNH 1 CỦA DOAN CODE.VÌ MINH HỌC YẾU MÔN NÀY LẮM..MA MÌNH SẮP PHẢI BẢO VỆ ĐỒ ÁN MÔN HOC RÙI.ĐÂY LÀ CODE CỦA MÌNH NÈ:
#include <mega16.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
#define mode PIND.0
#define up PIND.2
#define down PIND.1
#define l1 PORTC.2 //4 CHAN DK LED DOAN
#define l2 PORTC.3
#define l3 PORTC.4
#define l4 PORTC.5
#define l5 PORTC.6
#define l6 PORTC.7
#define l7 PORTA.7
#define l8 PORTA.6
#define l9 PORTA.5
#define l10 PORTA.4
#define l11 PORTA.3
#define l12 PORTA.2
#define l13 PORTA.1
#define ACK 1
#define NO_ACK 0
// khai bao bien
unsigned char Hour,Min,Sec,DayofWeek,Day,Month,Year;
unsigned char so[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0}; // ma 7 doan
unsigned char data[7]; //mang chua gia tri thoi gian doc tu ds1307
//-------------------------------
// Read RTC
//-------------------------------
void ReadRTC(unsigned char * buff)
{
i2c_start();
i2c_write(0xD0);
i2c_write(0x00);
i2c_start();
i2c_write(0xD1);
*(buff+0)=i2c_read(ACK); // Second
*(buff+1)=i2c_read(ACK); // Minute
*(buff+2)=i2c_read(ACK); // hour
*(buff+3)=i2c_read(ACK); // Day
*(buff+4)=i2c_read(ACK); // date
*(buff+5)=i2c_read(ACK); // month
*(buff+6)=i2c_read(NO_ACK); // year
i2c_stop();
}
//-------------------------------
// Write RTC
//-------------------------------
void WriteRTC(unsigned char *buff)
{
i2c_start();
i2c_write(0xD0);
i2c_write(0x00);
i2c_write(*(buff+0));
i2c_write(*(buff+1));
i2c_write(*(buff+2));
i2c_write(*(buff+3));
i2c_write(*(buff+4));
i2c_write(*(buff+5));
i2c_write(*(buff+6));
i2c_stop();
}
void delay()
{
int i;
for (i = 0;i<50;i++){}
}
void hienthi7doan()
{
PORTA=255;
PORTB = so[data[2] & 15];
l12 = 0;
delay();
PORTA = 255;
PORTB = so[(data[2]&240) >> 4];
l13=0;
delay();
PORTA = 255;
PORTB = so[data[1] & 15];
l10 = 0;
delay();
PORTA = 255;
PORTB = so[(data[1]&240) >> 4];
l11= 0 ;
delay();
PORTA = 255;
PORTB = so[data[0] & 15];
l8 = 0;
delay();
PORTA = 255;
PORTB = so[(data[0]&240) >> 4];
l9= 0 ;
delay();
PORTA = 255;
if(data[3]==1) PORTB = so[8]; else PORTB = so[data[3]];
l7= 0 ;
delay();
PORTA = 255;
l6=l5=l4=l3=l2=l1=1;
PORTB = so[(data[4]&240) >> 4];
l6= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[data[4] & 15];
l5= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[(data[5]&240) >> 4];
l4= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[data[5] & 15];
l3= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[(data[6]&240) >> 4];
l2= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[data[6] & 15];
l1= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
}
void hienthi(int m)
{
unsigned char chuc,donvi;
if(m!=1){
chuc = Hour/10; donvi = Hour%10;
PORTA=255;
PORTB = so[chuc];
l13 = 0;
delay();
PORTA = 255;
PORTB = so[donvi];
l12=0;
delay();
PORTA = 255;
}
if(m!=2){
chuc = Min/10; donvi = Min%10;
PORTB = so[chuc];
l11 = 0;
delay();
PORTA = 255;
PORTB = so[donvi];
l10= 0 ;
delay();
PORTA = 255;
}
if(m!=3){
chuc = Sec/10; donvi = Sec%10;
PORTB = so[chuc];
l9 = 0;
delay();
PORTA = 255;
PORTB = so[donvi];
l8= 0 ;
delay();
PORTA = 255;
}
if(m!=4){
if(DayofWeek==1) PORTB = so[8]; else PORTB = so[DayofWeek];
l7 = 0;
delay();
PORTA = 255;
}
if(m!=5){
chuc = Day/10; donvi = Day%10;
PORTB = so[chuc];
l6 = 0;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[donvi];
l5= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
}
if(m!=6){
chuc = Month/10; donvi = Month%10;
PORTB = so[chuc];
l4 = 0;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[donvi];
l3= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
}
if(m!=7){
chuc = Year/10; donvi = Year%10;
PORTB = so[chuc];
l2 = 0;
delay();
l6=l5=l4=l3=l2=l1=1;
PORTB = so[donvi];
l1= 0 ;
delay();
l6=l5=l4=l3=l2=l1=1;
}
}
void chinhgio()
{
int i;
Hour = (data[2] & 15) + ((data[2]&240) >> 4) * 10;
Min = (data[1] & 15) + ((data[1]&240) >> 4) * 10;
Sec = (data[0] & 15) + ((data[0]&240) >> 4) * 10;
DayofWeek = data[3];
Day = (data[4] & 15) + ((data[4]&240) >> 4) * 10;
Month = (data[5] & 15) + ((data[5]&240) >> 4) * 10;
Year = (data[6] & 15) + ((data[6]&240) >> 4) * 10;
//s_gio:
while(1)
{
if (mode == 0) {while(mode==0){hienthi(0);}; goto s_phut;}
if(i<150) hienthi(0); else {if(i<300) {hienthi(1);} else i=0; } i++;
if (up == 0) {while(up==0){hienthi(0);}; Hour++; if(Hour==24) Hour=0;}
if (down == 0) {while(down==0){hienthi(0);}; Hour--; if(Hour<1) Hour=23;}
}
s_phut:
hienthi(0);
while(1)
{
if (mode == 0) {while(mode==0){hienthi(0);}; goto s_giay;}
if(i<150) hienthi(0); else {if(i<300) {hienthi(2);} else i=0; } i++;
if (up == 0) {while(up==0){hienthi(0);}; Min++; if(Min==60) Min=0;}
if (down == 0) {while(down==0){hienthi(0);}; Min--; if(Min<1) Min=59;}
}
s_giay:
hienthi(0);
while(1)
{
if (mode == 0) {while(mode==0){hienthi(0);}; goto s_thu;}
if(i<150) hienthi(0); else {if(i<300) {hienthi(3);} else i=0; } i++;
if (up == 0) {while(up==0){hienthi(0);}; Sec++; if(Sec==60) Sec=0;}
if (down == 0) {while(down==0){hienthi(0);}; Sec--; if(Sec<1) Sec=59;}
}
s_thu:
hienthi(0);
while(1)
{
if (mode == 0) {while(mode==0){hienthi(0);}; goto s_ngay;}
if(i<150) hienthi(0); else {if(i<300) {hienthi(4);} else i=0; } i++;
if (up == 0) {while(up==0){hienthi(0);}; DayofWeek++; if(DayofWeek==8) DayofWeek=1;}
if (down == 0) {while(down==0){hienthi(0);}; DayofWeek--; if(DayofWeek<1) DayofWeek=7;}
}
s_ngay:
hienthi(0);
while(1)
{
if (mode == 0) {while(mode==0){hienthi(0);}; goto s_thang;}
if(i<150) hienthi(0); else {if(i<300) {hienthi(5);} else i=0; } i++;
if (up == 0) {while(up==0){hienthi(0);}; Day++; if(Day==32) Day=1;}
if (down == 0) {while(down==0){hienthi(0);}; Day--; if(Day<1) Day=31;}
}
s_thang:
hienthi(0);
while(1)
{
if (mode == 0) {while(mode==0){hienthi(0);};goto s_nam;}
if(i<150) hienthi(0); else {if(i<300) {hienthi(6);} else i=0; } i++;
if (up == 0) {while(up==0){hienthi(0);}; Month++; if(Month==13) Month=1;}
if (down == 0) {while(down==0){hienthi(0);}; Month--; if(Month<1) Month=12;}
}
s_nam:
hienthi(0);
while(1)
{
if (mode == 0) {while(mode==0){hienthi(0);}; break;}
if(i<150) hienthi(0); else {if(i<300) {hienthi(7);} else i=0; } i++;
if (up == 0) {while(up==0){hienthi(0);}; Year++; if(Year==100) Year=0;}
if (down == 0) {while(down==0){hienthi(0);}; Year--; if(Year<1) Year=99;}
}
// ghi lai cac gia tri cai dat
data[0] = Sec%10 + ((Sec/10)<<4); data[1] = Min%10 + ((Min/10)<<4);
data[2] = Hour%10 + ((Hour/10)<<4); data[3] = DayofWeek%10 + ((DayofWeek/10)<<4);
data[4] = Day%10 + ((Day/10)<<4); data[5] = Month%10 + ((Month/10)<<4);
data[6] = Year%10 + ((Year/10)<<4);
WriteRTC(&data[0]);
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
rtc_init(0,0,0);
while (1)
{
ReadRTC(&data[0]);
if(mode==0) { while(mode==0){hienthi(0);} chinhgio(); }
hienthi7doan();
};
}
END!
MÌNH THẤY TRONG ĐÓ CŨNG CÓ GIẢI THÍCH NHƯNG CÒN QUÁ SƠ XÀI.NẾU CÁC BÁC HIỂU HẾT ĐƯỢC Ý NGHĨA CỦA TỪNG CÂU LỆNH TRONG ĐOẠN CODE TRÊN THÌ GIÚP MÌNH CHÚ THÍCH RA PHÍA SAU ĐỂ EM XEM CHO DỄ HIỄU.MONG CÁC BÁC GIÚP ĐỠ.NẾU ĐƯỢC THÌ MAIL CHO EM THEO ĐỊA CHỈ:thinhvip58@yahoo.com.xin cảm ơn!Học Đi Đôi Với Hành!
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101
-
Channel: Điện tử dành cho người mới bắt đầu
31-12-2024, 17:39 -
-
Comment on Thắc mắc về hạ áp cho adapter laptopbởi nguyendinhvan
-
Channel: Điện tử dành cho người mới bắt đầu
29-12-2024, 23:20 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nguyendinhvanPhải làm đúng quy chình thì mới được
Bươc 1 lấy cái nguồn điều chỉnh, set về đúng 12v, cấp cho đường out 19v như hình. Chú ý là phần đầu vào adaptor không cấp điện.
Bước 2 . Kiểm tra điện áp tại chân số 3 das001 có đúng...-
Channel: Điện tử dành cho người mới bắt đầu
29-12-2024, 23:20 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi LamVoNhấp nháy có thể do chu kỳ hoạt động bị rút ngắn quá dẫn đến không đủ nguồn nuôi ic, bác thử tăng giá trị tụ nguồn phụ nuôi ic và giảm giá trị điện trở hạn dòng cho nó xem có cải thiện không....
-
Channel: Điện tử dành cho người mới bắt đầu
29-12-2024, 08:45 -
-
Trả lời cho Mạch tự động bật nguồnbởi nhathung1101Bác đúng là hệ Pháp, nên toàn quên chữ "d".
Nếu em được như bác, đúng 0h mới được stand by với hũ rượu và vợ thì tuyệt.
Nhưng đời không như là mơ, em và lão Đinh Vặn ngấm đủ mà.
Lão Đinh Vặn...-
Channel: Điện tử gia dụng
29-12-2024, 00:17 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101Vì bản chất của nó hoạt động theo dòng. Áp chỉ để mức giới hạn.
Cứ hiểu như bạn khôn hơn 10 người, nhưng khả năng thu nhận kiến thức chỉ bằng 1/10 người khác, thì nó sẽ tự điều chỉnh thôi.-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 23:41 -
-
Trả lời cho Mạch tự động bật nguồnbởi nhathung1101Ựa... có lý...
Dưng mà lão chỉ dùng 1 con opto là nguy hiểm lắm.
Có khi nó on lúc lão với ấy ấy về nhà lúc vắng vợ thì khổ. Nên phải thêm cái mạch logic nữa mới được....-
Channel: Điện tử gia dụng
28-12-2024, 23:20 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi lct1610Bác có cách nào khác ngoài quấnlại/rút bớt vòng dây BA (và mua mới ) k nhỉ ? Tại gỡ ra cũng khá lằng nhằng và kì công...
-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 19:30 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi mèomướpDạ với mức áp chênh lệch quá nhìu thì ngoài chỉnh hồi tiếp thì chú cần quấn lại thứ cấp biến áp nữa ạ. Tùy loại mà có thể sẽ khéo léo rút bớt vòng dây đỡ phải tách lõi ferit ạ...
-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 18:57 -
-
bởi lct1610E có adapter laptop cũ hiệu asus chạy tốt ,có đầu ra ổn định ở 19,4v dòng 3,42A ( công suất 60w). E định là hạ nó xuống 12v để cấp nguồn cho đầu camera. Và e đã thử bằng cách can thiệp vào phần hồi tiếp (sử dụng ic DAS001 hay TSM103W) thông...
-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 18:44 -
Comment