单片机实习程序.docx
- 文档编号:17298773
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:14
- 大小:18.42KB
单片机实习程序.docx
《单片机实习程序.docx》由会员分享,可在线阅读,更多相关《单片机实习程序.docx(14页珍藏版)》请在冰点文库上搜索。
单片机实习程序
第一章 设计任务
1.1设计目的
课程设计的主要目的是通过对电子时钟的设计实践,了解单片机系统控制过
程、设计要求、应完成的工作内容和具体设计方法。
通过设计也有助于复习、巩固以往所学的知识,达到灵活应用的目的。
课程设计应强调能力培养为主,在独立完成设计任务的同时,还要注意其他方面的能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;差于图书资料、产品手册和各种工具书的能力;工程绘图的能力;书写技术报告和编制技术资料的能力。
1.2设计要求
在课程设计中,学生是主体,应充分发挥他们的主动性和创造性。
教师的主导作用是引导其掌握完成设计内容的方法。
为保证顺利完成设计任务还应做到以下几点:
1、在接受设计任务后,应根据设计要求和应完成的设计内容进度计划,确定各阶段应完成的工作量,妥善安排时间。
2、在方案确定过程中应主动提出问题,以取得指导老师的帮助,同时要广泛讨论,依据充分。
在具体设计过程中要多思考,尤其是主要参数,要经过计算论证。
3、说明书要求文字通顺、简练,字迹端正、整洁。
4、应在规定的时间内完成所有的设计任务。
5、如果条件允许,应对自己的设计线路进行实验讨论,考虑进一步改进的可能性。
3
第五章 参考文献
第一章 设计任务
1.1设计目的
课程设计的主要目的是通过对电子时钟的设计实践,了解单片机系统控制过
程、设计要求、应完成的工作内容和具体设计方法。
通过设计也有助于复习、巩固以往所学的知识,达到灵活应用的目的。
课程设计应强调能力培养为主,在独立完成设计任务的同时,还要注意其他方面的能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;差于图书资料、产品手册和各种工具书的能力;工程绘图的能力;书写技术报告和编制技术资料的能力。
1.2设计要求
在课程设计中,学生是主体,应充分发挥他们的主动性和创造性。
教师的主导作用是引导其掌握完成设计内容的方法。
为保证顺利完成设计任务还应做到以下几点:
1、在接受设计任务后,应根据设计要求和应完成的设计内容进度计划,确定各阶段应完成的工作量,妥善安排时间。
2、在方案确定过程中应主动提出问题,以取得指导老师的帮助,同时要广泛讨论,依据充分。
在具体设计过程中要多思考,尤其是主要参数,要经过计算论证。
3、说明书要求文字通顺、简练,字迹端正、整洁。
4、应在规定的时间内完成所有的设计任务。
5、如果条件允许,应对自己的设计线路进行实验讨论,考虑进一步改进的可能性。
第二章 总体设计
2.1 硬件部分
1、系统设计总框图
图2-1 设计总框图
此次课程设计的的电子钟由单片机AT89C51、时钟电路、动态数码管显示电路组成。
运用C语言来控制单片机AT89C51来实现动态数码管显示,并在此基础上综合运用,时间电子钟的设计(包括时钟、秒表、显示)。
2、电路组成及工作原理
C语言
单片机 AT89C51
LCD1602
动态显示
4
本文数字时钟设计原理主要利用AT89C51单片机, P2口控制LCD1602显
示,P1口与按键相接用于时间的校正。
整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
显示电路将“时”、“分”、“秒”计数器的输出,通过LCD1602显示器显示出来。
校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。
3、单片机AT89C51
(1) AT89C51简介
单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。
这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
(2)AT89C51的主要性能参数
与MCS-51产品指令系统完全兼容,4k 字节可重擦写FLASH闪速存储器。
1000次擦写周期。
全静态操作:
0Hz—24MHz。
三级加密程序存储器,128×8字节内部RAM32个可编程I/O口线,2个16位定时/计数器6个中断源,可编程串行URAR通道,低功耗空闲和掉电模式。
AT89C51提供以下标准功能:
4k 字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。
空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。
下图为单片机AT89C51各管脚图:
#include
#defineucharunsignedchar
#defineuintunsignedint
uintnum,k1num,count;
ucharhour,min,sec;
sbitlcde=P2^7;
sbitlcdrs=P2^6;
sbitlcdrw=P2^5;
sbitk1=P1^0;
sbitk2=P1^1;
sbitk3=P1^2;
ucharcodetable[]={"2011-03-29TUE"};
ucharcodetable1[]={"00:
00:
00"};
voiddelay(unsignedinti)/*延迟函数*/
{
ucharj;
for(i;i>0;i--)
for(j=110;j>0;j--);
}
voidwrite_com(ucharcom)/*LCD写指令*/
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
voidwrite_data(uchard)/*LCD写数据*/
{
lcdrs=1;
lcdrw=0;
P0=d;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
voidwrite_hms(ucharda,ucharadd)
{
ucharshi,ge;
shi=da/10;
ge=da%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
voidkeyscan()/*键盘扫描*/
{
if(k1==0)//功能键
{
delay(5);
if(k1==0)
{
k1num++;
while(!
k1);
if(k1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
voidkeyscan()/*键盘扫描*/
{
if(k1==0)//功能键
{
delay(5);
if(k1==0)
{
k1num++;
while(!
k1);
if(k1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
if(k1num==2)
{
write_com(0x80+0x40+7);
write_com(0x0f);
}
if(k1num==3)
{
write_com(0x80+0x40+4);
write_com(0x0f);
}
if(k1num==4)
{
k1num=0;
write_com(0x0c);
TR0=1;
}
}
if(k1num!
=0)//增加键
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!
k2);
if(k1num==1)
{
sec++;
if(sec==60)
sec=0;
write_hms(sec,10);
write_com(0x80+0x40+10);
}
if(k1num==2)
{
min++;
if(min==60)
min=0;
write_hms(min,7);
write_com(0x80+0x40+7);
}
if(k1num==3)
{
hour++;
if(hour==24)
hour=0;
write_hms(hour,4);
write_com(0x80+0x40+4);
}
}
}
if(k3==0)//减少键
{
delay(5);
if(k3==0)
{
while(!
k3);
if(k1num==1)
{
sec--;
if(sec==-1)
sec=59;
write_hms(sec,10);
write_com(0x80+0x40+10);
}
if(k1num==2)
{
min--;
if(min==-1)
min=59;
write_hms(min,7);
write_com(0x80+0x40+7);
}
if(k1num==3)
{
hour--;
if(hour==-1)
hour=23;
write_hms(hour,4);
write_com(0x80+0x40+4);
}
}
}
}
}
voidinit()/*初始化*/
{
delay(20);
write_com(0x38);
delay
(1);
write_com(0x0c);
delay
(1);
write_com(0x06);
delay
(1);
write_com(0x01);
delay
(1);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidmain()/*主函数*/
{
init();
write_com(0x80);
for(num=0;num<15;num++)
{
write_data(table[num]);
delay(10);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_data(table1[num]);
delay(10);
}
while
(1)
{
keyscan();
}
}
voidTimer0_irq(void)interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
write_hms(hour,4);
}
write_hms(min,7);
}
write_hms(sec,10);
}
write_hms(sec,10);
}
}
课程设计总结
经过两周的时间以及对整本教材的知识总结,把课程设计分成了硬件和软件两大模块。
总的来说,硬件部分很好入手,电路也教简单,主要涉及的是简单的按键、电容、电阻、晶振和数码管。
在软件部分,细分为了按键模块、显示模块、定时/计数模块,最后把几个模块整合在主程序模块中,使得程序简单明了。
整个设计过程中遇到的最大问题是软件的
编写,由于采用的是汇编语言,其间使用到的各种寄存器、存储器地址、变量很多,很难对程序的整体把握。
通过电子钟的设计,对单片机的原理、结构、外围电路进一步的了解。
在整个设计过程中学到了团体精神和独立解决问题的重要性。
为以后的求职之路打下了基础
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实习 程序