单片机红绿灯程序(汇编)

合集下载

用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯传统的交通灯控制电路一般由数字电路构成,电路复杂、体积大、成本高。

采用单片机控制交通灯不但可以解决上述问题,而且还具有时间显示功能,非常方便。

下面介绍一种用单片机控制交通灯的方法。

一、硬件硬件电路如附图。

AT89C2051的P1.7~P1.5和P1.3~P1.1直接驱动红、黄、绿灯,利用单片机的串口和二片74LS164串/并转换移位寄存器实现时间显示,七段数码管为共阴管,硬件电路极为简单。

二、软件交通灯有红、黄、绿三种。

红灯亮,停止通行;绿灯亮,允许通行;黄灯亮,作过渡。

红灯亮60秒,绿灯亮55秒,黄灯亮5秒。

每组灯的亮暗状态以2分钟为周期循环,故程序采用主、子程序方式,循环结构。

另外,为了简化电路,红、黄、绿灯采用低电平点亮。

源程序清单如下:ORG0000HSTART:MOVDRTR,#TABMOVSCON,#00HMOVP1,#6CH;点亮红、绿灯MOVR0,#0;R0清零LEFT:INCR0CJNER0,#55,LP0;R0<55,转LP0MOVP1,#6AH;R0=55,点亮红、黄灯LJMPLP1LP0:CJNER0,#60,LP1;R0<60,转LP1MOVP1,#0C6H;R0=60,点亮绿、红灯LJMPRIGHTLP1:LCALLDBDBLCALLDISPLJMPLEFT;20H为1,转LEFTRIGHT:DECR0CJNER0,#5,LP2;R0>0,转LP2MOVP1,#0A6H;R0=5,点亮黄、红灯LJMPLP3LP2:CJNER0,#0,LP3MOVP1,#6CH;R0=0,点亮红、绿灯LJMPLEFTLP3:LCALLDBDBLCALLDISPLJMPRIGHTDBDB:MOVA,R0MOVB,#10DIVABMOVR1,AMOVR2,BRETDISP:MOVA,R2MOVCA,@A+DPTRMOVSBUF,AJNBTI,$;查TI位CLRTIMOVA,R1MOVCA,@A+DPTRMOVSBUF,AJNBT1,$CLRTILCALLDEALYRETDELAY:MOVR3,#09HK1:MOVR4,#100K2:MOVR5,#250K3:DJNZR5,K3DJNZR4,K2KJNZR3,K1RETTAB:DB3FH,06H,5BHDB4FH,66HDB6DH,7DH,07HDB7FH,6FH三.实验电路及连线四.实验说明1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。

单片机红绿灯

单片机红绿灯

P1^2 南北绿灯P1^5 东西红灯P1^3 南北黄灯P1^6 东西绿灯P1^4 南北红灯P1^7 东西黄灯P3^2 外部中断#include <AT89X52.H>#include "LCD.h"#define N_GREEN P1_2 //定义南北交通灯接口#define N_YELLOW P1_3#define N_RED P1_4#define E_GREEN P1_6 //定义东西交通灯接口#define E_YELLOW P1_7#define E_RED P1_5#define count_M1 50000 //T0的计数值,晶振为12MHZ时0.05s,晶振为24MHZ时0.025s#define TH_M0 (65536-count_M1)/256 //T0计数值高八位,方式1#define TL_M0 (65536-count_M1)%256 //T0计数值低八位,方式1char count_T0=0; //定时器中断的次数char flag=0; //交通灯转化标志位,满2秒T0中断标志位char inter_flag=0; //外部中断标志,0表示中断次数为偶次,1表示中断次数为奇次unsigned int up=1500; //左轮运动参数变量unsigned int down=1500; //右轮运动参数变量unsigned int pulse=1; //增量/*************定时器0初始化**************/void init_time0(void){TMOD|=0X01; //定时器0,模式1;IE|=0X82; //定时器0允许;TH0=TH_M0; //定时器0高八位初始值TL0=TL_M0; //定时器0低八位初始值}/*************外部中断0初始化***********/void init_INT0(void){TCON|=0X01; //设置外部中断0为下降沿引起IE|=0X81; //外部中断0允许}/*************定时器0中断程序***********/void inter_time0_2s(void) interrupt 1{TH0=TH_M0;TL0=TL_M0;if(++count_T0==120) {count_T0=0;flag=1; //交通灯转换标志位,满2秒标志位}}/**********加速运动*************/void speed_up(void){up=up+pulse;if(up>=1700){up=1700;}down=down-pulse;if(down<=1300){down=1300;}P1_1=1;delay_nus(up);P1_1=0;P1_0=1;delay_nus(down);P1_0=0;delay_nms(20);}/**********减速运动*************/void speed_down(void){up=up-4*pulse;if(up<=1500) //限定左轮运动参数大于1500{up=1500;}down=down+4*pulse;if(down>=1500) //限定右轮运动参数小于1500{down=1500;}P1_1=1;delay_nus(up);P1_1=0;P1_0=1;delay_nus(down);P1_0=0;delay_nms(20);}/************南北绿灯,东西红灯********/void GREEN(void){char num;num=0;Write_Command_LCM(0x01); //清屏while(num<2) //定时0~4秒时{if(inter_flag) //外部中断0动作,跳出子函数{return ;}speed_up(); //机器人加速运动子函数Display_List_Char(0, 0,"green "); //LCD显示Display_List_Char(1, 0,"up ");if(flag==1){num++;flag=0;}N_GREEN=0; //南北绿灯亮E_RED=0; //东西红灯亮}N_GREEN=1; //南北绿灯熄灭// E_RED=1; //东西红灯熄灭,}/************南北黄灯*******************/void YELLOW(void){Write_Command_LCM(0x01); //清屏while(!flag) //定时满2秒,跳出循环{if(inter_flag) //外部中断0动作,跳出子函数{return ;}speed_down(); //机器人减速子函数Display_List_Char(0, 0,"yellow"); //LCD显示Display_List_Char(1, 0,"down ");N_YELLOW=0; //南北黄灯闪烁亮delay_nms(20);N_YELLOW=1;delay_nms(20);E_RED=0; //东西红灯亮}flag=0;N_YELLOW=1; //南北黄灯熄灭E_RED=1; //东西红灯熄灭}/***********南北红灯*******************/void RED(void){char num;num=0;up=1500;down=1500;Write_Command_LCM(0x01); //清屏while(num<3){if(inter_flag) //外部中断0动作,跳出子函数{E_GREEN=1;N_RED=1;return ;}Display_List_Char(0, 0,"red"); //LCD显示Display_List_Char(1, 0,"stop");if(num<2) //定时0~4秒时。

单片机红绿灯程序完整版

单片机红绿灯程序完整版

通灯设计交通灯设计方案:1:实现东西路----南北路红绿灯的交通指示。

2:东西路灯变化----红绿黄一南北路灯变化----绿黄红> T3:红灯延时时间---25S绿灯延时时间---20S黄灯延时时间一3S4:数码管显示:红灯---前20S不显示,只在最后5S开始倒计时显示。

绿灯---前15S不显示,只在最后5S开始倒计时显示。

黄灯---3S倒计时显示(若东西路为黄灯,南北路为红灯,那么南北绿的数码管也显示3S)。

5:交通应急事件处理:利用中断分别实现东西路---南北路的交通应急事件处理。

6:延时程序的使用:用循环延时和定时器计时的方法。

注:P1.0---北路绿灯,P1.1--北路黄灯,P1.2---北路红灯cP1.3--东路绿灯,P1.4---东路黄灯,P1.5----东路红灯。

【交通灯流程图】开始延时20秒5秒倒计时结束其他灯不变南北路绿灯亮,红,黄灯灭东西路红灯亮,绿,黄灯灭南北路绿灯数码管开始倒计时5秒南北路绿灯灭,黄灯亮且数码管开始倒计时3秒东西路红灯——数码管开始倒计时3秒3秒倒计时结束延时25秒5秒倒计时结束东西路绿灯亮,黄灯,红灯灭南北路红灯亮,黄灯,绿灯灭东西路数码管开始倒计时5秒其他灯不变东西路绿灯灭,黄灯亮且数码管开始倒计时3秒南北路红灯一一数码管开始倒计时3秒3秒倒计时结束程序如下:ORG 0000HLJMP LOOPORG 000BHLJMP WZDOORG 0013HLJMP WZD1ORG 0030HLOOP:MOV R3,#5MOV R4,#5MOV R2,#20l=LIfc=ER;定时器0中断,实现交通应急事件;下载可编辑亮 oMOV SP,#70H MOV IE,#85HMOV TMOD,#01H ;置T0为工作方式1MOV TH0,#3CH;置T0定时初值50msMOV TL0,#0B0HCLRTF0SETBTR0;启动定时器T0SETB P1.1 ;东---红灯亮,北---绿灯亮SETB P1.2CLR P1.0SETB P1.3SETB P1.4CLR P1.5ACALL DEL30SACALL Y ELLOW1 ; 北---绿灯转黄灯,东---红灯亮 ACALL DEL3S ;延时后北---黄灯火SETB P1.0;东:红灯火,绿灯亮,北:黄灯火,红灯CLR P1.2SETB P1.4SETB P1.5ACALL DEL55S ; 北---红灯不变,东---绿灯转黄灯ACALL Y ELLOW2ACALL DEL3SSJMP LOOPYELLOW1: ; 北---绿灯转黄灯,东---红灯不变SETB P1.0SETB P1.2CLR P1.1SETB P1.3CLR P1.5SETB P1.4RETYELLOW2: ; 东---绿灯转黄灯,北---红灯不变SETB P1.0SETB P1.1CLR P1.2SETB P1.3CLR P1.4RETWZD0: ;实现南北路交通应急事件CLR P1.0 ;(南北路保持畅通,东西路停止通行)SETB P1.1SETB P1.2SETB P1.3SETB P1.4CLR P1.5JNB P3.2,WZD0RETIWZD1: ;实现东西路交通应急事件CLR P1.3 ;(东西路保持畅通,南北路停止通行)CLR P1.2SETB P1.1SETB P1.0SETB P1.4SETB P1.5JNB P3.3,WZD1RETIDEL30S: J红绿灯延时DEL25S:JNB TF0QEL25S ;查询50ms到否CLR TFOMOV TH0,#3CH ;恢复T0定时初值50msMOV TL0,#0B0HDJNZ R2,DEL25S ;判断1s到否?未到继续状态MOV R2,#20 ;置50ms计数初值DJNZ R4,DEL25S ;状态1维持25s取数延时DEL5S:5MOV R2,#6DEL5:MOV A,R2ACALLST ;取数MOV P0,A ;实现数码管显示ACALL DEL1S ;每隔1S减1DJNZ R2,DEL5RETDEL3S:MOV R2,#4HDEL3:MOV A,R2ACALL ST ;取数MOV P2,AMOV P0,A ;数码管显示ACALL DEL1SDJNZ R2,DEL3RETDEL55S:ACALL DEL20SMOV R2,#6 ;倒计时5S DEL55:ACALL DEL1SMOV A,R2ACALLSTMOV P2,A ;数码管显示DJNZ R2QEL55RETDEL1S: ;1S 延时子程序MOV R5,#0BHST1:MOV R6,#0DAH下载可编辑ST2:MOV R7,#0CFHDJNZ R7,$DJNZ R6,ST2DJNZ R5,ST1RETDEL20S: ;20S延时子程序MOV R5,#0BH;#0DCHST3:MOV R6,#0DAHST4:MOV R7,#0CFHDJNZ R7,$DJNZ R6,ST4DJNZ R5,ST3RETST: ;取数MOV DPTR,#TABMOVC A,@A+DPTRRETTAB:DB 0FFH,0FFH,0F9H,0A4H,0B0H,99H,92HEnd.专业.整理.。

用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯传统的交通灯控制电路一般由数字电路构成,电路复杂、体积大、成本高。

采用单片机控制交通灯不但可以解决上述问题,而且还具有时间显示功能,非常方便。

下面介绍一种用单片机控制交通灯的方法。

一、硬件硬件电路如附图。

AT89C2051的P1.7~P1.5和P1.3~P1.1直接驱动红、黄、绿灯,利用单片机的串口和二片74LS164串/并转换移位寄存器实现时间显示,七段数码管为共阴管,硬件电路极为简单。

二、软件交通灯有红、黄、绿三种。

红灯亮,停止通行;绿灯亮,允许通行;黄灯亮,作过渡。

红灯亮60秒,绿灯亮55秒,黄灯亮5秒。

每组灯的亮暗状态以2分钟为周期循环,故程序采用主、子程序方式,循环结构。

另外,为了简化电路,红、黄、绿灯采用低电平点亮。

源程序清单如下:ORG0000HSTART:MOVDRTR,#TABMOVSCON,#00HMOVP1,#6CH;点亮红、绿灯MOVR0,#0;R0清零LEFT:INCR0CJNER0,#55,LP0;R0<55,转LP0MOVP1,#6AH;R0=55,点亮红、黄灯LJMPLP1LP0:CJNER0,#60,LP1;R0<60,转LP1MOVP1,#0C6H;R0=60,点亮绿、红灯LJMPRIGHTLP1:LCALLDBDBLCALLDISPLJMPLEFT;20H为1,转LEFTRIGHT:DECR0CJNER0,#5,LP2;R0>0,转LP2MOVP1,#0A6H;R0=5,点亮黄、红灯LJMPLP3LP2:CJNER0,#0,LP3MOVP1,#6CH;R0=0,点亮红、绿灯LJMPLEFTLP3:LCALLDBDBLCALLDISPLJMPRIGHTDBDB:MOVA,R0MOVB,#10DIVABMOVR1,AMOVR2,BRETDISP:MOVA,R2MOVCA,@A+DPTRMOVSBUF,AJNBTI,$;查TI位CLRTIMOVA,R1MOVCA,@A+DPTRMOVSBUF,AJNBT1,$CLRTILCALLDEALYRETDELAY:MOVR3,#09HK1:MOVR4,#100K2:MOVR5,#250K3:DJNZR5,K3DJNZR4,K2KJNZR3,K1RETTAB:DB3FH,06H,5BHDB4FH,66HDB6DH,7DH,07HDB7FH,6FH三.实验电路及连线四.实验说明1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。

51单片机交通灯(加急救车)

51单片机交通灯(加急救车)

51单片机控制交通灯一、实现功能:1、先南北红灯亮,东西绿灯亮。

南北红灯亮维持25秒,在南北红灯亮的同时东西绿灯也亮,并维持20秒;到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。

在东西绿灯熄灭时,东西黄灯亮,并维持2秒。

到2秒时,东西黄灯熄灭,东西红灯亮,同时,南北红灯熄灭,绿灯亮,东西红灯亮维持30秒。

南北绿灯亮维持25秒,然后闪亮3秒后熄灭。

同时南北黄灯亮,维持2秒后熄灭,这时南北红灯亮,东西绿灯亮。

周而复始。

2、用一个按键模拟急救车到达。

急救车到达路口时,四个方向的红灯全亮,10秒钟后恢复正常显示。

3、一辆急救车正在过路口时(即四个方向全红灯10秒倒计时未结束),又来了一辆急救车,重新从10秒开始倒计时。

4、急救车过去之后(即10秒倒计时结束),路灯状态要继续急救车到达之前的状态往下运行。

5、数码管显示绿灯变红灯、红灯变绿灯以及急救车10秒钟的倒计时。

6、急救车从路口过的时候,蜂鸣器响1s停1s的循环报警。

二、proteus仿真电路图注:此图仅作为仿真使用。

实际焊接电路时,由于单片机的驱动能力较弱,所以数码管的位选、LED的控制最好加上三极管进行电流放大,否则即使能实现功能,但是LED和数码管的发光的亮度也不强。

三、C语言程序程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define duan P0#define wei P2code uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; uchar buff[8] = {10,10,10,10,10,10,10,10};uchar weizhi = 0;uchar alarm = 0;uchar bk_TH1 = 0;uchar bk_TL1 = 0;uchar bk_cnt = 0;uchar bk_cnt_time = 0;uchar cnt_time = 0;uchar cnt = 0;uchar cnt_flash = 0;bit cnt_finish = 0;bit LED = 0;bit beef_flag = 1;sbit Er = P1^0; //东西—红灯sbit Eg = P1^1; //东西—绿灯sbit Ey = P1^2; //东西—黄灯sbit Sr = P1^3; //南北—红灯sbit Sg = P1^4; //南北—绿灯sbit Sy = P1^5; //南北—黄灯sbit beef = P1^6; //蜂鸣器void display(void);void main(void){uchar time = 0;TMOD |= 0x11;TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;ET1 = 1;ET0 = 1;INT0 = 1;EX0 = 1;IP |= 0x02;EA = 1;TR0 = 1;TR1 = 1;Sr = 0;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 0;beef = 0;buff[0] = 11;buff[1] = 11;buff[2] = 11;buff[3] = 11;buff[4] = 11;buff[5] = 11;buff[6] = 10;buff[7] = 10;while(1){while((cnt<20)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 1;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<23)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = LED;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<25)&&(alarm == 0)) {Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 1;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<50)&&(alarm == 0)) {Sr = 0;Sg = 1;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<53)&&(alarm == 0)) {Sr = 0;Sg = LED;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt_finish != 1)&&(alarm == 0)){Sr = 0;Sg = 0;Sy = 1;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}cnt_finish = 0;while(alarm == 1){Er = 1;Eg = 0;Ey = 0;Sr = 1;Sg = 0;Sy = 0;time = (10-cnt);buff[7] = time%10;buff[6] = time/10;if(cnt == 10){TR1 = 0;TH1 = bk_TH1;TL1 = bk_TL1;cnt = bk_cnt;cnt_time = bk_cnt_time;TR1 = 1;alarm = 0;}beef = beef_flag;}beef = 0;}}void int0(void) interrupt 0{TR1 = 0;if(alarm == 0){bk_TH1 = TH1;bk_TL1 = TL1;bk_cnt = cnt;bk_cnt_time = cnt_time;}TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;cnt = 0;cnt_time = 0;alarm = 1;TR1 = 1;}void timer0(void) interrupt 1 {TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;display();}void timer1(void) interrupt 3 {TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;if(++cnt_time == 20){cnt_time = 0;cnt++;beef_flag = ~beef_flag;}if(++cnt_flash == 4){cnt_flash = 0;LED = ~LED;}if(cnt == 55){cnt = 0;cnt_finish = 1;}}void display(void){duan = 0xff;wei = (1<<weizhi);duan = tab[buff[weizhi]];if(++weizhi == 8){weizhi = 0;}}。

简易交通灯报告(附源程序——汇编语言)

简易交通灯报告(附源程序——汇编语言)

题目:简易交通灯一、设计目的利用TDN微机原理试验箱及单元电路,实现对一道路交通灯的控制。

当通过车辆计数达到50时,绿灯灭,红灯亮,同时数码块倒计时若干秒(此次设计中设为9秒)。

此时,车辆停止,行人可以通过。

二、参加人员及分工李——试验报告霍——调试程序洪——编写程序三、技术要求1、设计完成交通灯的电路2、采用TDN试验箱上的8255、8259、8253完成3、程序设计中采用软件延时四、试验器材TDN-MD86/51实验箱一台,8253一片,8255一片,8259一片,数码管一组,发光二极管一组。

五、设计和调试环境TDN-MD86/51教学试验系统六、题目分析、工作原理、设计思想题目分析我们所做的交通灯是控制单路口处车辆和行人的通过及停止的简易交通灯。

因此需要两个灯和一块用于显示倒计时的数码块来控制车辆和行人的通行、停留问题。

其中两个灯分为红绿色,主要根据两只灯的亮灭情况来控制车辆,当红灯灭绿灯亮的时候车辆可以通过,而红灯亮绿灯灭时车辆就要停止通行。

数码块用于显示倒计时的时间以控制人,当倒计时开始时人通行,倒计时结束后行人就要等待。

根据题目分析得出以下设计思想及工作原理:设计思想在一开始启动交通灯时设置为红灯灭绿灯亮,让车辆先通行,行人等待,当通过50辆车后,红绿灯都同时灭然后红灯亮绿灯灭且数码快开始倒计时,此时为行人通行时间。

然后当数码块倒计时到0时行人通行的时间结束。

转而红灯灭绿灯亮又改为车辆通行时间。

红绿灯和数码块如此反复工作就构成的交通灯。

工作原理通过向8259写入程序来控制其他器件的工作。

在程序一开始写入中断向量和各芯片的控制方式字,以确保发生中断是正确的响应中断及芯片正确的工作状态。

接下来的程序就是控制8255和8253,8255选择工作方式1,A、B、C、口都做基本的输入输出。

通过8255A 口先让红灯灭绿灯亮。

8253选择工作方式2:计数停止中断,通过8253对车辆的计数达到50辆车是就发出中断请求。

单片机红绿灯程序完整版2篇

单片机红绿灯程序完整版2篇

单片机红绿灯程序完整版2篇第一篇:单片机红绿灯程序完整版(上)单片机红绿灯是一个经典的实验案例,它展示了单片机在控制和管理车辆行驶过程中的应用。

通过编写程序,我们可以模拟交通信号灯的运行,实现流畅和安全的交通流。

在这篇文章中,我将详细介绍单片机红绿灯程序的完整版,并向读者提供逐步实现该程序的指南。

我将从前期准备开始,包括所需材料和工具的概述,然后进入程序编写和单片机烧录的具体步骤。

最后,我将展示运行红绿灯程序的效果。

首先,让我们看一下所需的材料和工具。

为了完成这个项目,你将需要一块单片机开发板(如Arduino Uno),几个LED灯(红色、黄色和绿色),杜邦线,以及一台电脑。

需要特别注意的是,开发板和电脑之间需要通过USB线连接,以便将程序烧录到开发板中。

在准备好所有材料后,我们可以开始编写红绿灯程序。

我们将使用C语言来编写程序,并使用Arduino IDE作为代码编辑器。

首先,打开IDE并创建一个新的工程。

然后在代码编辑窗口中输入相关代码。

程序的主要逻辑是模拟交通信号灯的运行。

我们将交替点亮红、黄、绿三个LED灯,并设置不同的时间间隔来模拟红绿灯的变化。

例如,可以将红灯亮5秒钟,黄灯亮2秒钟,绿灯亮5秒钟。

然后,程序将循环执行这个过程,以实现连续的红绿灯变化。

在编写完程序后,我们需要将其烧录到单片机开发板中。

首先,通过USB线将开发板与电脑连接。

然后,在IDE中选择正确的开发板和端口,并点击“上传”按钮。

IDE将自动编译和烧录程序到开发板中。

一旦程序烧录完成,我们可以断开USB线,将开发板连接到电源,然后观察红绿灯的变化。

通过实验,我们可以看到红绿灯不断地在变化。

这个程序模拟了真实的交通信号灯,给我们提供了一个清晰的视觉指示,用于控制和管理车辆的行驶过程。

这个实验不仅展示了单片机的应用能力,还培养了我们对交通规则和安全的意识。

在红色、黄色和绿色的灯光交替运行中,我们可以思考如何实现更多的功能和效果。

单片机之交通灯汇编语言设计

单片机之交通灯汇编语言设计

单片机控制交通灯源程序:DISPLAY11 EQU 40H ; 东西显示码缓冲区1 DISPLAY12 EQU 41H ; 东西显示码缓冲区2 DISPLAY21 EQU 42H ;南北显示码缓冲区1 DISPLAY22 EQU 43H ;南北显示码缓冲区2 ORG 0000H SJMP MAIN ORG 0003H ;外部中断0入口入口LJMP PINT0 ORG 0013H ;外部中断1入口入口LJMP PINT1 MAIN:MOV SP,#60H ;设栈底;设栈底MOV IE,#85H ;外部中断0、外部中断1设置设置 S0:MOV R0,#20 MOV R1,#80 MOV P1,#21H ;点亮东西左转绿灯;点亮东西左转绿灯SETB P3.0 CLR P3.1 CLR P3.4 SETB P3.5 LP0:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#6, LP0 ;R0﹥6,转LP0 MOV R3, #0 LP1:CPL P1.0 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP1 MOV R3, #0 DEC R0 DEC R1 CJNE R0,#3, LP1 ;R0﹥3,转LP1 S1:MOV P1,#22H ;点亮东西左转黄灯点亮东西左转黄灯LP2:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#0, LP2 ;R0﹥0,转LP2 S2:MOV P1,#0CH ;点亮东西绿灯点亮东西绿灯MOV R0,#60 LP3:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#6, LP3 ;R0﹥6,转LP3 MOV R3, #0 LP4:CPL P1.0 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP4 MOV R3, #0 DEC R0 DEC R1 CJNE R0,#3, LP4 ;R0﹥3,转LP4 S3:MOV P1,#14H ;点亮东西黄灯点亮东西黄灯LP5:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#0, LP5 ;R0﹥0,转LP5 S4:MOV R0,#60 MOV R1,#20 MOV P1,#64H ;点亮南北左转绿灯点亮南北左转绿灯CLR P3.0 CLR P3.1 CLR P3.4 SETB P3.5 LP10:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1,#6, LP10 ;R1﹥6,转LP10 MOV R3, #0 LP11:CPL P1.6 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP11 MOV R3, #0 DEC R0 DEC R1 CJNE R1, #3, LP11 ;R1﹥3,转LP11 S5:MOV P1, #0A4H ;点亮南北左转黄灯点亮南北左转黄灯LP12:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1, #0, LP12 ;R1﹥0,转LP12 S6:MOV P1, #24H ;点亮南北绿灯点亮南北绿灯SETB P3.0 SETB P3.1 CLR P3.4 CLR P3.5 MOV R1, #40 LP13:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1,#6, LP13 ;R1﹥6,转LP13 MOV R3, #0 LP14:CPL P1.0 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP14 MOV R3, #0 DEC R0 DEC R1 CJNE R1,#3, LP14 ;R0﹥3,转LP14 S7:MOV P1, #24H ;点亮南北黄灯点亮南北黄灯SETB P3.0 CLR P3.1 SETB P3.4 CLR P3.5 LP15:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1,#0, LP15 ;R0﹥0,转LP15 LJMP S0 DISP :MOV A,R0 ;东西时间显示(CD4511) MOV B,#1 0 DIV AB SW AP A MOV DISPLAY11, A MOV DISPLAY12, B ANL DISPLAY11, 0F0H ANL DISPLAY12, F0H MOV A, DISPLAY11 ORL A, DISPLAY12 MOV P0, A MOV A, R1 ;南北时间显示(CD4511) MOV B,#1 0 DIV AB SW AP A MOV DISPLAY21, A MOV DISPLAY22, B ANL DISPLAY21, 0F0H ANL DISPLAY22, F0H MOV A, DISPLAY21 ORL A, DISPLAY22 MOV P2, A RET DELA Y:MOV R5,#05H ;1S延时(6MH Z晶体)晶体)K1:MOV R6,# 200 K2:MOV R7,#248 NOP K3:DJNZ R7, K3 DJNZ R6, K2 DJNZ R5, K1 RET DELAY1:MOV R5, #05H ;0.5S延时延时K11:MOV R6, #100 K12:MOV R7, #248 NOP K13:DJNZ R7, K13 DJNZ R6, K12 DJNZ R5, K11 RET PINT0:PUSH 90H ;中断子0程序,紧急情况(东西通行),保存P1口原来状态口原来状态 PUSH B0H ;保存P3口原来状态口原来状态MOV P1,#0CH ;点亮东西绿灯点亮东西绿灯SETB P3.0 CLR P3.1 CLR P3.4 SETB P3.5 POP B0H POP 90H PINT1:PUSH 90H ;中断子1程序,紧急情况(南北通行),保存P1口原来状态口原来状态PUSH B0H ;保存P3口原来状态口原来状态 MOV P1, #24H ; 点亮南北绿灯点亮南北绿灯 SETB P3.0 SETB P3.1 CLR P3.4 CLR P3.5 POP B0H POP 90H RETI END S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 P1= 21H P1= 2 P1= 2 P1= P1= P1= P1= P1= P1= P1= P1= P1= P3= 9FH P3= 9FH P3= 9FH P3= 9FH P3= 9FH P3= 9FH P3= 8FH P3= 8FH P3= 8FH P3= 3FH P3= P3= 5FH S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 P1.0 1 闪0 0 0 0 0 0 0 0 0 0 P1.1 0 0 1 0 0 0 0 0 0 0 0 0 P1.2 0 0 0 1 1 1 1 1 1 1 1 1 P1.3 0 0 0 1 闪0 0 0 0 0 0 0 P1.4 0 0 0 0 0 1 0 0 0 0 0 0 P1.5 1 1 1 0 0 0 1 1 1 1 1 1 P1.6 0 0 0 0 0 0 1 闪0 0 0 0 P1.7 0 0 0 0 0 0 0 0 1 0 0 0 P3.4 1 1 1 1 1 1 0 0 0 1 1 1 P3.5 0 0 0 0 0 0 0 0 0 1 闪0 P3.6 0 0 0 0 0 0 0 0 0 0 0 1 P3.7 1 1 1 1 1 1 1 1 1 0 0 0 初始值:P1=21H P3=9FH 。

单片机课程设计指导-红绿灯控制

单片机课程设计指导-红绿灯控制

单片机在红绿灯控制系统中的应用
控制红绿灯的切换:单片机通过编程控制红绿灯的切换,实现红绿灯的定时切换。 检测交通流量:单片机通过传感器检测交通流量,根据流量大小调整红绿灯的切换时间。 故障检测与报警:单片机实时检测红绿灯系统的运行状态,发现故障时及时报警。 联网控制:单片机可以与交通管理系统联网,实现远程控制和监控。
设计过程中遇到的问题和解决方案
设计成果展示,包括实物展示和演示效果
设计报告撰写,包括设计思路、设计过程、设计成果和总 结
团队合作精神,包括分工合作、沟通协调和团队协作
THANK YOU
汇报人:
单片机概述
单片机是一种集成 电路芯片,将微处 理器、存储器、输 入/输出接口等集 成在一起
单片机具有体积小、 功耗低、可靠性高、 编程灵活等特点
单片机广泛应用于 工业控制、家电、 汽车电子等领域
单片机编程主要使 用C语言或汇编语 言,通过编程实现 各种功能
单片机工作原理
单片机是一种集成 电路芯片,将微处 理器、存储器、输 入/输出接口等集 成在一起
自信表达:保持自信,清晰表达设计思路 和成果
回答问题:认真听取评委提问,准确回答
展示成果:展示课程设计成果,如实物、 视频等
总结反思:总结课程设计过程中的收获和 反思,提出改进建议
礼貌待人:尊重评委,保持礼貌,感谢评 委的指导
课程设计成绩评定标准
设计思路清晰,逻辑严密,推理精确
设计内容完整,包括硬件设计和软件设计
红绿灯控制系统的未来发展前景
智能化:通过AI技 术实现红绿灯的自 动调节,提高交通 效率
节能化:采用太阳 能等可再生能源, 降低能源消耗
联网化:实现红绿 灯与交通管理系统 的联网,提高交通 管理效率

单片机交通灯编程代码

单片机交通灯编程代码

单片机交通灯编程代码1. 概述交通灯是城市道路上的重要设施,用于控制车辆和行人的通行。

单片机交通灯编程代码是指使用单片机控制交通灯的工作状态和时序。

本文将介绍如何使用C语言编写单片机交通灯的程序,并给出一个示例代码。

2. 硬件准备在编写单片机交通灯程序之前,我们需要准备以下硬件设备:•单片机开发板(例如:Arduino、Raspberry Pi等)•三个LED灯(分别表示红灯、黄灯和绿灯)•杜邦线(用于连接单片机和LED)3. 程序设计思路为了实现交通灯的正常工作,我们需要按照一定的时序来控制三个LED的亮灭状态。

一般情况下,红灯亮表示停止,黄灯亮表示准备,绿灯亮表示行进。

基于以上思路,我们可以设计一个简单的时序循环,使得三个LED按照规定的时间间隔依次亮起。

4. 程序实现下面是一个使用C语言编写的示例代码:#include <stdio.h>#include <wiringPi.h>#define RED_LED_PIN 0 // 红灯引脚#define YELLOW_LED_PIN 1 // 黄灯引脚#define GREEN_LED_PIN 2 // 绿灯引脚void setup() {wiringPiSetup(); // 初始化wiringPi库pinMode(RED_LED_PIN, OUTPUT);pinMode(YELLOW_LED_PIN, OUTPUT);pinMode(GREEN_LED_PIN, OUTPUT);}void loop() {digitalWrite(RED_LED_PIN, HIGH); // 红灯亮delay(3000); // 延时3秒digitalWrite(RED_LED_PIN, LOW); // 红灯灭digitalWrite(YELLOW_LED_PIN, HIGH); // 黄灯亮delay(1000); // 延时1秒digitalWrite(YELLOW_LED_PIN, LOW); // 黄灯灭digitalWrite(GREEN_LED_PIN, HIGH); // 绿灯亮delay(5000); // 延时5秒digitalWrite(GREEN_LED_PIN, LOW); // 绿灯灭}int main() {setup(); // 初始化设置while (1) {loop(); // 循环执行交通灯控制程序}return 0;}在上述代码中,我们首先通过wiringPiSetup()函数初始化了wiringPi库,并分别设置了红、黄、绿三个LED的引脚模式为输出。

单片机汇编,红绿灯显示实验报告

单片机汇编,红绿灯显示实验报告

实验报告学生姓名:学号:指导教师:实验地点:实验时间:2018年4月2日实验红绿灯显示实验一、实验目的:1.掌握程序控制指令。

2.掌握分支程序、子程序、循环程序的编写方法。

3.掌握软件延时的方法、了解机器周期和指令周期的概念。

4.了解“静态显示”的含义。

二、实验内容:在显示实验的基础上,如果将第7位,第3位,第1位分别看成红灯、黄灯和绿灯,红灯5秒(对应位显示0)后,显示黄灯1秒(对应位显示0),再显示绿灯3秒,编写对应程序,程序要求,延时使用子程序,最好使用标志位。

其它内容见显示实验三、实验步骤:1.程序清单:a):#include<>typedef unsigned char u8;typedef unsigned int u16;#define Dpy P0sbit LSA = P2^2;sbit LSB = P2^3;sbit LSC = P2^4;u8 code array[17] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71,0x00};void ls(u8 c, u8 b, u8 a){LSA = a;LSB = b;LSC = c;}void delay(u16 i){while(i>0) i--;}void Dpy1Display(u8 i){ls(1,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}void Dpy2Display(u8 i){ls(1,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}void Dpy3Display(u8 i){ls(1,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}void Dpy4Display(u8 i){ls(1,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}void Dpy5Display(u8 i){ls(0,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}void Dpy6Display(u8 i){ls(0,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}void Dpy7Display(u8 i){ls(0,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}void Dpy8Display(u8 i){ls(0,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h){Dpy1Display(a);Dpy2Display(b);Dpy3Display(c);Dpy4Display(d);Dpy5Display(e);Dpy6Display(f);Dpy7Display(g);Dpy8Display(h);}b):#include<>typedef unsigned char u8;typedef unsigned int u16;extern void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h);void main(){u16 i, j, n;n = 108;while(1){for(j=10;j>0;j--){for (i=0; i<n; i++)DpyDisplay(j-1,16,16,16,16,16,16,16);}for(j=2;j>0;j--){for (i=0; i<n; i++)DpyDisplay(16,16,j-1,16,16,16,16,16);}for(j=5;j>0;j--){for (i=0; i<n; i++)DpyDisplay(16,16,16,16,j-1,16,16,16);}}}2.实验现象:开发板数码管第一位从9逐秒递减至0后,第三位从1逐秒递减至0,之后第五位从4逐秒递减至0。

单片机交通灯控制器的汇编程序设计共5页

单片机交通灯控制器的汇编程序设计共5页

单片机交通灯控制器的设计一. 设计任务在一十字路口设置交通灯,并用单片机对其进行合理的控制。

时间方向控制要求白天东西绿灯黄灯红灯南北红灯绿灯黄灯夜晚东西黄灯南北黄灯二. 总体设计方案现在流行的一种设计为两主干线相交的十字路。

本设计采用一主干道(南北方向),一从干道(东西方向)的路口,即主干道的通行时间为从干道的2倍。

在正常情况下,两干道的交通灯按图1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位LED上;另发挥部分为当出现紧急情况时,路口的交通灯全为红灯,紧急情况解除时,恢复到原来的状态。

其具体状态如图1。

状态持续时间/S 南北方向东西方向控制码绿黄红绿黄红1 40 亮灭灭灭灭亮01111110B2 5 灭亮灭灭灭亮10111110B3 20 灭灭亮亮灭灭11001111B4 5 灭灭亮灭亮灭11011101B5 按紧急键灭灭亮灭灭亮11011110B6 按夜晚键灭亮灭灭亮灭01111100B7 按恢复键恢复恢复恢复恢复恢复恢复恢复原来其系统框图如图2。

三.硬件电路的设计1. 单片机系统单片机系统采用atmel公司的AT89C51芯片,晶振选用6MHZ,电源电压采用5V。

其总体系统电路图见图3。

2. 信号灯与按钮电路的设计信号灯采用发光二极管组成,分红黄绿三种颜色。

该系统用于控制信号灯的输出线路有六条,按钮输出线有三条,应用AT89C51的P2.7,P3口来实现上述连接。

3个按钮一端通过上拉电阻连接到电源,并输入单片机,另一端接地,这样未按下时,输入是高电平,反之,为低电平。

采用软件消抖。

3. LED显示电路用LED显示器共有4位,需8位输出口用于位选输出,分别选用AT89C51的P1,P2口,驱动电路采用芯片7407驱动器。

四.软件设计本系统的软件包括主程序,显示程序和定时器溢出中断程序三部分。

1. 主程序:设置堆栈,定时器初始化,中断系统初始化,显示缓冲区赋初值,设置状态标志,状态切换。

用51单片机控制交通灯汇编语言编写

用51单片机控制交通灯汇编语言编写

用51单片机控制交通灯汇编语言编写(总15页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--基于51单片机的交通灯控制系统设计摘要:在日常生活中,交通信号灯的使用,市交通得以有效管理,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

交通灯控制系统由80C51单片机、键盘、LED显示、交通灯延时组成。

系统除具有基本交通灯功能外,还具有时间设置、LED信息显示功能,市交通实现有效控制。

关键词:交通灯,单片机,自动控制一引言当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段。

但这个技术在19世纪就已经出现了。

1858年,在英国伦敦主要街头安装了以燃煤气为光源的红、蓝两色的机械般手势信号灯,用以指挥马车通行。

这是世界上最早的交通信号灯。

1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。

它由红绿两以旋转方式玻璃提灯组成,红色表示“停止”,绿色表示“注意”。

1869年1月2日,煤气灯爆炸,是警察受伤,遂被取消!电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。

红灯亮表示“停止”,绿灯亮表示“通行”。

信号灯的出现,使得交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。

1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。

绿灯时通行信号灯,面对绿灯的车辆可以直行,左转弯和右转弯,除非两一种标志禁止某一种转向。

左右转弯车辆必需让合法的正在路口内行驶的车辆和过人行横线的行人优先通行。

红灯是禁行信号灯,面对红灯的车辆必需在交叉路口的停车线后停车。

黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已经十分接近停车线而不能安全停车的可以进入交叉路口!二概要设计设计思路利用单片机实现交通灯的控制,该任务分以下几个方面:a 实现红、绿、黄灯的循环控制。

单片机汇编,红绿灯显示实验报告

单片机汇编,红绿灯显示实验报告

实验报告学生姓名:学号:指导教师:实验地点:实验时间:2018年4月2日实验红绿灯显示实验一、实验目的:1.掌握程序控制指令。

2.掌握分支程序、子程序、循环程序的编写方法。

3.掌握软件延时的方法、了解机器周期和指令周期的概念。

4.了解“静态显示”的含义。

二、实验内容:在显示实验的基础上,如果将第7位,第3位,第1位分别看成红灯、黄灯和绿灯,红灯5秒(对应位显示0)后,显示黄灯1秒(对应位显示0),再显示绿灯3秒,编写对应程序,程序要求,延时使用子程序,最好使用标志位。

其它内容见显示实验三、实验步骤:1.程序清单:a):#include<>typedef unsigned char u8;typedef unsigned int u16;#define Dpy P0sbit LSA = P2^2;sbit LSB = P2^3;sbit LSC = P2^4;u8 code array[17] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71,0x00};void ls(u8 c, u8 b, u8 a){L SA = a;L SB = b;L SC = c;}void delay(u16 i){w hile(i>0) i--;}void Dpy1Display(u8 i){l s(1,1,1);D py = array[i];d elay(100);D py = 0x00;}void Dpy2Display(u8 i){l s(1,1,0);D py = array[i];d elay(100);D py = 0x00;}void Dpy3Display(u8 i){l s(1,0,1);D py = array[i];d elay(100);D py = 0x00;}void Dpy4Display(u8 i){l s(1,0,0);D py = array[i];d elay(100);D py = 0x00;}void Dpy5Display(u8 i){l s(0,1,1);D py = array[i];d elay(100);D py = 0x00;}void Dpy6Display(u8 i){l s(0,1,0);D py = array[i];d elay(100);D py = 0x00;}void Dpy7Display(u8 i){l s(0,0,1);D py = array[i];d elay(100);D py = 0x00;}void Dpy8Display(u8 i){l s(0,0,0);D py = array[i];d elay(100);D py = 0x00;}void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h){D py1Display(a);D py2Display(b);D py3Display(c);D py4Display(d);D py5Display(e);D py6Display(f);D py7Display(g);D py8Display(h);}b):#include<>typedef unsigned char u8;typedef unsigned int u16;extern void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h); void main(){u16 i, j, n;n = 108;w hile(1){for(j=10;j>0;j--){for (i=0; i<n; i++)DpyDisplay(j-1,16,16,16,16,16,16,16);}for(j=2;j>0;j--){for (i=0; i<n; i++)DpyDisplay(16,16,j-1,16,16,16,16,16);}for(j=5;j>0;j--){for (i=0; i<n; i++)DpyDisplay(16,16,16,16,j-1,16,16,16);}}}2.实验现象:开发板数码管第一位从9逐秒递减至0后,第三位从1逐秒递减至0,之后第五位从4逐秒递减至0。

单片机的汇编交通灯程序

单片机的汇编交通灯程序

/****************************************************************************** ** 描述: ** A T89S52液晶演示数据p0,控制p2** 功能:** 万年历、频率计、密码锁、点阵屏** 作者:** 哥不在江湖~~** 技术支持:** 湖南工学院************************************************************************************************ */;****************************************************************************** *****************;;系统起始程序区ORG 0000HSTART: LJMP MAINORG 000BHLJMP TIMEORG 001BHLJMP TIME2;****************************************************************************** *****************;;系统监控程序区ORG 0030HMAIN: MOV SP, #80H ;确立堆栈区MOV PSW, #00H ;MOV TMOD, #01H ;定时器初始化,定时器0以工作方式1工作CLR F0 ;判断表格首地址标志位CLR EAMOV R0, #20H ;RAM区首地址MOV R7, #96 ;RAM区单元个数ML: MOV @R0, #00HINC R0DJNZ R7, MLTSF: MOV DPTR, #DISBH ;系统初始化后提示符“P.”字符代码表首地址MOV R5, #08HMOV R0, #78HDISPTSF:CLR AMOVC A, @A+DPTRMOV @R0, AINC R0INC DPTRDJNZ R5, DISPTSFFUN: ACALL DISP ;调显示子程序显示提示符“P.”ACALL KEY ;调用键扫描程序JB 20H.0, JT ;S2键按下,则执行交通灯的程序JB 20H.1, SZAJ2 ;S3键按下,则执行数字按键的程序LJMP FUNSZAJ2: LJMP SZAJ;****************************************************************************** *****************;;交通灯程序入口JT: MOV IE, #82H ;定时器0初始化MOV TMOD, #01H ;(1秒钟定时)MOV TH0, #3CHMOV TL0, #0B0HMOV R4, #20CLR 21H.0CLR TR1CLR TR0;****************************************************************************** *****************;ONE: MOV R3, #15 ;第一个状态,主绿次红MOV P3, #0DEH ;灯亮,R3为秒计数;****************************************************************************** *****************;TSF1: MOV DPTR, #DISBHMOV R5, #08HMOV R0, #78HDISPTSF1:CLR A ;数码管显示缓存区扫描MOVC A, @A+DPTRMOV @R0, AINC R0INC DPTRDJNZ R5, DISPTSF1MOV 78H, #05H ;数码管显示缓存区付初值MOV 79H, #01H ;主绿次红,初值15SETB TR0 ;开定时;****************************************************************************** *****************;HA1: ACALL DISPJNB 21H.0, HUI1CLR 21H.0 ;15秒倒计时程序DJNZ 78H, HUIQU1MOV R6, 79HCJNE R6, #00H, TENLJMP HUIQU1TEN: ACALL DISPJNB 21H.0, TENMOV 78H, #09HMOV 79H, #00HDEC R3CLR 21H.0LJMP HUIQU1HUI1: LJMP HA1HUIQU1: DJNZ R3, HA1;***********************************************************************************************;CLR TR0 ;第二个状态,主黄次红;****************************************************************************** *****************;TWOTWO: MOV IE, #88H ;定时器1初始化MOV TMOD, #10H ;(0.5秒定时器)MOV TH1, #3CHMOV TL1, #0B0HMOV R4, #10;****************************************************************************** *****************;TWO: MOV R3, #5 ;R3还是秒计数MOV P3, #0DDH ;灯亮;****************************************************************************** *****************;TSF2: MOV DPTR, #DISBHMOV R5, #08HMOV R0, #78H ;数码管显示缓存区扫描DISPTSF2:CLR AMOVC A, @A+DPTRMOV @R0, AINC R0INC DPTRDJNZ R5, DISPTSF2 ;数码管显示缓存区付初值MOV 78H, #05H ;主黄次红,初值05MOV 79H, #00H;***************************************************************************** ******************;CLR 22H.0SETB TR1 ;开定时器1MOV R7, #00HHA2: ACALL DISPJNB 22H.0, HA2 ;执行两次0.5秒定时,则计1秒INC R7CLR 22H.0CJNE R7, #02H, HA2DEC 78HMOV R7, #00H;****************************************************************************** *****************;CJNE R3, #4, HUIQU2 ;当倒计时剩下3秒时,执行主行道黄灯闪烁的程序;****************************************************************************** *****************;SHAN21: CLR 22H.0LIANG2: JB 22H.0, SHAN22MOV P3, #0DFH ;主行道闪烁程序ACALL DISPLJMP LIANG2SHAN22: CLR 22H.0MIE2: JB 22H.0, SHAN2MOV P3, #0DDHACALL DISPLJMP MIE2SHAN2: DEC 78HDEC R3CJNE R3, #1, SHAN21LJMP TIAO2HUIQU2: DJNZ R3, HA2HUI2: LJMP HA2TIAO2: NOP;****************************************************************************** *****************;CLR TR1 ;第三个状态,主红次绿CLR TR0 ;定时器的选择SANSAN: MOV IE, #82HMOV TMOD, #01HMOV TH0, #3CHMOV TL0, #0B0HMOV R4, #20;****************************************************************************** *****************;SAN: MOV R3, #5MOV P3, #0F3H;****************************************************************************** *****************;TSF3: MOV DPTR, #DISBHMOV R5, #08HMOV R0, #78HDISPTSF3:CLR AMOVC A, @A+DPTRMOV @R0, AINC DPTRDJNZ R5, DISPTSF3MOV 78H, #05HMOV 79H, #00H;****************************************************************************** *****************;SETB TR0 ;开定时HA3: ACALL DISPJNB 21H.0, HA3 ;5秒倒计时程序CLR 21H.0DEC 78HDJNZ R3, HA3;****************************************************************************** *****************;CLR TR0 ;选择定时器1,即0.5秒定时器SISI: MOV IE, #88HMOV TMOD, #10HMOV TH1, #3CHMOV TL1, #0B0HMOV R4, #10;****************************************************************************** *****************;SI: MOV R3, #5MOV P3, #0EBHTSF4: MOV DPTR, #DISBHMOV R5, #08HMOV R0, #78HDISPTSF4:CLR AMOVC A, @A+DPTRMOV @R0, AINC R0INC DPTRDJNZ R5, DISPTSF4MOV 78H, #05HMOV 79H, #00HCLR 22H.0SETB TR1HA4: ACALL DISPJNB 22H.0, HA4INC R7CLR 22H.0CJNE R7, #02H, HA4MOV R7, #00H;***************************************************************************** ******************;CJNE R3, #4, HUIQU4;***************************************************************************** ******************;SHAN41: CLR 22H.0LIANG4: JB 22H.0, SHAN42MOV P3, #0FBHACALL DISPLJMP LIANG4SHAN42: CLR 22H.0MIE4: JB 22H.0, SHAN4MOV P3, #0EBHACALL DISPLJMP MIE4SHAN4: DEC 78HDEC R3CJNE R3, #1, SHAN41LJMP TIAO4HUIQU4: DJNZ R3, HA4HUI4: LJMP HA4TIAO4: NOPLJMP JT;****************************************************************************** *****************;SZAJ: MOV P3, #0FFH ;数据初始化MOV 78H, #10HMOV 79H, #10HMOV 7AH, #10HMOV 7BH, #10HMOV 7CH, #10HMOV 7DH, #10HMOV 7EH, #10HMOV 7FH, #10HXS: ACALL DISPACALL KEYJB 20H.0, KEY00 ;是S2键,转KEY00执行JB 20H.1, KEY11 ;是S3键,转KEY11执行JB 20H.2, KEY22 ;是S4键,转KEY22执行JB 20H.3, KEY33 ;是S5键,转KEY33执行JB 20H.4, KEY44 ;是S6键,转KEY44执行JB 20H.5, KEY55 ;是S7键,转KEY55执行JB 20H.6, KEY66 ;是S8键,转KEY66执行JB 20H.7, KEY77 ;是S9键,转KEY77执行LJMP OUTKEY00: LCALL JIAOHUANMOV 7FH, #00HLCALL DISPLJMP OUTKEY11: LCALL JIAOHUANMOV 7FH, #01HLCALL DISPLJMP OUTKEY22: LCALL JIAOHUANMOV 7FH, #02HLCALL DISPLJMP OUTKEY33: LCALL JIAOHUANMOV 7FH, #03HLCALL DISPLJMP OUTKEY44: LCALL JIAOHUANMOV 7FH, #04HLCALL DISPLJMP OUTKEY55: LCALL JIAOHUANMOV 7FH, #05HLCALL DISPLJMP OUTKEY66: LCALL JIAOHUANMOV 7FH, #06HLCALL DISPLJMP OUTKEY77: LCALL JIAOHUANMOV 7FH, #07HLCALL DISPOUT: LJMP XSTIME: MOV TH0, #3CHMOV TL0, #0B0HDEC R4CJNE R4, #0, ZHUANSETB 21H.0MOV R4, #20ZHUAN: RETITIME2: MOV TH1, #3CHMOV TL1, #0B0HDEC R4CJNE R4, #0, ZHUAN2SETB 22H.0MOV R4, #10ZHUAN2: RETIDISBH: DB 11H,10H,10H,10H,10H,10H,10H,10H,10H ;提示符“P.”字符序号;显示字符段选码表(共阳极代码)TAB: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ;0-8DB 90H, 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH ;9,A,B,C,D,E,F,灭,p.;****************************************************************************** ********;;键扫描子程序KEY: LCALL KEYCHULI ;调P1口数据处理子程序JZ EXIT ;没有键按下,转返回LCALL DISP ;调显示子程序去抖动LCALL DISPLCALL KEYCHULI ;调P1口数据处理子程序JZ EXIT ;没有键按下,转返回MOV B, 20H ;保存取反后的键值KEYSF: LCALL KEYCHULI ;调P1口数据处理子程序JZ KEY1 ;键释放,则将键值转移并保存LCALL DISP ;调显示子程序延时LJMP KEYSF ;等待释放KEY1: MOV 20H, B ;键值送20H保存EXIT: RET ;子程序返回;P1口按键数据处理子程序KEYCHULI: PUSH PSW ;保护现场CLR RS1 ;改变当前寄存器组为组1SETB RS0MOV P1, #0FFH ;先向P1口写1MOV A, P1 ;读P1口数据CPL A ;P1口数据取反MOV 20H, A;保存取反后的键值CLR RS1 ;恢复当前寄存器组为组0CLR RS0POP PSW ;恢复现场RET ;子程序返回;数码管显示子程序DISP;入口:7FH,7EH,7DH,7CH,7BH,7AH,79H,78H (LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)DISP: PUSH DPHPUSH DPLPUSH ACCPUSH PSWCLR RS1 ;改变当前寄存器组为组1SETB RS0MOV R1, #78H ;显示缓冲存储单元首地址MOV R2, #0FEH ;从右至左显示MOV R5, #08H ;循环次数,即驱动数码管的位数DISP1: MOV A, @R1MOV DPTR, #TABMOVC A, @A+DPTRMOV P0, A ;送段控MOV P2, R2 ;送位控LCALL DLMOV A, R2 ;延时1毫秒RL A ;获得新的位控码MOV R2, A ;保存新的位控码INC R1 ;获得新的显示缓冲单元地址DJNZ R5, DISP1 ;循环没有结束则继续DISP2: POP PSW ;恢复当前寄存器组的组号POP ACCPOP DPLPOP DPHRET;延时1ms子程序(晶振频率12MHz)DLDL: MOV R7, #02HDL1: MOV R6, #0FFHDL2: DJNZ R6, DL2DJNZ R7, DL1RET;将78至7EH单元的内容交换子程序JIAOHUAN:MOV 78H, 79HMOV 79H, 7AHMOV 7AH, 7BH MOV 7BH, 7CH MOV 7CH, 7DH MOV 7DH, 7EH MOV 7EH, 7FH RETEND。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档