基于凌阳单片机交通灯的设计.docxVIP

  • 3
  • 0
  • 约1.88千字
  • 约 4页
  • 2020-08-30 发布于江苏
  • 举报
基于凌阳单片机交通灯的设计 一、实验设备:凌阳开发板一块, unSPIDE 3.0.4 编译软件 二、实验目的:红灯显示时间 50s,黄灯显示时间 5s,绿灯显示时间 50s 三、实验程序的编写 1、 首先打开 unSPIDE 3.0.4 编译软件,建一个名字为 miaobiao 的工程 2、 新建一个 c 文件命名 main,输入相应的代码并保持(代码见附件) 3、 添 加 头 文 件 #include SPCE061V004.h , 方 法 是 在 软 件 的 安 装 目 录 下 找 到 SPCE061V004.h 文件,并复制到 miaobiao 工程文件夹下,然后把 SPCE061V004.h 文件 添加到工程中(不填加该文件进工程会报错) 。 上面两段代码在 unSPIDE 3.0.4 上编译通过,在低版本软件上编译可能会出现错误 四、硬件的连接 1、 共阴的二位数码管 1 个,排针若干,导线若干, LED 灯 6 个(灯的个数可以自己定,现 在暂时定为 6 个) 2、 单片机上的 IOA0~IOA7 引脚分别接数码管 a~dp ,用于控制断选 IOB0~IOB2 分别接数码管位选脚,用于控制位选 IOB3 接焊好 LED 六个灯的公共端 电路图: 五、实验代码: #include SPCE061V004.h #define P_WatchDog_Clear (volatile unsigned int *) 0x7012 static int b[10]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};// 共 阴 int temp,shi,ge,LED; void delay(int z); main() { int i=0; *P_IOA_Attrib=0x00ff;// 设置 A 口低 8 位为同向低输出,高 8 位为同向上拉输入 *P_IOA_Dir=0x00ff; *P_IOA_Data=0xff00;// *P_IOB_Attrib=0x00ff;// 初始化 IB0~IB1 ,控制数码管的位选 *P_IOB_Dir=0x00ff; *P_IOB_Data=0x0000; *P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1;// 设置定时器 TimerA :8192Hz *P_TimerA_Data=0xe000;// 计数初值,定时时间为 1s,X=65536-1*8192=e000h *P_INT_Ctrl=C_IRQ1_TMA; temp=50; LED=0x0003;// 红灯亮 __asm(INT IRQ);// 安装定时 ,开放 IRQ 的总中断允许位,但 FIQ 中断仍禁止 while(1) { if(temp==00i==0) { temp=5; i=1; LED=0x000c;// 黄灯亮 } else if(temp==00i==1) { temp=50; LED=0x0030;// 绿灯亮 i=2; } else if(temp==00i==2) { temp=5; LED=0x000c;// 黄灯亮 i=3; } else if(temp==00i==3) { temp=50; LED=0x0003;// 红灯亮 i=0; } shi=temp/10; ge=temp%10; *P_IOA_Data=b[shi]; *P_IOB_Data=0xfffe;//IOB0 选中 delay(5); *P_IOA_Data=b[ge]; *P_IOB_Data=0xfffd;//IOB1 选中 delay(5); *P_IOA_Data=LED; *P_IOB_Data=0xfffb;//IOB2 选中 delay(5); *P_WatchDog_Clear=C_WDTCLR; } } void delay(z)// 延时函数 { int x,y; for(x=z;x0;x--) for(y=10;y0;y--); } #include SPCE061V004.h void IRQ1(void)__attribute__((ISR));// 中断函数 void IRQ1(void) { temp--; *P_INT_Clear=C_IRQ1_TMA;// 清除中断标志控制单元 }

文档评论(0)

1亿VIP精品文档

相关文档