嵌入式课程设计(交通灯与uCOS-的移植与应用)
更新时间:2024-04-03 20:45:02 阅读量: 综合文库 文档下载
- 基于嵌入式的课程设计推荐度:
- 相关推荐
班级:自动化1004 学号:10401701305 嵌入式系统 课程设计报告
姓名:甘显豪 指导教师: 成绩:
设计任务一 十字路口交通灯控制
一、设计目的:
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秒倒计时;每当倒计时时间到,完成红黄绿指示灯的状态切换,模拟实现十字路口的交通灯管理控制。
1
三、硬件电路设计。(参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面,并用文字对所设计的电路功能、原理进一步说明)
附图:
2
硬件电路说明:
复位电路,
时钟电路(仿真可略), ARM7微处理器LPC2106,
南北、东西道路交通灯,东西南北左转弯灯 交通计时共阴显示数码管。
交通规则:(1)首先是东西方向绿灯亮10s(从15s减到5s),然后东西黄灯闪烁5次,接着是东西左转弯绿灯亮10s,然后是东西左转弯绿灯闪烁5s;(2)南北方向方向绿灯亮10s,然后南北黄灯闪烁5次,接着是南北左转弯绿灯亮10s,然后是南北左转弯绿灯闪烁5s(没提到的方向都是红灯亮)。
四、源程序。(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明) 源程序:
#include \#include\
void delay(unsigned int x) //延迟0.xMS {
while(x--) {
unsigned char j; for(j=0;j<125;j++) { ; } } }
uint8 led[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管段选值 void display() //数码管显示 { uint8 i=15; while(i-5) { IOSET = (led[ i / 10 ] << 13) | (led[ i % 10 ] << 6); delay(5000); IOCLR = (led[ i / 10 ] << 13) | (led[ i % 10 ] << 6); i--; } }
int main(void) {
3
uint8 k; int8 type=1; PINSEL0=0x00000000; //将管脚设置为通用IO端口GPIO PINSEL1=0x00000000; IODIR=0xFFFFFFFF; //将方向寄存器IODIR全设为输出=1 while(1) { switch(type) { case 1: //东西绿灯亮,南北红灯亮 IOSET=0x00600021; display(); k=5; //东西黄灯闪烁 while(k) { IOSET=0x00000010; IOSET = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); IOCLR=0x00000010; IOCLR = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); k--; } /*东西左转弯绿灯亮*/ IOCLR=0x00600021; IOSET=0X00500009; display(); type=2; break; case 2: //东西左转弯绿灯闪烁 k=5; while(k) { IOSET=0x00100000; IOSET = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); IOCLR=0x00100000; IOCLR = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); k--; }
4
type=3; break; case 3: //南北绿灯亮,东西红灯亮 IOCLR=0x00000001; IOSET=0x0060000C; display(); k=5;//南北黄灯闪烁 while(k) { IOSET=0x00000002; IOSET = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); IOCLR=0x00000002; IOCLR = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); k--; } /*南北左转弯绿灯亮*/ IOCLR=0X0060000C; IOSET=0x00A00009; display(); type=4; break; case 4: //南北左转弯绿灯闪烁 k=5; while(k) { IOSET=0x00800000; IOSET = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); IOCLR=0x00800000; IOCLR = (led[ k / 10 ] << 13) | (led[ k % 10 ] << 6); delay(3000); k--; } type=1; IOCLR=0xFFFFFFFF; //全部清零 } } }
5
五、仿真效果。(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)
6
设计任务二 uC/OS-Ⅱ的移植与应用
一、设计目的:
1.了解嵌入式实时操作系统uC/OS-Ⅱ可移植、可裁剪等性能特点,正确理解实时操作系统中任务、信号、消息、中断等基本概念以及uC/OS-Ⅱ多任务管理的调度算法;
2.掌握uC/OS-Ⅱ在ARM7上移植的方法;
3.能将uC/OS-Ⅱ移植在LPC2106中,并根据具体要求创建用户任务,解决实际问题;
二、具体任务:
1.uC/OS-Ⅱ移植在LPC2106中。
2.编写用户任务程序,完成实时温度的采集控制。硬件电路见参考硬件电路图,图中用滑动变阻器代替温度传感器转换后的电压,用ADC0809完成A/D转换,并用数码管显示出来。
三、参考硬件电路。(用文字对所设计的电路功能、原理做详细说明)
附图:
7
硬件电路说明:
复位电路,
时钟电路(仿真可略), ARM7微处理器LPC2106, 温度电压值输入电路,
A/D转换器ADC0808(8bit), 按键电路SW,
四位数码管显示电路。
四、源程序。(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)
源程序:
/********************************************************************************************************/
#include \
#define TASK_STK_SIZE 64 #define key 0x00001000 //按键
#define adstart 0x00002000 //AD采样开始 #define adend 0x00004000 //AD结束 const uint32 led_code[16]={0x0000003F,0x00000006,0x0000005B,0x0000004F,0x00000066,0x0000006D,0x0000007D,0x00000007,
8
0x0000007F,0x00000006F,0x00000077,0x0000007C,0x00000039,0x0000005E,0x00000079,0x00000071};
OS_STK Task0Stk[TASK_STK_SIZE]; OS_STK Task1Stk[TASK_STK_SIZE]; OS_STK Task2Stk[TASK_STK_SIZE]; INT32U i;
void Task0(void *data); void Task1(void *data); void Task2(void *data);
/********************************************************************************************************* ** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
********************************************************************************************************/ int main (void) { OSInit(); OSTaskCreate(Task0, (void *)0, &Task0Stk[TASK_STK_SIZE - 1],1); OSTaskCreate(Task1, (void *)0, &Task1Stk[TASK_STK_SIZE - 1],2); OSTaskCreate(Task2, (void *)0, &Task2Stk[TASK_STK_SIZE - 1],3); OSStart(); return 0; }
void delay(INT32U t) { uint32 x,y; for(x=t;x>0;x--) for(y=110;y>0;y--); }
void L_Init (void) //初始化 {
PINSEL0=0x00000000;
PINSEL1=0x00000000;
9
IODIR|= 0x00002fFF; }
/********************************************************************************************************* ** 函数名称:Task0
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务
********************************************************************************************************/ void Task0(void *p_arg) {
p_arg = p_arg; TargetInit(); L_Init(); for(;;) {
while((IOPIN&key)!=0);//假如按键没有按下,则一直循环在这里 L_Init();
while((IOPIN&key)==0);//按键被按下又弹起,程序顺序执行 IOCLR= 0x0000ffFF;
OSTaskSuspend(OS_PRIO_SELF); // OSTimeDlyHMSM(0,0,0,8); // IOSET=adstart;
// OSTimeDlyHMSM(0,0,0,1); // IOCLR=adstart;
// OSTimeDlyHMSM(0,0,0,1); // IOSET=adstart; } }
/**************************************************************************************************** ** 函数名称:Task1
** 功能描述: μCOS-II的第2个任务,AD转换
********************************************************************************************************/ void Task1(void *p_arg) {
p_arg = p_arg;
10
L_Init(); for(;;) { IOCLR=adstart; //输入高低的脉冲电平 delay(100); IOSET=adstart; delay(100); IOCLR=adstart; delay(100); L_Init();
while((IOPIN&adend)==0); IOSET=1<<11; //11位为AD的OE使能端 // OSTimeDlyHMSM(0,0,0,50); i=IOPIN; i=i>>15; //AD的输出OUT8到OUT1分别由15到22位控制 OSTaskSuspend(OS_PRIO_SELF); } }
/**************************************************************************************************** ** 函数名称:Task2
** 功能描述: μCOS-II的第3个任务,LED显示
********************************************************************************************************/ void Task2(void *p_arg) { INT32U gw,sw,bw;
p_arg = p_arg; L_Init();
//动态循环显示数码管
while((IOPIN&key)!=0) //假如按键再次按下,则推出显示循环 {
gw = i; /* 取个位数据 */ sw = i0/10; /* 取十位数据 */ bw = i/100; /* 取百位数据 */
IOSET=(1<<10)|led_code[gw]; //显示个位
11
delay(10);
IOCLR=0x00000fff; //消影 //IOSET=1<<10; //IOCLR=1<<10;
IOSET=(1<<9)|led_code[sw]; //显示十位
delay(10);
IOCLR=0x00000fff; //消影 //IOSET=1<<9; //IOCLR=1<<9;
IOSET=(1<<8)|led_code[bw]; //显示百位
delay(10);
IOCLR=0x00000fff; //消影 //IOSET=1<<8; //IOCLR=1<<8; OSTaskResume(2); }
//IOCLR=0x00000fff; //delay(2000);
//OSTaskResume(1); //恢复任务1AD采样 //OSTaskResume(2); //恢复任务2LED显示
// OSTaskResume(2); //恢复优先级为2的任务,即任务1 //OSTaskResume(3); //恢复优先级为3的任务,即任务2 }
12
五、仿真效果。(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)
注:此设计可以在POT电阻改变时,LED实时显示,无须停止运行再重新运行仿真.
13
正在阅读:
江苏省连云港市灌云县四队中学高中语文《五人墓碑记8》教案 苏教06-15
11—20各数的认识习题03-27
乡镇政府2009年工作总结08-23
世界地理 复习题分析 - 图文06-16
关于重新确认浙江省卫生村的通知03-27
2014年大课间活动设计方案06-17
电子书和纸质书的未来发展趋势09-07
国际经济法任务01任务000204-23
如何解决农村剩余劳动力07-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 交通灯
- 移植
- 嵌入式
- 课程
- 应用
- 设计
- uCOS
- 《预包装食品营养标签通则》(GB 28050-2011)问答(修订版)
- 15春华师《学校管理学》在线作业答案
- 发改局长在县委巡察组巡察情况反馈会议上的表态发言
- 光催化反应器举例简介
- 浅谈SAP期末清帐和重分类
- 2015年深圳市《出生医学证明》管理办法
- 高中语文必修一文言文基础知识检测(附答案)
- 多媒体在农村小学数学教学中的运用案例与反思
- LWIP之SOCKET的实现
- 2018年中国养老产业发展前景报告目录
- 《成本会计》作业
- 教育科研,百年老校可持续发展的推进器 - 图文
- 市第三期小学、第四期中学专家型教师培养对象
- 那些经典的句子
- 高三用点差法解中点弦问题专题教案
- 模拟试题二
- 专色包装印前完稿制作:
- 环境监测中心档案管理程序
- 论国际贸易中信用证结算的风险及防范
- 《会计学原理》教案