1. Trang chủ
  2. » Giáo án - Bài giảng

chương trình điều khiển đèn giao thông

10 375 2

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 13,45 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

unsigned int Delay; unsigned int Period; char RunMe; }sTask; sTask SCH_Tasks[MAX_TASKS]; char SCH_Delete_Taskconst unsigned char Index; void SCH_Initvoid; void interrupt SCH_Updatevoid;

Trang 1

Đèn Giao Thông

/*

* File: newmain.c

* Author:

*

* Created on April 13, 2015,

*/

//den giao thong tai nga tu:

//dung pic16f877a thach anh 4MH

//led 7 doan anot

//thoi gian den do 15s, den xanh 12s, den vang 3s

#include <htc.h>

CONFIG(WDTDIS&PWRTEN&UNPROTECT&BORDIS&LVPDIS);

#define _XTAL_FREQ 4000000

int chuc_dec,donvi_dec,chuc_hex,donvi_hex,dem,count=16000; int chuc_dec1,donvi_dec1,chuc_hex1,donvi_hex1,dem1,count1=16000;

#define MAX_TASKS 7

#define DO1 RC0

#define XANH1 RC1

#define VANG1 RC2

#define DO2 RC3

#define XANH2 RC4

#define VANG2 RC5

typedef struct _sTask

{

void (*pTask)(void);

Trang 2

unsigned int Delay;

unsigned int Period;

char RunMe;

}sTask;

sTask SCH_Tasks[MAX_TASKS];

char SCH_Delete_Task(const unsigned char Index); void SCH_Init(void);

void interrupt SCH_Update(void);

char SCH_Add_Task(void (*pFn)(void),

unsigned int delay,

unsigned int period);

void SCH_Dispatch_Tasks(void);

void SCH_Start(void);

//

void init_port();

void tach_so(int dem,int dem1);

void dec_to_hex();

void quetled_7doan();

//

void Task_T1(void);

void Task_T2(void);

void Task_T3(void);

void Task_T4(void);

void Task_T5(void);

Trang 3

void main(void)

{

init_port();

TRISC = 0;

SCH_Init();

SCH_Add_Task(Task_T1,0,30000);

SCH_Add_Task(Task_T2,12000,30000);

SCH_Add_Task(Task_T3,15000,30000);

SCH_Add_Task(Task_T4,27000,30000);

SCH_Add_Task(Task_T5,0,10);

SCH_Start();

while(1)

{

SCH_Dispatch_Tasks();

}

}

char SCH_Delete_Task(const unsigned char Index) {

if(SCH_Tasks[Index].pTask==0) return -1; SCH_Tasks[Index].pTask = 0;

SCH_Tasks[Index].Delay = 0;

SCH_Tasks[Index].Period = 0;

SCH_Tasks[Index].RunMe = 0;

return 0;

}

Trang 4

void SCH_Init(void)

{

unsigned char Index;

for(Index=0;Index<MAX_TASKS;Index++)

{

SCH_Delete_Task(Index);

}

OPTION = 0x02; //Prescaler 1:8

TMR0 = 256-125;

T0IF = 0;

}

void interrupt SCH_Update(void)

{

unsigned char Index;

TMR0 = 256-125;

T0IF = 0;

for(Index=0;Index<MAX_TASKS;Index++)

{

if(SCH_Tasks[Index].pTask!=0)

{

if(SCH_Tasks[Index].Delay==0)

{

SCH_Tasks[Index].RunMe = 1;

if(SCH_Tasks[Index].Period>0)

{

SCH_Tasks[Index].Delay = SCH_Tasks[Index].Period; }

Trang 5

else

{

SCH_Tasks[Index].Delay ;

}

}

}

count ;

count1 ;

}

char SCH_Add_Task(void (*pFn)(void),

unsigned int delay,

unsigned int period)

{

int Index = 0;

while((SCH_Tasks[Index].pTask!=0)&&(Index<MAX_TASKS)) {

Index++;

}

if(Index==MAX_TASKS)

{

return -1;

}

SCH_Tasks[Index].pTask = pFn;

SCH_Tasks[Index].Delay = delay;

SCH_Tasks[Index].Period = period;

SCH_Tasks[Index].RunMe = 0;

return Index;

}

Trang 6

void SCH_Dispatch_Tasks(void)

{

unsigned char Index;

for(Index=0;Index<MAX_TASKS;Index++)

{

if(SCH_Tasks[Index].pTask!=0 && SCH_Tasks[Index].RunMe>0) {

SCH_Tasks[Index].pTask();

SCH_Tasks[Index].RunMe = 0;

}

if(SCH_Tasks[Index].Period == 0)

{

SCH_Delete_Task(Index);

}

}

}

void SCH_Start(void)

{

T0IE = 1;

GIE = 1;

}

void Task_T1(void)

{

count=16000;

count1=13000;

Trang 7

DO2=0;

XANH2=1; VANG1=0; DO1 = 1; }

void Task_T2(void) {

count1=4000; int i;

XANH2=0; VANG2=1; DO1 = 1;

}

void Task_T3(void) { count1=16000; count=13000; int i;

DO1=0;

XANH1=1; VANG2=0; DO2=1;

}

void Task_T4(void) {

count=4000;

Trang 8

int i;

VANG1=1;

XANH1=0;

DO2 = 1;

}

void Task_T5(void)

{

dem=count/1000;;

dem1=count1/1000;

tach_so(dem,dem1);

dec_to_hex();

quetled_7doan();

}

void init_port()

{

TRISB=0X00;

PORTB=0X00;

TRISD=0X00;

PORTD=0X00;

}

void tach_so(int dem,int dem1) {

chuc_dec=dem/10;

donvi_dec=dem%10;

chuc_dec1=dem1/10;

donvi_dec1=dem1%10;

Trang 9

void dec_to_hex()

{

int i;

const unsigned char a[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; i=chuc_dec;

chuc_hex=a[i];

i=donvi_dec;

donvi_hex=a[i];

i=chuc_dec1;

chuc_hex1=a[i];

i=donvi_dec1;

donvi_hex1=a[i];

}

void quetled_7doan()

{

unsigned char a[4];

int mabandau,i;

a[3]=chuc_hex;

a[2]=donvi_hex;

a[1]=chuc_hex1;

a[0]=donvi_hex1;

mabandau = 0b00000001;

for (i=0;i<=3;i++)

{

PORTB = mabandau;

PORTD = a[i];

Trang 10

delay_ms(1);

PORTB = 0X00; //SAU KHI DELAY DE MAT NHIN THAY ROI XOA DE TAT,

//NEU KO XOA THI TIEP TUC CHUONG TRINH SE QUET QUA 7SEG KHAC NHUNG // CHUA DUA MANG VAO NEN LED 7SG THU 2 SE CO KI TU GIONG LED 7SEG THU1 mabandau = mabandau<<1;

}

}

Ngày đăng: 21/06/2016, 16:53

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w