当前位置:文档之家› 嵌入式系统课程设计报告(使用ADS编写交通灯程序及实时温度采集系统程序,含proteus图)

嵌入式系统课程设计报告(使用ADS编写交通灯程序及实时温度采集系统程序,含proteus图)

嵌入式系统 课程设计报告设计任务一 十字路口交通灯控制一、设计目的:1.了解基于ARM7核的LPC2106的管脚功能和特点,掌握I/O 控制寄存器的设置方法; 2.掌握ARM7应用系统编程开发方法,能用C 语言编写应用程序; 3.熟练掌握ADS1.2软件的使用以及PROTEUS 仿真调试的方法;二、具体任务:1.采用PROTEUS 完成十字路口交通灯控制的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106,东西南北方向分别设置红黄绿3个指示灯,东西方向和南北方向各用1个数码管显示通行时间;2.用ADS1.2编写C 语言应用程序,完成十字路口交通灯控制;3.采用PROTEUS 将应用程序装载在LPC2106中,进行仿真验证。

要求东西方向和南北方向的数码管显示通行时间并倒计时,可以设置成一样,例如都是9秒倒计时;每当倒计时时间到,完成红黄绿指示灯的状态切换,模拟实现十字路口的交通灯管理控制。

三、硬件电路设计。

附图:四、源程序。

(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:#include "config.h"void delay(unsigned int i){while(i--){unsigned char j;for(j=0;j<125;j++){;}}}int main(void){uint32 k;PINSEL0=0x00000000; PINSEL1=0x00000000; IODIR=0xFFFFFFFF;while(1){IOSET=0x000019E1;delay(10000);IOCLR=0x000019E1;IOSET=0x00001FE1;delay(10000);IOCLR=0x00001FE1;IOSET=0x000001E1;delay(10000);IOCLR=0x000001E1;IOSET=0x00001F61;delay(10000);IOCLR=0x00001F61;IOSET=0x00001B61;delay(10000);IOCLR=0x00001B61;IOSET=0x000019A1;delay(10000);IOCLR=0x000019A1;IOSET=0x000013E1;delay(10000);IOCLR=0x000013E1;IOSET=0x000016E1;delay(10000);IOCLR=0x000016E1;IOSET=0x000001A1;delay(10000);IOCLR=0x000001A1;for(k=0;k<5;k++){IOSET=0x00000011;delay(3000);IOCLR=0x00000010;delay(3000);}IOCLR=0x00000001;IOSET=0x000019CC;delay(10000);IOCLR=0x000019CC;IOSET=0x00001FCC;delay(10000);IOCLR=0x00001FCC;IOSET=0x000001CC;delay(10000);IOCLR=0x000001CC;IOSET=0x00001F4C;delay(10000);IOCLR=0x00001F4C;IOSET=0x00001B4C;delay(10000);IOCLR=0x00001B4C;IOSET=0x0000198C;delay(10000);IOCLR=0x0000198C;IOSET=0x000013CC;delay(10000);IOCLR=0x000013CC;IOSET=0x000016CC;delay(10000);IOCLR=0x000016CC;IOSET=0x00000188;delay(10000);IOCLR=0x00000188;for(k=0;k<5;k++){IOSET=0x0000000A;delay(3000);IOCLR=0x00000002;delay(3000);}IOCLR=0x00000008;}}五、仿真效果。

(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)设计任务二uC/OS-Ⅱ的移植与应用一、设计目的:1.了解嵌入式实时操作系统u C/OS-Ⅱ可移植、可裁剪等性能特点,正确理解实时操作系统中任务、信号、消息、中断等基本概念以及u C/OS-Ⅱ多任务管理的调度算法;2.掌握u C/OS-Ⅱ在ARM7上移植的方法;3.能将u C/OS-Ⅱ移植在LPC2106中,并根据具体要求创建用户任务,解决实际问题;二、具体任务:1.u C/OS-Ⅱ移植在LPC2106中。

2.编写用户任务程序,完成实时温度的采集控制。

硬件电路见参考硬件电路图,图中用滑动变阻器代替温度传感器转换后的电压,用ADC0809完成A/D转换,并用数码管显示出来。

三、参考硬件电路。

(用文字对所设计的电路功能、原理做详细说明)四、源程序。

(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:/****************************************************************************** **************************/#include "config.h"#define TASK_STK_SIZE 64#define KEY 0x00001000 //管脚P0.12#define ADCS 0x00002000 //管脚P0.13#define ADCEND 0x00004000 //管脚P0.14uint32 led_code[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴极数码管字形码OS_STK Main_Task_key_Stk[TASK_STK_SIZE]; //定义任务堆栈大小OS_STK Main_Task_adc_Stk[TASK_STK_SIZE];OS_STK Main_Task_led_Stk[TASK_STK_SIZE];uint32 i; //ADC转换值void Task_key(void *data); //任务1,按下按键,启动数据采集void Task_adc(void *data); //任务2,A/D转换void Task_led(void *data); //任务3,数码管显示/****************************************************************************** ***************************** 函数名称: main** 功能描述: c语言的主函数,由它启动多任务环境******************************************************************************* *************************/int main (void){OSInit(); /* 操作系统初始化*/OSTaskCreate(Task_key, (void *)0, &Main_Task_key_Stk[TASK_STK_SIZE - 1], 0);OSTaskCreate(Task_adc, (void *)0, &Main_Task_adc_Stk[TASK_STK_SIZE - 1], 1);OSTaskCreate(Task_led, (void *)0, &Main_Task_led_Stk[TASK_STK_SIZE - 1], 2);OSStart(); /* 启动操作系统*/return 0;}void delay(uint32 t) //延时子程序{while(t--);}void IO_init(void) //IO端口初始化{PINSEL0 = 0x00000000; /* 32个IO口全初始化为通用IO口*/PINSEL1 = 0x00000000;IODIR = 0x00002FFF; /* P0.00-P0.11、P0.13-P0.14为输出口,其它全为输入口*/}/****************************************************************************** ***************************** 函数名称: Task_key** 功能描述: μCOS-II的第一个任务,判断按键状态,若按下并松开,则开始下一个任务,否则一直等待******************************************************************************* *************************/void Task_key(void *p_arg){p_arg = p_arg; /* 避免编译警告*/TargetInit(); /* 目标板初始化*/IO_init();while (TRUE) { /* Task body, always written as an infinite loop.*/while ((IOPIN & KEY) != 0); /* 判断按键按下*/delay(2000);while ((IOPIN & KEY) == 0); /* 判断按键松开*/IOCLR = 0x0000FFFF; /* P0.00-P0.15输出全部清零*/OSTaskSuspend(OS_PRIO_SELF); /* 挂起本任务*/}}/****************************************************************************** ***************************** 函数名称: Task_adc** 功能描述: μCOS-II的第二个任务,进行AD转换******************************************************************************* *************************/void Task_adc(void *p_arg){p_arg = p_arg; /* 避免编译警告*/TargetInit(); /* 目标板初始化*/IO_init();while (TRUE) {/* ADC启动时序模拟,START接口需要20us的脉冲输入*/IOCLR = ADCS; /*ADC_START低电平输入*/delay(20); /*延时20us*/IOSET = ADCS; /*ADC_START高电平输入*/delay(20); /*延时20us*/IOCLR = ADCS; /*ADC_START低电平输入*/while ((IOPIN & ADCEND) == 0); /* EOC若为高电平,则表示转换完毕*/IOSET = 1<<11; /* 输出使能*/i = IOPIN; /* 接收转换数据*/i = i>>15; /* 处理数据*/OSTaskSuspend(OS_PRIO_SELF); /* 挂起本任务*/}}/****************************************************************************** ***************************** 函数名称: Task_led** 功能描述: μCOS-II的第三个任务,LED数码管显示转换值******************************************************************************* *************************/void Task_led(void *p_arg){int32 gw,sw,bw;p_arg = p_arg; /* 避免编译警告*/TargetInit();IO_init();while (TRUE) {gw = i%10; /* 取个位数据*/sw = i%100/10; /* 取十位数据*/bw = i/100; /* 取百位数据*/IOSET = (1<<10) | led_code[gw]; /* 显示个位数据*/delay(200);IOCLR = 0x0000FFFF;IOSET = (1<<9) | led_code[sw] | (1<<7) ; /* 显示十位数据*/delay(200);IOCLR = 0x0000FFFF;IOSET = (1<<8) | led_code[bw]; /* 显示百位数据*/delay(200);IOCLR = 0x0000FFFF;OSTaskResume(1); /* 恢复ADC任务*/}}/****************************************************************************** ** End Of File五、仿真效果。

相关主题