Tải bản đầy đủ
6 Lưu đồ thuật toán

6 Lưu đồ thuật toán

Tải bản đầy đủ

Hình 3.15 Lưu đồ chương trình Xử lý truyền thông

53

• Lưu đồ thuật toán chương trình xử lý dữ liệu, điều khiển led giao
thông và led 7 thanh

Hình 3.16 Chương trình xử lý dữ liệu, điều khiển led giao thông và led 7 thanh

54

3.7 Chương trình
#include
#define led1 P0_7
#define led2 P0_6
#define led3 P0_5
#define led4 P0_4
#define led5 P0_3
#define led6 P0_2
#define do 0x10
#define vang 0x40
#define xanh 0x80
const unsigned char font_7seg[14] =
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x71,0x83,0xe3};
unsigned char data_in[7];
unsigned char traffic=30;
unsigned char x,y,z,t,p,q;
unsigned char count=0,count_traffic,c1=30,duration=0;
unsigned char counter_timer=0,var=0;
void delay_ms(unsigned char time);
void convert();
void display();
//---------------------------------------------------void convert()
{
unsigned char k1,k2,k3,k4;
k1=~font_7seg[c1/10],k2=~font_7seg[c1%10],k3=~font_7seg[c1/10],k4=~font_
7seg[c1%10];
x=y=z=t=0;
x=x|((k1>>6)&0x02);

55

x=x|((k1>>4)&0x04);
x=x|((k1<<2)&0x80);
x=x|((k1<<2)&0x40);
x=x|((k1<<2)&0x20);
x=x|((k1<<1)&0x08);
x=x|((k1<<3)&0x10);
// x=x|((k1<<6)&0x40);
// x=x|0x40;
y=y|((k2>>6)&0x02);
y=y|((k2>>4)&0x04);
y=y|((k2<<2)&0x80);
y=y|((k2<<2)&0x40);
y=y|((k2<<2)&0x20);
y=y|((k2<<1)&0x08);
y=y|((k2<<3)&0x10);
y=y|((k2<<6)&0x40);
z=z|((k3>>6)&0x02);
z=z|((k3>>4)&0x04);
z=z|((k3<<2)&0x80);
z=z|((k3<<2)&0x40);
z=z|((k3<<2)&0x20);
z=z|((k3<<1)&0x08);
z=z|((k3<<3)&0x10);
z=z|((k3<<6)&0x40);
t=t|((k4>>6)&0x02);
t=t|((k4>>4)&0x04);
t=t|((k4<<2)&0x80);
t=t|((k4<<2)&0x40);
t=t|((k4<<2)&0x20);
t=t|((k4<<1)&0x08);

56

t=t|((k4<<3)&0x10);
t=t|((k4<<6)&0x40);
}
//--------------------------------------------void convert_duration()
{
traffic=data_in[1]*10 +data_in[2];
}
//--------------------------------------------void display()
{
convert();
P2=x;
led1=0;
delay_ms(1);
led1=1;
P2=y;
led2=0;
delay_ms(1);
led2=1;
P2=p;
led3=0;
delay_ms(1);
led3=1;
P2=z;
led4=0;
delay_ms(1);

57

led4=1;
P2=t;
led5=0;
delay_ms(1);
led5=1;
P2=q;
led6=0;
delay_ms(1);
led6=1;
}
//---------------------------------------------------void timer0 (void) interrupt 1 using 2
{
TH0=0x4b;
TL0=0xfe;
TF0=0;
TR0=1;
counter_timer++;
if (counter_timer>=20)
{
if (c1==0){c1=traffic;}
P0_0=~P0_0;
if (c1>0)c1--;
var++;
counter_timer=0;
}
if (var>=(traffic*2)) var=0;

58

}
//---------------------------------------------------void Ngat_noi_tiep(void) interrupt 4 using 2{
if (RI)
{
x=SBUF;
if (x=='/'){count=0;}
data_in[count]=x-48;count++;
RI=0;
}
var=0;
c1=traffic;
p=0;
q=0;

}
//---------------------------------------------------//TH1 = 256 - ((Crystal / 192) /
Baud)
//TH1 = 256 - ((11059000 /
192) / 19200)
//TH1 = 256 - ((57699) / 19200)
//TH1 = 256 - 3 = 253
void uart_init(){

// Ham thiet lap truyen thong

TMOD = 0x21;

// Thiet lap Timer1, che do 2 tu nap.

TH1 = -(0x03);

// Thiet lap bau rate = 9600

SCON = 0x50;

// 8bit du lieu, 1 start,1 stop

59

TR1 =

1;

// Khoi dong bo tao clock (timer 1)

ES=1;
EA=1;
ET0=1;
TR0=1;
TF0=0;
}
//---------------------------------------------------------void delay_ms (unsigned char delay){
unsigned char i=121;
while(delay--){
while(i--){}
}
}
//---------------------------------------------------------void traffic_selected()
{
if (var < traffic & var !=0)p=do;
if ( traffic < var & var <= traffic*2-2)p=xanh;
if (var>=traffic*2-2)p=vang;
if (var if (traffic-2<=var & var<=traffic)q=vang;
if (var>traffic)q=do;
}
//---------------------------------------------------------void main (void)
{
uart_init();
data_in[1]=3;

60

data_in[2]=0;
while (1)
{
display();
convert_duration();
traffic_selected();
}
}
3.8 Kết quả mô phỏng

• Thiết kế mạch mô phỏng

Hình 3.17 Mạch thiết kế trên proteus

61

• Mạch chạy sau khi nạp chương trình cho vi điều khiển và chạy thử

Hình 3.18 Chạy thử mạch mô phỏng

62