单片机彩灯课程设计1.docx
《单片机彩灯课程设计1.docx》由会员分享,可在线阅读,更多相关《单片机彩灯课程设计1.docx(14页珍藏版)》请在冰豆网上搜索。
单片机彩灯课程设计1
电子工程课程设计报告书
课程名称智能电子小产品课程设计
课程设计总评成绩
学生姓名、学号
学生专业班级
指导教师姓名
课程设计起止日期2010.06.21---2010.07.09
一、课程设计项目名称
基于单片机彩灯控制
二、项目设计目的及技术要求
项目设计目的:
本设计以AT89C52单片机为核心并用它来控制发光二极管双灯点亮循环的实验装置,用AT89C52单片机控制16个发光二极管发光,实现亮点的循环移动。
通过Proteus软件设计、仿真、PCB制版,并能掌握通过软件控制发光二极管的思路和技巧。
这次设计重点就在于利用单片机的知识去控制系统的运行。
技术要求:
1:
彩灯至少有5种工作模式。
2:
当按下按键后,模式可以切换。
3:
同时数码管要显示此时是第几个模式。
三、项目设计方案论证(可行性方案、最佳方案、软件程序、硬件电路原理图和PCB图)
通过单片机控制二极管的闪烁,通过中断来改变模式同时串行输出数码管。
P0,P1口接16个二极管,P3口接扩展板的数码显示接口。
系统图
模式一是P1,P2口从左到右依次点亮。
模式二是P1,P216个二极管每隔三个亮着,每次亮着的灯向前移一位。
模式三是P1口全熄,P2全亮,P1口依次点亮后P2口依次熄灭。
模式四是P1口全亮,P2全熄,P1口依次熄灭后P2口依次点亮。
模式五是亮点从心型上端从两边移动下来。
主程序是从判断是哪个模式到进入模式运行不停循环,当外部中断0来了时响应中断,中断程序是模式加一并显示此时是模式几。
显示是用了单片机的串行输出,扩展板上是四个移位寄存器74LS164,和四个共阳极数码管。
单片机串型输出用的是工作方式0(移位寄存器方式)。
串型数据通过RXD输入输出,TXD输出频率为f/12的时钟脉冲。
数据格式为8位,地位在前高位在后。
单片机RTD接74LS164的AB,TXD接CLK。
74LS164内部结构图:
74LS164真值表及时序图
H-高电平L-低电平X-任意电平
↑-低到高电平跳变
QA0,QB0,QH0-规定的稳态条件建立前的电平
QAn,QGn-时钟最近的↑前的电平
单片机串行输出四组数据到寄存器中,使数码管对应四个数字。
输出的码字与具体的连接有关,此扩展板1-9的码字为0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09
程序流程图:
中断程序:
主程序:
四、项目设计结果分析(分析试验过程中获得的数据、波形、现象或问题的正确性和必然性,分析产生不正确结果的原因和处理方法)
开始时编写的程序思想是在主程序不停等待中断,在中断中执行彩灯模式的死循环模式,再来中断后响应中断跳出循环执行下一个模式,这样不断的通过中断进入死循环,不停的中断套中断。
后把程序烧到单片机后发现不能切换模式。
最后反观程序才明白一个中断时不能不停嵌套的。
小结:
本次课程设计耗时三个星期,让理论联系实际,真正的体会了单片机的应用。
同时让我掌握一部分的C语言编写程序能力,也巩固了以前所学的东西。
还有要感谢陈迪虎,汪波同学的帮助,在程序出现问题时,帮我指出了错误。
同时还要感谢指导老师们的帮助。
五、参考文摘(相关文摘不少于5篇,记录每篇文献的作者姓名.文献名称.文献发行城市:
文献出版社,出版年;文献内容摘要,每篇不少于100字)
[1]祈伟.单片微型计算机原理与接口技术教程[M]北京:
北京航空航天大学出版社,2007
[2]刘同法、陈忠平眭仁武等.单片机基础与最小系统实践[M]北京:
北京航空航天大学出版社,2007
[3]毛敏.MCS-51系列单片机系统及应用实践教程[M]高等教育出版社,2006
[4]陈忠平等.单片机原理及接口[M]北京:
清华大学出版社,2007
[5]林伸茂、管继等.《8051单片机彻底研究实习篇》第二版[M]北京:
人民邮电出版社,2004
[6]李广弟等.单片机原理机应用[M]北京:
北京航空航天大学出版社,2003
[7]潘永雄.《新单片机原理及应用》第三版[M]西安:
西安电子科技大学出版社,2003
[8]公茂法、马宝甫编著.单片机人机接口实例集[M]北京:
北京航空航天出版社,1998
附件:
1.程序:
#include
inti=0,j=0,g=0;
LEDIndex=0;
unsignedchartable[16]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};
unsignedchardisp_data;
sbitdisp=P3^1;
voiddelay(intms)
{
inti1,j1;
for(i1=0;i1{
for(j1=0;j1<1141;j1++);
}
}
voiddip(inti)
{
PCON=0x00;
SCON=0x00;
ES=0;
disp_data=table[i];
SBUF=disp_data;
while(TI==0)
TI=0;
for(j=0;j<3;j++)
{disp_data=0xff;
SBUF=disp_data;
while(TI==0)
TI=0;
}
delay(10);
}
voidLEDShow(unsignedintLEDStatus)
{
P0=(LEDStatus&0x00FF);
P1=((LEDStatus>>8)&0x00FF);
}
voidMode_1(void)
{
LEDShow(0xfffff<LEDIndex=(LEDIndex+1)%17;
delay(10);
}
voidMode_2(void)
{
unsignedinta=0x77,b,c;
for(i=0;i<4;i++)
{
b=a>>7;
c=a<<1;
a=c|b;
P0=a;
P1=a;
delay(15);
}
}
voidMode_3(void)
{unsignedinta;
P0=0xFF;
P1=0x00;
a=0xff;
for(j=0;j<9;j++)
{
P0=a;
a=a<<1;
delay(15);
}
a=0xff;
for(j=0;j<9;j++)
{
P1=~a;
a=a<<1;
delay(15);
}
}
voidMode_4(void)
{unsignedinta;
P1=0xFF;
P0=0x00;
a=0xff;
for(j=0;j<9;j++)
{
P0=~a;
a=a<<1;
delay(15);
}
a=0xff;
for(j=0;j<9;j++)
{
P1=a;
a=a<<1;
delay(15);
}
}
voidMode_5(void)
{unsignedinta,b;
P0=0xfe;
delay(10);
a=0x02;
b=0x80;
P0=~a;
P1=~b;
delay(10);
for(j=0;j<7;j++)
{a=a<<1;
b=b>>1;
P0=~a;
P1=~b;
delay(10);
}
}
voidISR0(void)interrupt0
{g++;
if(g==6)
g=1;
dip(g);
}
voidmain(void)
{
IT0=1;
EX0=1;
EA=1;
dip
(1);
while
(1)
{
switch(g)
{
case1:
Mode_1();break;
case2:
Mode_2();break;
case3:
Mode_3();break;
case4:
Mode_4();break;
case5:
Mode_5();break;
default:
{g=1;Mode_1();}break;
}
}
}
2.元件清单:
1.φ3(红绿各8个)16
2.1/4W470Ω16
3.排针1
4.排线1
5.电路板1
3.电路原理图:
4.PCB版图: