综合课程设计 题 目 学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期
(2010级)
综合课程设计 自动化学院 自动化专业 100628XX 1006XXXX XXX XXX/XXX 20XX年X月XX日
一.实验目的
1.通过1、2、3三个按键实现LED灯的1~20级亮度调节,分别对应变亮、变暗、复位的功能;同时光的亮度值通过数码管显示;
2.通过第四个按键,唤出SOS的灯光和音频求救信号; 3.唤出SOS信号结束后返回亮度调节;
二.实验器材
1.斯迈特89S51F型号单片机实验板套装; 2.RS232转USB串口通讯线; 3.装有Keil软件的PC电脑;
三.实验初衷
1.用以模拟野外生活中使用的可调光源,在不同情况实现不同需求的亮度,在某些情况下节省部分电能;
2.针对野外生存的困境,加入SOS求救机制,以灯光和声音两种方式,采用国际通用海难求救信号的形式发送求救信号;
四.核心电路
图1 数码管和按键部分电路
1.P0和P2对应两个数码管,数码管为共阳极接法,因此输出低电平点亮数码管;此外S0-S3与P3.0-03.3口一一对应,S0-S3按下时接地,低电平是为按下状态;
图2 LED灯部分电路
2.P1对应LED灯LED灯也是共阳极接法,同数码管,输出低电平点亮;
五.操作步骤
1.构思实验目的及实现思路;
2.选定单片机实验板的型号和串口线;
图3 斯迈特89S51F型号单片机实验板
3.在Keil中选定相应型号,并且设定合适的配置;
图4 Keil中单片机选型
图5 Keil相应配置
六.设计流程图
1.主程序流程图 (见附录)
2.SOS模块LED灯、蜂鸣器规则(1表示有效) 顺序 取值 顺序 取值 顺序 取值 1 1 12 1 23 0 2 0 13 0 24 0 3 1 14 0 25 0 4 0 15 1 26 0 5 1 16 1 27 1 6 0 17 1 28 0 7 0 18 0 29 1 8 0 19 0 30 0 9 0 20 1 31 1 10 1 21 1 32 0 11 1 22 1 33 0 3.SOS模块流程图 (见附录)
七.程序代码
#include
#define uchar unsigned char #define uint unsigned int
uchar code shiwei[]={0xc0,0xf9,0xa4};
uchar code gewei[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; int sosdone=0;
int i,level,test; // level为亮度值,test作调试使用; int sosnum=0,sosnum0=0; //分别标记中断次数和SOS模式阶段 sbit reset=P3^2; sbit up=P3^0; sbit down=P3^1;
sbit sosbutton=P3^3; //按下SOS按钮,开机SOS模式; sbit bee=P2^0;
void relay(int i) //延时函数; {
i--; return; }
void time() interrupt 1 //SOS模式定时器中断; {
sosnum++;
sosnum0=sosnum/5; //更新sosnum和sosnum0; TH0=(65536-50000)/256;
TL0=(65536-50000)%6; //设定初始值,时间为50毫秒; if(sosnum0<6||sosnum0>27) {
if(sosnum0%2==1)
{ P1=0x00;P2=0x00;P0=0x00;} else
{ P1=0xff;P2=0xff;P0=0xff;} } else {
if((sosnum0-6)/3%2==1)
{ P1=0x00;P2=0x00;P0=0x00;} else
{ P1=0xff;P2=0xff;P0=0xff;} }
if(sosnum0>=32) {
sosdone=1; } }
void sos() {
sosnum=0; sosnum0=0;
TMOD=0x01; // TH0=(65536-50000)/256;
TL0=(65536-50000)%6; // EA=1; ET0=1;
TR0=1; // while(!sosdone); sosdone=0; return; }
void main() {
int n;
n=0,level=10;
while(1) // {
if(n>=1000) // { //1000 if(up==0) level++; if(down==0) level--; n=0; }
if(reset==0)
level=10; // for(i=0;i P1=0x00; relay(5000); } 定时器模式01,16位定时器;设定周期为50毫秒; 开中断,启动定时器; 让程序持续运行; 延时以避免一加到顶; 次循环才扫描一次键盘;按键按下则为低电平; 为共阳极,低电平有效;