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
-
bởi FschoolvnTrong bối cảnh toàn cầu hóa giáo dục, ngày càng nhiều học sinh được gia đình chắp cánh để truy cầu kiến thức từ các quốc gia phát triển, đặc biệt là Hoa Kỳ. Từ ước mơ thụ hưởng nền giáo dục chất lượng, không ít học sinh nhìn...Hôm qua, 00:54
-
Trả lời cho Hỏi xin sơ đồ tivi các loạibởi Trân thànhCần các Bạn giúp sơ đồ Lcd Samsung UA40JU6400 và UA43ku6500k. Xin cảm ơn!...
-
Channel: Điện tử truyền hình
28-04-2024, 16:07 -
-
Trả lời cho Hỏi xin sơ đồ tivi các loạibởi Trân thànhCần các Bạn giúp sơ đồ Lcd Samsung UA40JU6400 và UA43ku6500k. Xin cảm ơn!...
-
Channel: Điện tử truyền hình
28-04-2024, 16:01 -
-
bởi chinhnguyen9Hoạt động của thế hệ mạch cân bằng trước đây dựa trên nguyên lý so áp giữa 2 string liền kề. Hoạt động cân bằng chỉ kích hoạt khi sự chênh lệch vượt ngưỡng 100mV và ngưng hoạt động khi mức chênh lệch giảm xuống còn 30mV. Bản...
-
Channel: Điện tử dành cho người mới bắt đầu
27-04-2024, 05:07 -
-
bởi chinhnguyen9Xem hình minh họa có phần thuyết minh bên trong tiện việc quan sát và đọc thuyết minh. Khi G1 high dòng điện chạy theo các đường màu đen khi G2 high dòng điện chạy theo các đường màu nâu đỏ.
Bổ sung một tính chất củng cố cho tên gọi tụ bay: Trong mạch đề cập chỉ...-
Channel: Điện tử dành cho người mới bắt đầu
26-04-2024, 21:02 -
-
bởi chinhnguyen9Sản phẩm này ghi version 2.0 01-2024 MADE IN CHINA nhưng không thấy thương hiệu hình 1
Do 8 chân G của 8 mosfet được đấu song song thành 2 nhóm nên có cùng biên độ xung kích 12V. Nhưng Q1 và Q2 nằm cuối dãy, chân S cùa chúng có điện áp DC cao đến...-
Channel: Điện tử dành cho người mới bắt đầu
26-04-2024, 20:37 -
-
bởi xuanthiettivi em bị mất remote lỡ vào chế độ usb giờ không chọn lại source được. ai có file nạp cho em xin với ạ. Model 32HD957T2
-
Channel: Điện tử truyền hình
26-04-2024, 10:53 -
-
Trả lời cho Giải thích nôm na từ "tụ bay"bởi chinhnguyen9Đa tạ lời cảm ơn của bạn. Mến!
-
Channel: Hướng dẫn sử dụng diễn đàn
26-04-2024, 05:06 -
-
Trả lời cho Xin tư vấn về mạch cầu H cho inverter 1000wbởi thebinhzChắc là không được đâu bạn ơi
Quán ăn Vĩnh Yên-
Channel: Điện tử công suất
25-04-2024, 21:56 -
-
Trả lời cho Giải thích nôm na từ "tụ bay"bởi thebinhzCảm ơn bạn nhiều nha
Nhà hàng Vĩnh Yên-
Channel: Hướng dẫn sử dụng diễn đàn
25-04-2024, 21:50 -
Comment