资源简介

利用C51单片机做的一个关于交通灯的设计,其中包含按键中断的扩展,压缩文件内包含代码、Proteus仿真和实验报告。(C语言)

资源截图

代码片段和文件信息

#include
#include
#include
#define uint unsigned int
#define uchar unsigned char

#define PA  XBYTE[0x7F00]   //PA端口地址
#define PB  XBYTE[0x7F01]
#define PC  XBYTE[0x7F02]
#define COM  XBYTE[0x7F03]
//char code dx516[3] _at_ 0x003b;
uchar tempaann;

sbit shi=P3^0;
sbit ge=P3^1; /*对要使用的单片机各个口进行定义*/
bit flag=0;
   sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
   sbit key4=P2^3;
   sbit key5=P2^4;
   sbit key6=P3^3;
uchar code table[]={
0x3f0x060x5b0x4f
0x660x6d0x7d0x07
0x7f0x6f0x770x7c
0x390x5e0x790x71};         /*将数字0123456789的16进制数定义成数组用以显示*/
   //定义所有函数
void delay(uint z);
void disp(uint n);
void  xint0();
void  xint1();
void timer0();
void nb_flash(void);
void dx_flash(void);
void nanbei();
void dongxi();                 
   void nanbeizuo();
void dongxizuo();
   void dongxizuogreen();
void nanbeizuogreen();
void  dongxigreen();
void  nanbeigreen();
void allred();
void allyellow();
//主函数
void main()        
{
uint num;
num=0;
aa=0;
COM =0x82;        //PA口输出,PB口输入,PC口输出
TMOD=0x01;        //定时器工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;            //开启总中断
ET0=1;           //开启定时器中断
TR0=1;           //开启定时器0
EX0=1;           //外部中断0允许标志
IT0=0;           //外部中断0电平触发
EX1=1;           //外部中断1允许标志
IT1=0;       //外部中断1电平触发

while(1){
 nanbei();
 nb_flash();
 nanbeizuo();
 dongxi();
 dx_flash();
 dongxizuo();
  }

  }

void delay(uint z)                    //延时函数
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void timer0() interrupt 1            //定时器0中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==18)
{
aa=0;
flag=1;
}

}
void disp(uint n)                    //数码管显示函数
{
  while(!flag)
  {
  ge=0;
  PC=table[n%10];
  delay(50);
  shi=1;ge=1;
  shi=0;
  PC=table[n/10];
  delay(50);
  shi=1;ge=1;
   }
  if(flag==1)
     flag=0;
}
void nanbei()                    //南北绿灯东西红灯及数码管显示
{ //南北通行
uint num;
num=60;
disp(num);
   
while(num<=60&&num>0)
{ PA=0xd8;
num--;
   P1=0xe1;
disp(num);
}
}
void nanbeizuo()                    //南北方向左转及数码管显示
{ uint num;
num=15;
   
disp(num);
while(num<=15&&num>0)
{ P1=0xe4; 
num--;
     PA=0xe9;
   disp(num);
}
}
void dongxizuo()                     //东西方向左转及数码管显示
{ uint num;
  num=15; 
   
while(num<=15&&num>0)
{ P1=0xe4;
PA=0xea;   
disp(num);
num--;
}
}
void dongxi()                     //东西绿灯南北红灯及数码管显示
{ uint num;
        
  num=45;
   disp(num);
while(num<=45&&num>0)
{
            PA=0xe4;
P1=0xcc;   
disp(num);
num--;
}
}
void nb_flash(void)              //南北方向黄灯闪烁及数码管显示
{
uint a;

for(a=3;a>0;a-

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5000  2020-05-28 17:33  新建文件夹 (2)\main.c
     文件       28063  2020-05-28 17:35  新建文件夹 (2)\实训.pdsprj
     文件     1601024  2020-06-08 18:07  新建文件夹 (2)\实验报告.doc
     目录           0  2020-06-08 18:07  新建文件夹 (2)\

评论

共有 条评论