第一篇:单片机实训二程序:课室打铃控制系统
广东石油化工学院
单片机综合实训报告
目
录
实训一:温度控制系统.................................................................................错误!未定义书签。
一、实训目的.................................................................................错误!未定义书签。
二、实训设备.................................................................................错误!未定义书签。
三、实训内容.................................................................................错误!未定义书签。
四、电路原理图.............................................................................错误!未定义书签。
五、实训程序设计.........................................................................错误!未定义书签。
六、作业及思考题.........................................................................错误!未定义书签。实训二:课室打铃控制系统.........................................................................错误!未定义书签。
一、实训目的.................................................................................错误!未定义书签。
二、实训设备.................................................................................错误!未定义书签。
三、实训内容.................................................................................错误!未定义书签。
四、电路原理图.............................................................................错误!未定义书签。
五、实训程序设计.........................................................................错误!未定义书签。
六、作业及思考题.........................................................................错误!未定义书签。实训三:LED点阵显示实训..........................................................................错误!未定义书签。
一、实训目的.................................................................................错误!未定义书签。
二、实训设备.................................................................................错误!未定义书签。
三、实训内容.................................................................................错误!未定义书签。
四、电路原理图.............................................................................错误!未定义书签。
五、实训程序设计.........................................................................错误!未定义书签。
六、作业及思考题.........................................................................错误!未定义书签。实训心得体会.................................................................................................错误!未定义书签。
实训二:课室打铃控制系统 #include
#include
unsigned char code dis_week[]={“SUN,MON,TUE,WED,THU,FRI,SAT”};
unsigned char code para_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};//星期月参变数
unsigned char data dis_buf1[16];
//lcd上排显示缓冲区
unsigned char data dis_buf2[16];
//lcd下排显示缓冲区
unsigned char data year,month,date,week;//年、月、日、星期
unsigned char data armhour,armmin,armsec;//闹钟时、分、秒
unsigned char data hour,min,sec,sec100;//时、分、秒、百分之一秒
unsigned char data flag,vkey,skey;//设置状态计数标志、按键先前值、按键当前值
bit alarm;//标识是否启用闹钟,1--启用,0--关闭
sbit
rs = P2^6;
//LCD数据/命令选择端(H/L)
sbit
rw = P2^5;
//LCD读/写选择端(H/L)
sbit
ep = P2^7;
//LCD使能控制
sbit
PRE = P1^6;
//调整键(k3)杜邦线将P1.6接到独立按键
sbit
SET = P1^7;
//调整键(k4)
杜邦线将P1.7接到独立按键 sbit
SPK = P1^5;
//蜂鸣器
void delayms(unsigned char ms);//延时程序
bit lcd_busy();
//测试LCD忙碌状态程序
void lcd_wcmd(char cmd);
//写入指令到LCD程序
void lcd_wdat(char dat);
//写入数据到LCD程序
void lcd_pos(char pos);
//LCD数据指针位置程序
void lcd_init();
//LCD初始化设定程序
void pro_timedate();
//时间日期处理程序
void pro_display();
//显示处理程序
void pro_key();
//按键处理程序
void time_alarm();
//定时报警功能(闹钟)
unsigned char scan_key();
//按键扫描程序
unsigned char week_proc();
//星期自动计算与显示函数
bit leap_year();
//判断是否为闰年
void lcd_sef_chr();
//LCD自定义字符程序
void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s);
//更新显示缓冲区函数
// 延时程序
void delay(unsigned char ms)
{
while(ms--)
{
unsigned char i;
for(i = 0;i< 250;i++)
{
_nop_();
//执行一条_nop_()指令为一个机器周期
_nop_();
_nop_();
_nop_();
}
}
}
//测试LCD忙碌状态
bit lcd_busy()
{
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result =(bit)(P0&0x80);//LCD的D0--D7中,D7=1为忙碌,D7=0为空闲
ep = 0;
return result;
}
//写入指令到LCD
void lcd_wcmd(char cmd)
{
while(lcd_busy());//当lcd_busy为1时,再次检测LCD忙碌状态,lcd-busy为0时,开始写指令
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
//写入数据到LCD
void lcd_wdat(char dat)
{
while(lcd_busy());//当lcd_busy为1时,再次检测LCD忙碌状态,lcd-busy为0时,开始写数据
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
//LCD数据指针位置程序
void lcd_pos(char pos)
{
lcd_wcmd(pos|0x80);//数据指针=80+地址码(00H~27H,40H~67H)
}
//设定二个自定义字符,(注意:LCD1602中自定义字符的地址为0x00--0x07,即可定义8个字符)
//这里我们设定把一个自定义字符放在0x00位置(000),另一个放在0x01位子(001)
void lcd_sef_chr()
{
//第一个自定义字符
lcd_wcmd(0x40);//“01 000 000” 第1行地址(D7D6D5D4D3为字符存放位置(0--7),D2D1D0为字符行地址(0--7))
lcd_wdat(0x1f);//“XXX 11111”
第1行数据(D7D6D5为XXX,表示为任意数(一般用000),D4D3D2D1D0为字符行数据(1-点亮,0-熄灭)
lcd_wcmd(0x41);//“01 000 001” 第2行地址
lcd_wdat(0x11);//“XXX 10001”
第2行数据
lcd_wcmd(0x42);//“01 000 010” 第3行地址
lcd_wdat(0x15);//“XXX 10101”
第3行数据
lcd_wcmd(0x43);//“01 000 011” 第4行地址
lcd_wdat(0x11);//“XXX 10001”
第4行数据
lcd_wcmd(0x44);//“01 000 100” 第5行地址
lcd_wdat(0x1f);//“XXX 11111”
第5行数据
lcd_wcmd(0x45);//“01 000 101” 第6行地址
lcd_wdat(0x0a);//“XXX 01010”
第6行数据
lcd_wcmd(0x46);//“01 000 110” 第7行地址
lcd_wdat(0x1f);//“XXX 11111”
第7行数据
lcd_wcmd(0x47);//“01 000 111” 第8行地址
lcd_wdat(0x00);//“XXX 00000”
第8行数据
//第二个自定义字符
lcd_wcmd(0x48);//“01 001 000” 第1行地址
lcd_wdat(0x01);//“XXX 00001”
第1行数据
lcd_wcmd(0x49);//“01 001 001” 第2行地址
lcd_wdat(0x1b);//“XXX 11011”
第2行数据
lcd_wcmd(0x4a);//“01 001 010” 第3行地址
lcd_wdat(0x1d);//“XXX 11101”
第3行数据
lcd_wcmd(0x4b);//“01 001 011” 第4行地址
lcd_wdat(0x19);//“XXX 11001”
第4行数据
lcd_wcmd(0x4c);//“01 001 100” 第5行地址
lcd_wdat(0x1d);//“XXX 11101”
第5行数据
lcd_wcmd(0x4d);//“01 001 101” 第6行地址
lcd_wdat(0x1b);//“XXX 11011”
第6行数据
lcd_wcmd(0x4e);//“01 001 110” 第7行地址
lcd_wdat(0x01);//“XXX 00001”
第7行数据
lcd_wcmd(0x4f);//“01 001 111” 第8行地址
lcd_wdat(0x00);//“XXX 00000”
第8行数据
}
//LCD初始化设定
void lcd_init()
{
lcd_wcmd(0x38);
//设置LCD为16X2显示,5X7点阵,八位数据借口
delay(1);
lcd_wcmd(0x0c);
//LCD开显示及光标设置(光标不闪烁,不显示“-”)
delay(1);
lcd_wcmd(0x06);
//LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)
delay(1);
lcd_wcmd(0x01);
//清除LCD的显示内容
delay(1);
}
//闰年的计算
bit leap_year()
{
bit leap;
if((year%4==0&&year%100!=0)||year%400==0)//闰年的条件
leap=1;
else
leap=0;
return leap;
}
//星期的自动运算和处理
unsigned char week_proc()
{
unsigned char num_leap;
unsigned char c;
num_leap=year/4-year/100+year/400;//自00年起到year所经历的闰年数
if(leap_year()&& month<=2)
//既是闰年且是1月和2月
c=5;
else
c=6;
week=(year+para_month[month]+date+num_leap+c)%7;//计算对应的星期
return week;
}
//更新显示缓冲区
void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s)
{
dis_buf1[0]=t1;
//
dis_buf1[1]=0x20;
//空格
dis_buf1[2]=50;
//'2'
dis_buf1[3]=48;
//'0'
dis_buf1[4]=year/10+48;
dis_buf1[5]=year%10+48;
dis_buf1[6]=0x2d;
dis_buf1[7]=month/10+48;
dis_buf1[8]=month%10+48;
dis_buf1[9]=0x2d;
//'-'
dis_buf1[10]=date/10+48;
dis_buf1[11]=date%10+48;
dis_buf1[12]=0x20;
dis_buf1[13]=dis_week[4*week];
dis_buf1[14]=dis_week[4*week+1];
dis_buf1[15]=dis_week[4*week+2];
dis_buf2[0]=t2[0];
dis_buf2[1]=t2[1];
dis_buf2[2]=t2[2];
dis_buf2[3]=t2[3];
dis_buf2[4]=t2[4];
dis_buf2[5]=t2[5];
dis_buf2[6]=0x20;
//空格
if(alarm)
dis_buf2[7]=0x01;
//alarm=1,显示闹钟启用标致(第二个自定义字符)
else
dis_buf2[7]=0x20;
//alarm=0,不显示闹钟启用标致
dis_buf2[8]=dis_h/10+48;
dis_buf2[9]=dis_h%10+48;
dis_buf2[10]=0x3a;
//':'
dis_buf2[11]=dis_m/10+48;
dis_buf2[12]=dis_m%10+48;
dis_buf2[13]=0x3a;
dis_buf2[14]=dis_s/10+48;
dis_buf2[15]=dis_s%10+48;
}
//时间和日期处理程序
void pro_timedate()
{
sec++;
if(sec > 59)
{sec = 0;
min++;
if(min>59)
{min=0;
hour++;
if(hour>23)
{hour=0;
date++;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
if(date>31){date=1;month++;}
//大月31天
if(month==4||month==6||month==9||month==11)
if(date>30){date=1;month++;}
//小月30天
if(month==2)
{if(leap_year())
//闰年的条件
{if(date>29){date=1;month++;}}
//闰年2月为29天
else
{if(date>28){date=1;month++;}}
//平年2月为28天
}
if(month>12){month=1;year++;}
if(year>99)year=0;
}
}
}
week_proc();
if(sec==armsec && min==armmin && hour==armhour)
{if(alarm)
TR1=1;
//闹钟启用时,报警时间到,启动Timer1
}
}
//显示处理程序
void pro_display()
{
unsigned char i;
lcd_pos(0x00);
for(i=0;i<=15;i++)
{lcd_wdat(dis_buf1[i]);}
lcd_pos(0x40);
for(i=0;i<=15;i++)
{lcd_wdat(dis_buf2[i]);}
}
//Timer0中断处理程序,秒的产生
void timer0()interrupt 1
{
TH0=0xdc;
//Timer0置10ms定时初值dc00H(2^16=65536D,dc00H=56320D)
TL0=0x00;
//定时时间=(65536-56320)*(1/11.0592)*12=10ms(f0=11.0592Mhz)
sec100++;
if(sec100 >= 100)
//1秒时间(100*10ms=1000ms=1s)
{sec100 = 0;
pro_timedate();//调用时间和日期处理程序
}
if(sec&0x01)
//“willar”闪一秒,停一秒
update_disbuf(0x00,“
”,hour,min,sec);
//0x00表示显示00位置的自定义字符
else
update_disbuf(0x00,“willar”,hour,min,sec);
pro_display();
//调用显示处理函数
}
//按键扫描程序
unsigned char scan_key()
{
skey=0x00;
//给变量vkey置初值
skey|=PRE;
//读取PRE键的状态
skey=skey<<1;
//将PRE键的状态存于skey的B1位
skey|=SET;
//读取SET键的状态,并存于skey的B0位
return skey;
//返回skey的键值(即PRE,SET的状态)
}
//外部中断INT0中断处理程序
void int0()interrupt 0
{
TR0=0;
//禁止Timer0
IE=0;
//禁止中断
lcd_wcmd(0x0e);
//显示光标“_”,整个光标不闪烁
alarm=1;
update_disbuf(0x50,“alarm:”,armhour,armmin,armsec);//更新显示数据,0x50表示要显示“P”
pro_display();
//调用显示处理程序
lcd_pos(0x47);
//使光标位于第一个调整项下
flag=0;
vkey=0x03;
while(flag^0x0a)
{skey = scan_key();
//扫描按键状态
if(skey^vkey)
//若skey与vkey相同,跳出循环,相异执行循环体
{
delay(10);
//去按键抖动
skey = scan_key();
//转回扫描按键状态
if(skey^vkey)
//若skey与vkey相同,跳出循环,相异执行循环体
{
vkey=skey;
//将skey的值付给vkey
if(skey==0x01)
//PRE键按下
{
flag++;
//调整标志位加1
switch(flag)
//将光标置于相应调整位置
{
case 1: lcd_pos(0x49);break;
//光标置小时报警设置位置
case 2: lcd_pos(0x4c);break;
//光标置分钟报警设置位置
case 3: lcd_pos(0x4f);break;
//光标置秒时报警设置位置
case 4: update_disbuf(0x50,“time: ”,hour,min,sec);
pro_display();
lcd_pos(0x05);break;
//光标置年调整位置
case 5: lcd_pos(0x08);break;
//光标置月调整位置
case 6: lcd_pos(0x0b);break;
//光标置日调整位置
case 7: lcd_pos(0x49);break;
//光标置时调整位置
case 8: lcd_pos(0x4c);break;
//光标置分调整位置
case 9: lcd_pos(0x4f);break;
//光标置秒调整位置
default:break;
}
}
if(skey==0x02)
//SET键按下
{
pro_key();
//转设置按键处理程序
}
}
}
}
lcd_wcmd(0x0c);
//设置LCD开显示及光标不闪烁,不显示“-”
lcd_wcmd(0x01);
//清除LCD的显示内容
IE=0x8f;
//CPU开中断,INT0,INT1,开中断
TR0=1;
//Timer0启动
}
//主程序,初始化及初值设定
void main()
{
lcd_init();
//初始化LCD
lcd_sef_chr();
//写入自定义字符号
hour=0;min=0;sec=0;
//开机时的时,分,秒显示
armhour=0;armmin=0;armsec=0;
//开机时的时,分,秒报警初值
year= 5;month=1;date=1;
//开机时的年,月,日,星期显示
week_proc();
alarm=1;
//初始开机,启用闹钟
IE = 0x8f;
//CPU开中断,INT0,INT1,Timer0,Timer1开中断
IP = 0x04;
//设置INT0为中断最高优先级
IT0=0;IT1=0;
//外部INT0,INT1设置为电平触发方式(注意,触发不要选边沿方式,易误动)
TMOD = 0x11;
//Timer0,Timer1工作于模式1, 16位定时方式
TH0 = 0xdc;TL0 = 0x00;
//Timer0置10ms定时初值
TH1 = 0xff;TL1 = 0x00;
//Timer1置初值
TR0 = 1;
//Timer0启动
TR1 = 0;
while(1);
} //设置按键处理程序
void pro_key()
{
switch(flag)
{
case 0:alarm=!alarm;
//启用或关闭闹钟(alarm=1:启用,alarm=0:关闭)
update_disbuf(0x50,“alarm:”,armhour,armmin,armsec);//更新显示数据
pro_display();
//调用显示处理
lcd_pos(0x47);break;
//光标回到原调整位置
case 1:armhour++;
if(armhour>23)armhour=0;
update_disbuf(0x50,“alarm:”,armhour,armmin,armsec);//更新显示数据
pro_display();
//调用显示处理
lcd_pos(0x49);break;
//光标回到原调整位置
case 2:armmin++;
if(armmin>59)armmin=0;
update_disbuf(0x50,“alarm:”,armhour,armmin,armsec);
pro_display();
lcd_pos(0x4c);break;
case 3:armsec++;
if(armsec>59)armsec=0;
update_disbuf(0x50,“alarm:”,armhour,armmin,armsec);
pro_display();
lcd_pos(0x4f);break;
case 4:year++;
if(year> 99)year= 0;
week_proc();
//星期自动运算
update_disbuf(0x50,“time: ”,hour,min,sec);
pro_display();
lcd_pos(0x05);break;
case 5:month++;
if(month>12)month=1;
week_proc();
//星期自动运算
update_disbuf(0x50,“time: ”,hour,min,sec);
pro_display();
lcd_pos(0x08);break;
case 6:date++;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
if(date>31)date=1;
//大月31天
if(month==4||month==6||month==9||month==11)
if(date>30)date=1;
//小月30天
if(month==2)
{if(leap_year())
//闰年的条件
{if(date>29)date=1;}
//闰年2月为29天
else
{if(date>28)date=1;}}
//平年2月为28天
week_proc();
//星期自动运算
update_disbuf(0x50,“time: ”,hour,min,sec);
pro_display();
lcd_pos(0x0b);break;
case 7:hour++;
if(hour>23)hour=0;
update_disbuf(0x50,“time: ”,hour,min,sec);
pro_display();
lcd_pos(0x49);break;
case 8:min++;
if(min>59)min=0;
update_disbuf(0x50,“time: ”,hour,min,sec);
pro_display();
lcd_pos(0x4c);break;
case 9:sec++;
if(sec>59)sec=0;
update_disbuf(0x50,“time: ”,hour,min,sec);
pro_display();
lcd_pos(0x4f);break;
default: break;
}
}
//Timer1中断处理程序,产生打铃的声音
void timer1()interrupt 3
{
TH1=0xff;
TL1=0x00;
SPK=~SPK;
}
//外部中断INT1中断处理程序,停止打铃声音
void int1()interrupt 2
{
if(TR1)
TR1=0;
}
第二篇:单片机实训
单片机应用课程设计教学大纲
开课学院:机电工程学院 适用专业:电子科学与技术 课程编号:2009404 课程英文名称:Single-chip Microcomputer Application System Design 实验课程总学时:36 实验课程总学分:1
一、课程性质和目的:
单片机原理及应用是一门技术性、应用性很强的学科,实验教学是它的一个极为重要的教学环节,除实验教学环节,单片机课程设计也是重要的实践教学环节,通过这一环节可使学生不但能够将课堂上学到的理论知识与实践应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能独立进行单片机应用系统的开发设计工作打良好的基础。
二、本课程与其它课程的联系与分工
先修课程:电路分析、模拟电路、数字电路、微机原理、单片机、电子线路常用软件 后续课程:传感器技术、数字信号处理等
三、单片机课程设计的基本要求
1、原则上每生一项设计,不能重复设计。
2、项目大的可多人从事,但每人必须承担足够的设计任务。
3、项目结题需要提供电路图、程序清单、设计说明书等资料,还要提供实物作品,运行照片等。
4、参加科技节展出及评奖的作品,要给与适量的加分。优秀的设计人员优先推荐参加省机电大赛或电子大赛。
5、整个课程设计过程中,严格执行考核制度,对于无故旷课、扰乱课堂秩序、玩游戏、玩手机、不从事设计和制作的行为给予严肃处理。
6、对于课堂表现好的同学,进行加分奖励。
四、课程设计的实施过程
1、基本开发工具的使用
电路设计及仿真运行工具Proteus软件、编程及编译环境Keil uVision软件、程序烧写器的使用及驱动程序的安装。
2、单片机应用系统的搭建方法
电源的设计、振荡电路参数的选择、复位电路的设计、内置及外置程序程序存储器的选择,各端口的驱动能力及接口方法。
3、学生实践能力的摸底测试
通过简单的单片机应用设计,如:流水灯、数码显示、键盘控制等,进行软环境编程测试及硬环境测试。
软环境测试:利用Proteus、Keil C51 进行仿真测试。硬环境测试:搭建具体电路,利用编程器烧写程序,进行调试。
4、选择设计题目
学生可根据自身能力和爱好,选择或自拟设计题目,并进行系统的分析和调研、可行性分析、性价比分析,形成设计任务书。指导教师处备案。
5、确定实施方案
经过方案论证,找出最优化的实施方案。以此评价开发思路。
6、加强指导
指导教师对学生的共性问题进行集中指导,对零散问题进行分别指导。
7、硬件电路设计
根据实施方案,利用Proteus软件设计原理图。原理图的质量作为考核依据。
8、软件设计
根据系统工作过程画出各部分流程图,根据流程图编写程序并进行整合,程序和流程图的质量作为考核依据。
9、仿真调试
编译后的程序加载到原理图上进行仿真,调试,调试成功后的仿真图片作为考核的依据。
10、电路搭建
根据电路原理图设计,进行布线图设计。购买电子元件,焊接线路板,线路板的焊接质量作为考核依据。
11、系统调试
系统调试成功之后,考察功能实现情况,作为考核依据。
12、撰写课程设计论文
要求从选题、论证、设计、仿真、调试、形成作品到感想写入论文内,要符合正规论文格式。
五、考核方案
1、考核分四部分进行:实物作品、课程设计论文、平时成绩、课堂表现
2、实物作品从实现功能和焊接质量进行评分,占总成绩的40%。
3、课程设计论文从论文的规格、要求进行评分,占总成绩的30%。
4、平时成绩就是平时阶段性的检查成绩,占总成绩的20%。
5、课堂表现指出勤、课堂纪律,占总成绩的10%。
6、科技节加分:一等奖5分、二等奖4分、三等奖3分、参展2分。
六、单片机课程设计题目(备选)
1、基于单片机的智能电压表设计
2、基于单片机的LED流水灯系统设计
3、基于单片机的智能船模设计
4、基于单片机的电梯控制模型设计
5、基于单片机的水位控制系统设计
6、基于单片机的多路数据采集系统设计
7、基于单片机的抢答器设计
8、基于单片机的数字温度计设计
9、基于单片机的智能小车设计
10、基于单片机的遥控器设计
11、基于单片机的串行通信发射机设计
12、基于单片机的简易智能电动车设计
13、基于单片机的太阳能热水器控制器设计
14、MCS-51单片机温度控制系统的设计
15、直流电动机的转速检测与脉宽调速
16、基于单片机的智能机器人的设计
17、基于单片机的简易无线竞赛系统的设计
18、基于单片机的车辆闯红灯监控系统设计
19、基于单片机控制的井下瓦斯监控系统设计 20、基于单片机的煤气泄漏检测报警装置设计
21、基于单片机的井式渗碳炉控制系统设计
22、基于单片机的蔬菜大棚温湿度智能控制系统设计
23、基于单片机的电子钟设计
24、基于单片机的液位控制器设计(8051)
25、基于单片机的点阵电子显示屏设计
26、基于单片机的智能寻迹避障小车设计
27、基于单片机的热敏电阻测温系统设计
28、基于单片机的智能型电话远程遥控器设计
29、基于单片机的数控直流电源设计 30、基于单片机的电子万年历设计
31、基于单片机的红外防盗报警器设计
32、基于单片机的花卉温室控温系统设计
33、基于单片机的焊机温度控制系统设计
34、基于单片机的路灯控制器设计
35、基于单片机的车床刀架控制系统设计
36、基于单片机的电机智能综合保护装置设计
37、基于单片机的太阳能热水器控制器设计
38、基于单片机的智能型矿用磁力启动器设计
39、基于单片机的无氧退火炉温控系统设计
40、基于单片机的电厂锅炉过热蒸汽温度监测系统设计
41、基于单片机的摩托车里程表研制
42、基于单片机的自动车库门的设计
43、基于单片机的自动滴灌控制系统的设计
44、基于单片机的预付费电度表设计
45、基于单片机的智能电子秤设计
46、基于单片机的油井巡视定位系统设计
47、基于单片机的照明控制系统
48、基于单片机的锅炉液位控制系统设计
49、基于单片机的洗衣机设计
50、基于单片机的锅炉汽包水位控制系统设计
51、基于单片机的多功能秒表设计
52、基于单片机的无线监护系统的设计
53、基于串行通信的红外线智能家电控制系统
54、基于单片机的智能遥控器设计
56、基于单片机的公用电话网远程控制器的设计
57、基于单片机的多功能节能微波炉控制器设计
58、基于单片机的多功能数显表设计(气压、冲击频率)
59、基于单片机的仓库温湿度测量仪设计 60、基于单片机的自动加料系统 62、基于单片机的远程温度显示系统
63、基于89C51单片机的传感器水位测量系统 64、基于51单片机的广告灯设计 65、基于单片机的水箱水位控制系统设计 66、动态电子秤设计
67、基于单片机的非接触式热量测量系统设计 68、基于单片机的非接触式位移传感器设计 69、基于单片机的非接触式温度测试仪设计 70、基于单片机的工业电加热炉的微机控制系统设计 71、基于单片机的户用超声波热量表设计 72、基于单片机的火灾自动探测报警系统设计 73、基于单片机的住宅智能化险情报警系统设计 74、基于单片机的数字温度测量及显示系统设计 75、火灾自动报警系统设计
76、基于GSM短信模块的家庭防盗报警系统 77、基于GSM模块的车载防盗系统设计 78、基于单片机的16×16点阵(滚动显示)79、基于单片机的仓库温湿度的监测系统 80、基于单片机的点阵电子显示屏设计 81、基于单片机的电子密码锁设计 82、基于单片机的温度远程显示实现 83、基于单片机的直流电机控制系统 84、基于单片机的自动加料机控制系统 85、数控直流稳压电源设计
86、智能型充电器的电源和显示的设计 87、基于CPLD的出租车计价器设计 88、基于IC卡的楼宇门禁系统的设计 89、基于SPCE061A的语音遥控小车设计 90、基于单片机的短信收发系统设计
91、智能机器人的研究与设计(自动循轨和语音控制的实现)92、PC机与单片机的串口通信 93、基于单片机的红外线防盗报警系统 94、基于单片机的转速测量系统设计 95、基于单片机的电梯控制模型设计与仿真
学习参考资料:
1、谢维成 杨加国:《单片机原理与应用及C51程序设计》,清华大学出版社,2009年7月第2版
2、彭伟主编:《单片机C语言程序设计实训100例——基于8051+Proteus仿真》,电子工业出版社,2009年6月第1版
3、周兴华主编:《手把手教你学单片机C程序设计》,北京航空航天大学出版社,2007年10月 第1版
学习参考网站:
http://xxgcxy.qdbhu.edu.cn/jsjdlzzsx/index.html http://www.xiexiebang.com
执笔人:陈振军
编写日期:2013年3月5日 审核人:
第三篇:单片机实训题目
电气1001班综合实训任务(单片机控制系统运行与维护)
第1题
模拟交通灯
任务要求:
1、主干道绿灯40秒,支干道绿灯20秒,黄灯都是5秒;
2、要求用定时器实现定时时间;
3、要求显示器同步显示主干道时间的倒计时;
4、如果有按键按下,表示有紧急车辆通过(救火车等),2路都亮红灯,蜂鸣器响,如果另外一个按键按下则恢复正常。
第2题
基于单片机的电子秒表
本设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,两个按键,三位数码管显示,打开电源开关后显示8,每秒循环左移一位,即□□8—>□8□—>8□□—>□□8—>…,按A键开始计时,实时显示所经历的时间,按B键停止计时并显示从开始到当前时刻的时间,要求精确到0.1秒,量程为0~99.9秒。
要求按键输入采用中断方式,按键A接INT0,按键B接INT1。
第3题
采用单片机和DAC设计波形发生器
任务要求:1 利用单片机和DAC0832产生锯齿波、三角波、正弦波等波形 完成DAC与运放的连接,输出可供示波器显示。3 用按键改变波型的种类,波形的幅值与频率。
第4题
基于单片机的精确时钟
本设计以单片机为核心,采用常用电子器件设计,一个电源开关,1个按键负责设置时间和开始走时,1个按键负责循环递增时间,16位数码管显示,可实时显示年,月,日,时,分,秒,百分秒,要求精确到0.01秒。具有整点播放音乐,并根据时针输出相应次数的嘟嘟声,最后一声较尖锐,为准确整点时间。
要求按键输入采用中断方式,按键A接INT0,按键B接INT1.第5题
智能温控器
本设计以单片机为核心,采用常用电子器件设计,一个电源开关,两个控制温度设定按键(增大 / 减小),四位数码管分别显示设定温度和实际温度,量程为0~99度,打开电源开关后设定温度值初始化为26度。按键输入采用中断方式,两个按键分别接INT0和INT1.采用铂电阻(Pt100)温度传感器进行温度测量,模数转换采用ADC0809.单片机根据设定温度S和实测温度P控制继电器R的动作,死区设为2度:
当P<=S-1时,控制R接通电加热回路; 当P>S+1时,控制R断开电加热回路; 当S-1
第6题
电子密码锁
任务要求:
1、密码锁由4X4键盘和4位数码管组成。
2、当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示。若密码不正确,则可以从新输入密码。如连续三次输入错误,则禁止输入。
第7题
抢答器
任务要求:
1、有一主持人和8个参赛队。
2、当主持人按下抢答按键,参赛队在10秒钟内可以抢答。如超过10秒则不能抢答。如抢答成功,则显示抢答的队号。
3、如抢答成功必需在60秒内回答完成。如超过时间则抢答无效,且显示无效指示。如在60秒内回答完成(抢答队再次按下抢答按键表示回答完成)则抢答正确成功,且显示有效。
4、当主持人按下复位按键时,系统回到初始状态。
第8题
篮球比赛计分器
任务要求:
1、能显示2个队的当前比分;
2、根据各自得分情况进行加1、2、3分;
3、显示当前进攻队的进攻时间倒计;
4、计时归零时候鸣响。
第9题
班级投票显示器
任务要求:
1、设计一个投票系统,具有计票显示功能;
2、可实现6人同时进行投票,累计票数在显示器上显示;
3、主持人使用一个按键开关控制开始投票,终止投票和清零;
4、投票开始后每人能且仅能投一次票,多投无效;
第10题
基于单片机的直流电机调速系统
本设计以系列单片机为核心,采用常用电子器件设计,一个启动开关,1个停止开关,1个正向开关,1个反向开关,8位拨码开关负责设置占空比,进行脉冲宽度调制,可实现电动机的正转,反转,刹车,滑行,4种状态,并可根据占空比调节转速。
第11题
基于单片机的锅炉报警系统
本设计以单片机为核心,采用常用电子器件设计,采用蜂鸣器输出声音报警,LED输出红灯报警,并可根据指示灯确定哪个参量越限,6位数码管显示越限参量值,可对锅炉的水位上下限,炉膛温度上下限,蒸汽压力上下限,6个极限值进行报警。
第12题
步进电机控制
任务要求:1 完成单片机与功率驱动电路及小功率步进电机的连接 控制步进电机的转动方向、转动速度及转过指定的角度。3 通过按键改变电机的转向、转速等参数。
第四篇:单片机实训操作规程
单片机实训室安全规章制度
1、学生(学员)进入教室应服从实习指导教师的安排,按指定位置就坐上课。
2、进入教室应换鞋或带好鞋套,并保持室内安静及卫生。
3、操作带电设备时应注意安全,穿好绝缘鞋。
4、不得将与教学无关的东西带入教室。不做与教学无关的事。教室内禁止吃东西,不得将水杯放在操作台及设备上。
5、严禁私自将外来软件带入教室上机运行,一经发现除没收软件外,视情节轻重给予一定的处罚。
6、不得随意开关电源及重启设备,发现异常时应及时与带班老师联系。若因不遵守操作规程而造成设备损坏时,除适当赔偿外,还将视情节轻重给予教育或处分。
7、下课前每位同学(学员)应正常关闭设备,并做好本机位卫生工作。值日生应认真做好教室的卫生工作,离开时应关闭总电源,关好门窗。
8、实验结束后,由辅导教师检查仪器设备有无损坏等情况,认真如实填写使用记录并签字。
9、外来培训人员,需经实验室管理人员批准,并事先安排好时间,学习以
上规章制度后方可进入,并遵守以上管理制度,听从本室工作人指导。
单片机实训室操作规程
1、实训人员要树立“安全第一”的思想,严格遵守安全操作规程。
2、实验人员在实验前,要做好实验预习、并写好预习报告,方可进行实验,接线前先熟悉实验台上各单元、元器件的功能及其接线位置,特别要熟知各单片机引线及接线位置。
3、实验前认真检查电源、线路、设备是否正常,防止事故的发生。
4、实验时,严格按照的实验步骤逐一进行操作,确认一切正常后,由老师检查正确后方可进行通电实验。实验始终,板上要保持整洁,不可随意放置杂物,特别是导电的工具和导线等,以免发生短路等故障。
5、实验时使用到的由外部交流电源供电的仪器(如检测仪器、示波器等),其外壳应有可靠接地。实验中出现异常现象,应立即断电,排除故障后方可继续实验。
6、本实验装置上的直流电源及各信号源原则上仅供实验使用。一般不外接负载或电路。如作它用,要注意使用的负载不能超出本电源或信号源允许的范围。实验完毕后,及时关闭实验桌和仪器设备的电源,将仪器设备和元气件整理好整齐的摆放在实验桌上,并填好学生实验登记表。.
第五篇:单片机实训教案
苏州经贸职业技术学院
实训项目1 报警器控制
一、项目要求
调研实际报警器的使用,设计一个应用开关控制报警器发声报警。
二、项目实践技能目标
1.通过项目的训练,锻炼理论联系实际的能力,熟练掌握单片机控制系统,掌握单片机的定时器的技术等知识。
2.掌握C语言或汇编语言。掌握软件延时或定时器延时程序的设计。
3.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
苏州经贸职业技术学院
实训项目2 简易音乐播放器设计
一、项目要求
1、用一个按键实现选定播放的音乐段,在播放的过程中可用此按键暂停;
2、用另一个按键选择待播放的几段音乐中的一段;
3、选择的曲目可以在数码管上显示。
二、项目实践技能目标
1、通过该项目的训练巩固单片机定时器技术、中断技术的应用;
2、学会C语言中二维数组的使用,学习音乐索引和节拍的设计,学习通过每个高脉冲或低脉冲的延时形成某种频率的声音输出方法,学习控制每个不同频率声音输出的时间长短形成节拍的方法,学习高低音的方法等。
3、根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4、通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
四、思考题
苏州经贸职业技术学院
设计一个音乐门铃。
实训项目3 单片机之间双向通信
一、项目要求
两片单片机工作于串口模式1,整个系统实现双机双向通信;
工作任务:
1.甲机的K1按键可通过串口分别控制乙机的LED1点亮,LED2点亮,LED1和LED2全亮或全灭.2.乙机按键可向甲机发送数字,甲机接收上午数字显示在其P0端口的数码管上。
应用软件完成硬件电路的设计并实现电气意义;完成软件设计;并实现仿真调试或实物调试。
二、项目实践技能目标
1.通过实际项目,来理解和掌握串行通信基本知识,串行口及应用技术等知识。2.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
3.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
4.核心技能教学目标:培养学生的对于通信的概念理解和掌握,在教学中注意引导学生自己提出问题,分析问题,培养他们独立解决问题的能力,培养学生融合课程间知识的相关联系能力,以及外语能力和再学习能力,并培养学生质疑精神。
5.考核标准:单片机串行通信基本知识;串行口及应用技术的基本知识30%;硬件连接及PROTUES使用10%;软件设计20%;系统调试20%;回答问题10%;创新能力(在原有基础上有能力拓展)10%。
三、参考电路
苏州经贸职业技术学院
四、思考题
1.如何实现双工通信?试编写通讯程序。
2.如何利用中断方式实现串行通讯?试编写通讯程序。
实训项目4
8*8LED点阵屏显示数据
一、项目要求
8*8LED点阵屏循环显示数字0~9; 刷新过程由定时器中断完成。
二、项目实践技能目标
1.通过项目的训练,掌握点阵屏的结构以及与单片机的接口技术;掌握点阵屏形成的字符编码。
2.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
苏州经贸职业技术学院
3.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、基础知识点
LED显示屏是将发光二极管按行按列布置的,驱动时也就按行按列驱动。在扫描驱动方式下可以按行扫描按列控制,当然也可以按列扫描按行控制。LED显示屏现多采用多块8X8点阵显示单元拼接而成。8X8点阵LED结构如图其等效电路如图所示,8X8点阵LED结构图
从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上。要实现显示图形或字体,只需考虑其显示方式,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。当采用按行扫描按列控制的驱动方式时,LED显示屏8行的同名列共用一套列驱动器。行驱动器一行的行线连接到电源的一端,列驱动器一列的列线连接到电源的另一端。应用时还应在各条行线或列线上接上限流电阻。扫描中控制电路将行线的1到 8轮流接通高电位,使连接到各该行的全部LED器件接通正电源,但具体那一个LED导通,还要看它的负电源是否接通,这就是列控制的任务了。当对应的某一列置0电平,则相应的二极管就亮;反之则不亮。例如:如果想使屏幕左上角LED点亮,左下角LED熄灭的话,在扫描到第一行时,第 8X8点阵LED等效电路图
一列的电位就应该为低,而扫描到第八行时第一列的电位就应该为高。这样行线上一行一行的轮流导通,列线上进行通断控制,实现了行扫描列控制的驱动方式。
0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00 显示0 0x00,0x08,0x38,0x08,0x08,0x88,0x3E,0x00 显示1 0x00,0x3C,0x42,0x04,0x08,0x32,0x7E,0x00 显示2 0x00,0x3C,0x42,0x1C,0x02,0x42,0x3C,0x00 显示3 0x00,0x0C,0x14,0x24,0x44,0x3C,0x0C,0x00 显示4 0x00,0x7E,0x40,0x7C,0x02,0x42,0x3C,0x00 显示5 0x00,0x3C,0x40,0x7C,0x42,0x42,0x3C,0x00 显示6 0x00,0x7E,0x44,0x08,0x10,0x10,0x10,0x00 显示7 0x00,0x3C,0x42,0x24,0x5C,0x42,0x3C,0x00 显示8 苏州经贸职业技术学院
0x00,0x38,0x46,0x42,0x3E,0x06,0x3C,0x00 显示9
四、参考电路
五、思考题
1.完整显示一个汉字需要几个8*8LED点阵屏?汉字的编码怎样形成?试编写汉字显示程序。
实训项目5 ADC0809 实现输出PWM波形
一、项目要求
调节ADC0809(ADC0808)芯片的0通道输入的可变电阻器,从而实现控制输出脉冲的占空比变化(0%~100%),从而实现脉冲宽度调制(PWM)。
二、项目实践技能目标
1.通过项目的训练,理解数据采集技术;
2.学会A/D转换器的结构和原理,及与单片机的接口技术,掌握软件设计技术。3.巩固单片机基础知识点。
苏州经贸职业技术学院
4.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
三、参考电路
4.思考题
对于代码中两个if语句,如果去掉这几句语句,观察一下示波器的输出波形,读者思考两个if语句有什么作用?如果不用中断子程序提供时钟信号,如何实现该功能?
实训项目6
数字波形信号的合成技术
一、项目要求
利用数字波形信号的合成技术来生成正弦波。
二、程序设计思路和实现过程
数字波形合成技术是一个斜升波的合成过程,它根据已设定的输出波形参数,先由CPU算出输出波形数据并存入ROM中,再将输出波形在采样点的ROM中的数字值依次通过D/A转换器转换为模拟量输出。要采用数字波形合成技术产生工频正弦信号,可预 苏州经贸职业技术学院
先将一个周期的正弦信号分成K个点,经计算求得各点的幅值并数字量化后存于RAM(或程序的数组)中。若需输出波形时,按照一定的频率从RAM中取出每点的量化值送D/A,D/A就可恢复原来一个周期的完整正弦波信号,经过连续的循环即可得到连续的正弦信号输出。
工频信号的输出频率可由式fout=fc/K确定,其中fc为采样(取点)频率,K为一周期所分割的点数。本设计中为了使相位设置方便,把正弦波每周期分成了180个点,所以K=180,那么在K不变的情况下,可以通过改变采样频率fc,就可改变输出频率值。程序设计过程类似于锯齿波的产生设计过程,关键是每点的D/A值的确定。
三、项目实践技能目标
1.通过项目的训练,理解数据采集技术;
2.学会D/A转换器的结构和原理,及与单片机的接口技术,掌握软件设计技术。3.巩固单片机基础知识点。
4.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
三、参考电路
RP110k1U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD*********617S1S2S1123D34D25D16D07VREF8910D0D1D2D3D4D5D6D72019***3121123456789R4RV11k100%+12ABVREFCD18XTAL29RSTU210kS2D4D5D6D7238R51k293031PSENALEEA12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52CSVCCWR1ILE(BY1/BY2)GNDWR2DI3XFERDI2DI4DI1DI5DI0DI6VREFDI7RFBIOUT2GNDIOUT1DAC0832R2-1215kR315k4U3:A1TL0824R17.5k658U3:B7TL082+12 图7-1 数字波形信号的合成技术仿真电路图
苏州经贸职业技术学院
图7-2 输出的三角波和正弦波信号
四、思考题
(1)对于代码中提供的正弦信号sine_tab[256] 数组是如何确定的?如果要频率提高一倍,如何重新确定数组?
(2)修改程序,使之能输出三角波。
(3)程序对应的仿真电路图如图7-1所示;相应的运行结果如图7-2所示。
实训项目7 利用LCD1602设计的可调式电子钟
一、项目要求
利用单片机的定时器控制时钟运行,运行过程中的误差,通过K1~K4键进行调节; K1键用来选择调节时/分,K2键与K3键用于增减当前的小时或分钟,调整完成后按下K4键确定,电子钟继续运行;
利用LCD1602显示电子日历与时钟。
二、项目实践技能目标
1.通过项目的训练,理解LCD1602芯片的结构和原理,及与单片机的接口技术,掌握 苏州经贸职业技术学院
LCD忙检测、初始化、设置位置、写命令、写数据函数等的软件设计。2.掌握利用单片机的定时器实现时钟功能。
3.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
五、思考题
1.利用时钟芯片DS1302实现可调式电子表,完成软硬件的设计。
实训项目8
16*16点阵屏设计
一、项目要求
利用单片机控制实现16*16点阵屏的汉字滚动显示
二、项目实践技能目标
1、巩固8*8点阵屏的知识点,学习实现一个汉字需要4片8*8点阵屏的硬件知识点,以及实现汉字点阵的数组知识。
2、掌握单片机扩展原理,加强芯片的认知能力、以及使用能力。
苏州经贸职业技术学院
3、掌握软件设计的技巧和方法。
4、根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
5、通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
苏州经贸职业技术学院
四、思考题
实现多个汉字滚动显示,怎样完成?
实训项目9
计算器的设计
一、项目要求
利用单片机控制系统实现单行液晶显示的计算器。
二、项目实践技能目标
1、巩固单片机的硬件系统知识,熟练掌握单片机的指令系统以及软件设计方法。
2、练习并行扩展存储单元的原理
3、根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4、通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
苏州经贸职业技术学院
三、参考电路
四、思考题
1、重新修改代码,使计算器实现保留两位小数精度的数值计算
2、设计一部电子秤