单片机课程设计毕业设计Word文档下载推荐.docx
《单片机课程设计毕业设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课程设计毕业设计Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
10。
20”表示“2005年10月20日”/“105249”表示“10时52分49秒XX毫秒”
2)要有四位输入按键,功能分别是“移位”,“数字+”,“存储”
即“SHIFT”,“NUM+”,“SAVE”
3)显示过程:
实验板通电开机后,8位LED显示器显示“时:
秒”
按下“SHIFT”后第一位数字闪动,继续按下“SHIFT”后面数字闪动移位。
再按“NUM+”数字增加,按“NUM-”数字减少,按“SAVE”储存修改结果。
二:
硬件结构:
80C52/51,8位LED显示器,CD4511-BCD译码器。
参考电路见(附录一)
三:
软件思路:
可以分四个部分:
参考子程序段见(附录六)
1》动态扫描显示LED电路程序
设立8个内部RAM显示缓冲区,将要显示的数据的BCD码送显示缓冲区,程序只需要将显示缓冲区的BCD码,送相应的端口即可。
动态扫描显示
例如:
将40H-48H为“时:
秒”显示区
将49H-4FH为“年:
月:
日”显示区
2》动态扫描键盘程序:
循环扫描有无按键,有:
判断是何按键,转入相应子程序处理。
无:
返回主程序执行。
3》定时器设置与时间处理的程序:
此段为该程序段的关键所在,它决定时间的准确性,和进位的正确性。
定时器计数可用中断方式,也可以用软件查询方式进行。
定时器中断定时方式的精确度高。
采用软件延时方式要注意每条指令的机器周期的精确计算,否则会造成时间的不准。
4》各项功能键的子程序模块:
移位子程序:
按下“SHIFT”后左边第一位数字闪动,继续按下“SHIFT”后面数字闪动移位。
程序中可设置第二显示缓冲区,将移到要闪动的数字位设为不显示(黑)“0FFH/00H”,程序只需要将两组显示缓冲区的BCD码,分时间间隔发送出去,就会产生数字闪动效果。
数字+/-:
将要显示的数据缓冲区的内容取出加一/减一,注意每个位都有自己的位限制,如“时”的位最大数23,“分、秒”最大数59,“月”最大数12,“日”最大数31。
两位数一起调整比较方便。
还要注意的是计数后二/十进制之间的转换问题。
“存储”:
即将修改好的数值存储到显示缓冲区,并返回,进入主程序运行。
#include<
u.h>
#definetemp20000
uintflag,flag_1=0;
uintflag_2,flag_3=1;
sbitK0=P0^0;
sbitK1=P0^1;
sbitK2=P0^2;
sbitK3=P0^3;
ucharms=0,sec=55,min=59,hour=23,day=27,day1,month=2;
intyear=11,year1=20;
externuinta1;
externuintb1;
externuintc1;
externuintd1;
externuinte1;
externuintf1;
externuintg1;
externuinth1;
externuinta,b,c,d,e,f,g,h;
//函数声明
externvoiddelay(unsignedintj);
externvoidxianshi();
externvoidxianshi_calendar();
voidmain()
{EA=1;
ET0=1;
TMOD=0x01;
//T0方式1计时
TH0=0xB8;
TL0=0x00;
TR0=1;
while
(1)
{if(K0==0)//时钟闪烁及调时程序,按键循环加
{delay(temp);
while(K0==0);
flag++;
do{if(K0==0)
if(K0==0);
}
if(flag==1)
{h1=255;
g1=255;
xianshi();
h1=112;
g1=96;
if(K1==0)
{delay(temp);
if(K1==0);
hour+=1;
if(hour==24)hour=0;
}
}
if(flag==2)
{
f1=255;
e1=255;
f1=80;
e1=64;
min+=1;
if(min==60)min=0;
}
if(flag==3)
{d1=255;
c1=255;
d1=48;
c1=32;
sec+=1;
if(sec==60)sec=0;
}
}
}while(flag<
4);
flag=0;
}xianshi();
//******************//跳转到日历程序
if(K2==0)
while(K2==0);
xianshi_calendar();
do{if(K2==0)
if(K2==0)flag_2--;
}//flag_2是否跳出日历标志位
if(K0==0)
flag_1++;
if(flag_1==1)//flag_1闪烁标志位
xianshi_calendar();
year1+=1;
if(year1==100)year1=1;
if(flag_1==2)//flag_1闪烁标志位
{f1=255;
e1=64;
year+=1;
if(year==100)year=1;
if(flag_1==3)//flag_1闪烁标志位
month+=1;
if(month==13)month=0;
if(flag_1==4)//flag_1闪烁标志位
{b1=255;
a1=255;
b1=16;
a1=0;
day+=1;
if(day==day1)day=1;
}xianshi_calendar();
if(flag_1==5)flag_1=0;
}while(flag_2==1);
flag_2=1;
}xianshi();
xianshi();
//if((CLOCK[6]+CLOCK[7]*100)%4==0&
&
CLOCK[5]==2)CLOCK1[4]=29;
//闰年2月为29天
//if((CLOCK[6]+CLOCK[7]*100)%4!
=0&
CLOCK[5]==2)CLOCK1[4]=28;
//非闰年2月为28天
//if(CLOCK[5]==4|CLOCK[5]==6|CLOCK[5]==9|CLOCK[5]==11)CLOCK1[4]=30;
//if(CLOCK[5]==1|CLOCK[5]==3|CLOCK[5]==5|CLOCK[5]==7|CLOCK[5]==8|CLOCK[5]==10|CLOCK[5]==12)CLOCK1[4]=31;
voidtimer0(void)interrupt1
{
TH0=0xb8;
TL0=0x00;
//重装初值
ms=ms+1;
if(ms==100)
{
ms=0;
sec+=1;
if(sec==60)
{
sec=0;
if(min==60)
{
min=0;
hour+=1;
if(hour==24)
{hour=0;
day+=1;
;
if(day==day1)
{day=1;
month+=1;
if(month==13)
{month=1;
year+=1;
if(year==100)
{year=0;
year1+=1;
}
}
if((year+year1*100)%4==0&
month==2)day1=29;
if((year+year1*100)%4!
month==2)day1=28;
if(month==4|month==6|month==9|month==11)day1=30;
if(month==1|month==3|month==5|month==7|month==8|month==10|month==12)day1=31;
END二:
Keil\UV4仿真软件的使用方法:
在桌面点击“KeiluVision4”出现如下画面:
1、“新建”/“打开”一个工程
2、新建一个文件“编译/汇编!
”c文件,生成包括HEX16进制文件在内的系列文档。
如果编译没有通过,则根据提示修改程序的语法错误,直到编译成功。
3、插入仿真头到应用板上,通电后用“单步”或“连续”运行,观察CPU内部RAM,各个特殊功能寄存器内容的变化,以及应用板上设计的显示等变化。
如果达不到设计效果和要求,则需要重新考虑修改程序上的逻辑错误,直到完善为止。
图3-2keil执行窗口
第三部分实验中遇到的问题及解决的办法
1、数码管某段不亮
1现象:
6个数码管的b段都不亮。
检查:
b段不亮肯定8155的b段至74L5245的b段有毛病。
查8155的输出点亮逻辑笔的红、绿发光二极管,即为脉冲。
查74L5245输入同样也是脉冲,输入正确。
查74LS245的b段输出,逻辑笔绿色发光二极管点亮,即为低电平。
分析:
74LS245的b段通道损坏。
排除:
剪掉74LS245,发现集成电路块下印刷线路在14脚和15脚位置处连通,难怪b段不亮,因为dp段(即15脚)为低电平,14脚和15脚连通,相当于对地短路。
切断短路处,重换一片74L5245后,恢复五常。
从上面的例子可以看出,不要轻易断定集成电路损坏,仔细检查,缩小损失。
2、数码管某位显示错
现象:
复位后显示"
bjp-99
怀疑控制位显示的74LS06有毛病。
切断74LS06至低三位的位控线,分别将第五、第六位的输出接到第四位数码管地,仍然显示"
9"
,当时认为74LS06坏,剪掉换上新的集成电路,发现故障依旧,74LS06能使低两位单独显示"
,故障肯定在8155的输出至74LS06的输入端。
查8155的21脚和22脚,发现两脚间短路,采用分段判断的方法,短路点在键盘盖插座的两根叉针之间。
数码管低两位显示"
99"
,而且又能单独显示,故障在74LS06输入之前,仔细观察"
,实际是"
5"
和"
1"
合在一起的结果,直接应该断定为8155的21脚和22脚短路。
取下键盘盖插座,换上一个新的,故障排除。
参考电路
TOP系列编程器使用的简要说明
TOP2005型编程器具有体积小巧,功耗低,可靠性高的特点,是专为开发单片机和烧写各类存储器而设计的通用机型。
TOP2005采用USB通用串口与PC机连接通信,传输速率高,抗干扰性能好,可靠性能极高,而且无需外接电源,特别适合电池供电的笔记本电脑外出使用。
其特点:
1.可支持2·
5~6·
5V的器件;
2.使用USB接口电源,不必外接电源;
3.通过USB通用串口与PC机连接,传送速率12mh/s;
4.即适合电池供电的笔记本电脑使用,也适合台式机使用;
5.完善的过电流保护,有效地保护编程器和器件不受损害;
6.USB负载能力检测(0至10级);
7.全插脚检查,可以检查出任意一个插脚的的接触状态;
8.40针进口万能锁紧插座;
9.在WINOWS98SE/ME/200O/XP下运行;
10.塑料机壳,体积小,重量轻,功耗低;
11.可自动探测厂家和型号;
12.单片机定时,编程速度与计算机无关;
芯片操作
1·
1常规步骤
连接好TOPwin,电源指示灯(红色)亮;
运行"
TOPWin,exe"
工作指示灯(绿色)亮;
在主菜单中选择"
文件"
,装载数据到文件缓冲区;
如下图所示:
找到文件夹,选择HEX类型(ASM文件编译后生成的16进制文件)文件。
将芯片插在插座上并锁紧,准各对器件进行读写操作。
"
操作"
莱单:
选择型号,对应的工具按钮为"
型号"
,执行后弹出"
选择厂家/型号"
窗口:
芯片型号的选择过程按照:
类型一)生产厂家一)型号的顺序确定芯片型号。
●在首行"
查找"
右边键入关键字,如"
51"
,这一步可以省略。
●在"
类别"
框中选择芯片类型,如电擦除存储器;
●在"
制造厂家"
列表框中选择生产厂家,例如选择"
ATMEL"
器件型号"
列表框中选择芯片型号。
例如选择"
AT89C52"
。
如果选择的是存储器,可以按"
探测厂家代码"
取得2字节代码,第一字节代表生产厂家,第二字节代表型号。
然后,按"
确认"
进入读写操作。
2.读写器件:
对应的工具按钮为"
读写"
,由于芯片的类型
不同,相应的读写窗口也略有不同。
分别叙述如下:
1·
读写并口存储器
以89c52为例,在"
窗口中选择
类型电擦除存储器
选择厂家ATMEL
器见型号AT89C52
按"
键,弹出单片机读写窗口如下:
●写器件:
写器件操作是把缓冲区内的数据烧写到芯片申。
文件开始地址和器件开始地址默认为0,隐含烧写该器件的全部单元,数据长度最大可达六位十六进制(HEX)数字,最大地
址空间8M。
用户也可以根拥需要对开始地址进行修改,达到部分烧写的目的。
写器件过程由进展条直观显示,烧写过程中,程序自动进行校验,如碰到不能写入的单元时,将退出写操作,并显示出错地址、缓冲区数据和芯片数据内容。
特别注意:
器件在写之前必须特别要注意芯片型号不能搞错,由于芯片类型不同,使用的编程电压可能不一样,否则会损坏器件或设备。
确认所有设置正确无误后,将待编程的器件插到器件插座上,拉平锁紧扳手。
●读器件:
将芯片中的全部数据读入缓冲区,分页显示到数据窗口,读出过程由进展条直观显示。
用户可对读出的数据进行修改,存盘(文件格式必须与芯片内的固化文件格式一致)。
●擦除:
擦除芯片存储器的全部内容,擦除后全为"
FF"
只有电擦除器件可以用这个命令,EPROM需用紫外线擦除。
●检查空片:
器件在写入之前,要检查是否空片。
空片的每"
-个字节都是"
(十六进制)。
检查过程由进展条直观显示,当发现非空单元,将退出检空操作,并显示非空单元的地址和数据。
该操作检查EPROM的所有地址空间,与设置的器件开始地址和数据长度无关。
EPROM可用紫外灯照射后冉枪查,仍通不过则器件己损坏。
●校对数据:
该操作把缓冲区内的数拥与芯片中的数据进行比较,校对由进展条直观显示,当遇到校对出错的单元时,将退出校对操作,并显示出错单元的地址、缓冲区数据私芯片数据。
为了确保写入到器件的数据正确,"
写器件"
操作包含了校对,无须重复操作。
●加保护:
很多EEPROM和FLASHROM具有保护功能。
加保护后的器件只能读,不能写,必须经过解保护才能冉写。
该操作--般应用在写操作完成后使用。
●解保护:
与加保护相反。
●读厂家:
取得z字节代码,第一字节代表生产厂家,第二字节代表型号。
●写速度:
不同厂家的产品编程速度可能不一样,既使同一厂家的产品,其型号不同编程速度也可能不一样。
一般可设为标准速度。
●"
自动"
编程操作
该操作根据"
组合操作"
框内的选择自动完成对器件的编程操作,可提高芯片的编程效率。
第四部分课程设计总结
在课程设计的过程中,从把印制电路板焊接组装到最后的程序烧入再到结果过程的实现,通过运用keil复习了C语言的相关知识和单片机结构与外部接口电路的了解,对单片机的存储方式以及数据的传输和对数据的处理有了更进一步的了解,虽然还有的地方需要改进,但在一步一步完善的过程中学到了更多的相关知识,对自己的动手能力和编程思路有了一定的提高。