单片机交通灯课程设计(3)

2019-08-20 21:11

RETI

L: SETB P2.3 CLR P2.4 LCALL DELAY1 SETB P2.4 RET

/***************延时程序**********************/ DELAY :MOV R5,30H DEL0:MOV R6,#200 DEL1:MOV R7,#250 DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 LCALL NET

DJNZ R5,DEL0

RET

DELAY1 :MOV R2,#30 DEL11:MOV R3,#200 DEL12:MOV R4,#250 DEL13: DJNZ R4,DEL13 DJNZ R3,DEL12 LCALL NET

DJNZ R2,DEL11

RET

/*********数码管程序***************************/ NET:

MOV DPTR,#TAB MOV A,R5 MOV B,#100 DIV AB

MOVC A,@A+DPTR

11

MOV P0,A;P0为你的数码管接口 ,第二个数码管为个位数字 SETB P1.0

MOV DPTR,#TAB MOV A,R5

CLR P1.0 MOV B,#10 DIV AB

MOVC A,@A+DPTR

MOV P0,A;P1为你的数码管接口 ,第二个数码管为个位数字 SETB P1.1 RET END

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H 附:我们在用汇编写程序的同时用C也编了程序,如下

(其电路图和接口跟汇编的有所不同,但大同小异,在此不再赘述) #include

typedef unsigned char uchar; typedef unsigned int uint;

uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0}; sbit key1=P3^2; sbit key2=P3^3;

sbit led_y=P2^2; sbit led_r=P2^4; sbit led_g=P2^3;

uint MS,state=0,flag=0,INT_MS; void seg_display(); void delay(uint ms); void init(); void delay_led(); void led_display();

void main()

12

{

led_y=0; //黄灯亮 if(key2==0) //按键 { }

void delay_led()//这样分开赋值,防止全局变量MS在进入中断后值发生改变 { uint j;

if(flag==0) //中断标志位为0情况,即未进入中断

for(MS;MS>0;MS--)

seg_display(); for(j=10;j>0;j--);

{

{

if(key2==0) //按键确实按下 {

init(); //中断初始化 //label:;

led_y=1; //黄灯灭 while(1)led_display(); }

}

} }

else if(flag) {

for(INT_MS;INT_MS>0;INT_MS--)

seg_display(); for(j=10;j>0;j--); } {

//中断标志位为1情况,进入中断

13

} flag=0;

}

void led_display() { led_y=0; //黄灯亮

state=1;

//按键标志位设为1

MS=300; // 延时3s delay_led(); //数码管显示 led_y=1; //黄灯亮 state=0;

// 标志位清0

led_r=0; state=2; MS=500; delay_led(); led_r=1; state=0;

led_g=0; state=3; MS=1000; delay_led(); led_g=1; state=0; }

void seg_display() { if(flag==0) //中断标志位为0情况,即未进入中断 { P1=0x01;

//数码管1显示

P0=tab[MS/900];

//数码管1显示内容

14

delay(5); //数码管1显示延时 P0=0xff;

//数码管1显示消影

P1=0x02;

P0=tab[MS/100+1]; delay(5); P0=0xff;

}

else if(flag)

//中断标志位为1情况,进入中断 { P1=0x01;

P0=tab[INT_MS/900]; delay(5); P0=0xff; P1=0x02;

P0=tab[INT_MS/100+1]; delay(5); P0=0xff;

}

}

void delay(uint ms) { uint j; while(ms--)

for(j=100;j>0;j--) ;

}

void led_int()interrupt 0 {

//进入中断标志位flag为1

flag=1; 15


单片机交通灯课程设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:附录4:正文模板及注意事项

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: