Code chương trình nạp cho ATmega16:

Một phần của tài liệu Thiết kế đồng hồ thời gian thực (Trang 27 - 31)

/**************************(^-^)START(^-^)**************************/ #include <mega16.h>

#include <delay.h> // Khai bao PORT I2C

---

Hoangxudi@gmail.com Trang 27

Bắt Đầu

Giải mã Led 7 thanh

Tạo thời gian trễ& quét hiển thị

Khởi tạo I2C&DS1307

Xuất mã hiển thị cho LED & thanh

Thời gian trễ 2ms Quét qua từng LED Tăng giây Giây >59 Phút>59 Giờ >23 Xóa giây Tăng phút Xóa phút Tăng giờ Xóa giờ

Đồ án 1: Đề tài: Thiết kế đồng hồ thời gian thực . #asm

.equ __i2c_port=0x18 ; // Cho phep PORTB doc du lieu tu DS1307 .equ __sda_bit=1 ; // Bit PORTB.1 la dau vao chan SDA cua DS1307 .equ __scl_bit=0 ; // Bit PORTB.1 la dau vao chan SCL cua DS1307 #endasm

#include <i2c.h> //Khai bao ham I2C trong thu vien Codevision

#include <ds1307.h> //Khai bao thu vien DS1307 trong thu vien Codevision //Dinh nghia cac chan dieu khien LED

#define led1 PORTC.0 #define led2 PORTC.1 #define led3 PORTC.2 #define led4 PORTC.3 #define led5 PORTC.4 #define led6 PORTC.5

//Dinh nghia cac chan vao cua phim nhan #define set PIND.0

#define up PIND.1 #define down PIND.2

//Cac bit de quan ly trang thai cac phim

bit set0=1,set1=1,up0=1,up1=1,down0=1,down1=1; //Ma Hex led 7 thanh

unsigned char code[]={0x40,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; unsigned char h=15,m=45,s=55;//Bien gio phut giay

unsigned char kt=0,a=0,x=0;

/*Bien kt de kiem tra xem dang o che do nao - kt=0 :Che do chay binh thuong

- kt=1 :Che do cai dat gio - kt=2 :Che do cai dat phut - kt=3 :Che do cai dat giay

-Bien a de kiem tra xem truoc do o che do cai dat nao khong - a=0 :Truoc do khong cai dat gi

- a=1 :Truoc do la o che do cai dat -->Dat lai du lieu cho DS1307*/ //Ham con void Kt_phim(); void Read_DS1307(); void Hien_thi(); void main(void) { --- Hoangxudi@gmail.com Trang 28

Đồ án 1: Đề tài: Thiết kế đồng hồ thời gian thực . //Cho phep PORTA xuat du lieu

PORTA=0xFF; DDRA=0xFF;

//Cho phep PORTB nhan tin hieu vao PORTB=0x00;

DDRB=0x00;

//Cho phep PORTC xuat du lieu PORTC=0x00;

DDRC=0xFF;

//Cho phep PORTD nhan tin hieu vao PORTD=0xFF;

DDRD=0x00; // Khoi tao I2C i2c_init();

//Khoi tao DS1307 rtc_init(0,0,0); while (1) {

x++;//Bien chay quan ly nhap nhay cac so tuong ung voi che do cai dat Kt_phim(); Read_DS1307(); Hien_thi(); if(x==100){x=0;} }; }

//Ham kiem tra cai dat va doc du lieu tu DS1307 void Read_DS1307()

{

if(kt==0) {

if(a==1) //Kiem tra truoc do co cai dat lai gio,phut,giay khong { //Neu co thi cai dat lai du lieu dau vao cho DS1307 rtc_set_time(h,m,s);a=0;

delay_us(300); }

rtc_get_time(&h,&m,&s); //Doc du lieu tu DS1307 }

}

//Ham quet LED void Hien_thi() {

/*Kiem tra xem dang o che do nao de hien thi

- Neu kt=0:Che do chay binh thuong-->hien thi gio binh thuong - Neu kt khac 1 dang o che do cai dat khac-->hien thi gio binh thuong

---

Đồ án 1: Đề tài: Thiết kế đồng hồ thời gian thực . - Neu kt=1 dang o che do cai dat gio-->Hien thi gio nhap nhay

*/ if((kt==0)||(kt!=1)||((kt==1)&&(x<50))) { PORTA=code[h/10];led1=1;delay_us(2000);led1=0; PORTA=code[h%10];led2=1;delay_us(2000);led2=0; }

if((kt==0)||(kt!=2)||((kt==2)&&(x<50))) //Tuong tu nhu KT gio {

PORTA=code[m/10];led3=1;delay_us(2000);led3=0; PORTA=code[m%10];led4=1;delay_us(2000);led4=0; }

if((kt==0)||(kt!=3)||((kt==3)&&(x<50)))//Tuong tu nhu KT gio {

PORTA=code[s/10];led5=1;delay_us(2000);led5=0; PORTA=code[s%10];led6=1;delay_us(2000);led6=0; }

}

//Ham kiem tra phim void Kt_phim() {

set0=set1;set1=set; //Kiem tra trang thai ban dau cua phim

if((set0==1)&&(set1==0)) //Kiem tra xem phim co dc nhan nha hay khong { //Neu dc nhan nha thi tang kt++,neu khong thi kt++;if(kt>3)kt=0; //doi toi khi nao phim dc nha moi tang bien kt }

switch(kt) //Lua chon che do ung voi gia tri cua bien kt {

case 0:break; //Tro lai che do chay binh thuong case 1: //Che do cai dat gio

{ up0=up1;up1=up;a=1; if((up0==1)&&(up1==0)) { h++;if(h>23)h=0; } down0=down1;down1=down;// if((down0==1)&&(down1==0)) { h--;if(h>23)h=23; --- Hoangxudi@gmail.com Trang 30

Đồ án 1: Đề tài: Thiết kế đồng hồ thời gian thực . }

break; }

case 2: //Che do cai dat phut { up0=up1;up1=up;a=1; if((up0==1)&&(up1==0)) { m++;if(m>59)m=0; } down0=down1;down1=down; if((down0==1)&&(down1==0)) { m--;if(m>59)m=59; } break; }

case 3: //Che do cai dat giay { up0=up1;up1=up;a=1; if((up0==1)&&(up1==0)) { s++;if(s>59)s=0; } down0=down1;down1=down; if((down0==1)&&(down1==0)) { s--;if(s>59)s=59; } break; } } } /******************** (^-^) THE END (^-^)************************/ --- Hoangxudi@gmail.com Trang 31

Một phần của tài liệu Thiết kế đồng hồ thời gian thực (Trang 27 - 31)

Tải bản đầy đủ (DOC)

(31 trang)
w