单片机C语言报告.docx
- 文档编号:5468884
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:21
- 大小:237.27KB
单片机C语言报告.docx
《单片机C语言报告.docx》由会员分享,可在线阅读,更多相关《单片机C语言报告.docx(21页珍藏版)》请在冰豆网上搜索。
单片机C语言报告
学号
17
分数
《单片机C语言》
综合实训报告
题目:
单片机C语言综合实训
班级:
10电子
姓名:
沈重月
指导教师:
东营职业学院
完成日期:
2011年1月1日
目录
目录2
概述3
原理图和程序4
流水灯二极管4
数码管显示8
单片机最小系统图17
总结与体会19
附录21
总电路原理图21
总程序21
参考文献27
概述
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
1.在智能仪表仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
例如精密的测量设备(功率计,示波器,各种分析仪)。
2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。
例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子称量设备,五花八门,无所不在。
4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
5.单片机在汽车设备领域中的应用
单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
原理图和程序
流水灯二极管
一、硬件
作为初学者最先接触的I/O控制原件,LED灯自然少不了。
在本实验板中设有八个,与锁存器相连,锁存器与单片机P1口相连。
每个二极管和1个1k的限流电阻相连,因为每个二极管的额定电压是1.7V。
额定电流为10mA而且单片机的电压时5V所以限流电阻必须大于330欧姆。
二、软件
1.二极管流水灯程序
#include
#include
unsignedchara,t,i;
voidinit();
voidmain()
{
init();
while
(1)
{
if(t==10)
{
t=0;
//a=0xfe;
a=_crol_(a,1);
P1=a;
}
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
voidinit()
{
t=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
a=0xfe;
}
2.二极管闪烁程序
#include
#include
unsignedchara,t;
voidinit();
voidmain()
{
init();
while
(1)
{
if(t%4==0)
P1=~P1;
if(t==60)
{
TR0=0;
P1=0xff;
}
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
voidinit()
{
t=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
数码管显示
一、硬件
由于P0口做数据输出时。
T1截止,输出级处于开漏状态,要使信号正常输出,必须加4.7K~10K的上拉电阻。
实验板安了两个三位数码管,用两个74HC573锁存器分别控制位选和段选。
连接在单片机P0口。
多位数码管的“位选”是可以独立控制的,而“段选”是连接在一起的,可以用作数码管的动态显示和静态显示。
图中所示的数码管全部为共阴极的数码管。
74HC573为所存器,利用单片机可以控制所存器的所存端,进而控制锁存器的数据输出,利用分时控制的方法可以方便地控制任意数码管显示任意数字。
1)静态显示方式
LED显示器工作方式有两种:
静态显示方式和动态显示方式。
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。
当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
这种方法的优点是占用CPU时间少,显示便于监测和控制。
缺点是硬件电路比较复杂,成本较高。
(2)动态显示方式
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
二、软件
1.数码管上显示出从123456开始以1秒的速度往上递增直至123476的程序
#include
#include
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
uchartemp,t0,t1,bai,shi,ge,flag,flag1;
uintshu;
voidinit();
voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge);
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
init();
while
(1)
{
display(1,2,3,4,shi,ge);
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t1++;
if(t1==20)
{
t1=0;
shu++;
shi=shu/10;
ge=shu%10;
if(shu==76)
{
TR0=0;
}
}
}
voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge)
{
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay
(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay
(1);
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay
(1);
dula=1;
P0=table[cc];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay
(1);
dula=1;
P0=table[bb];
dula=0;
P0=0xff;
wela=1;
P0=0xbf;
wela=0;
delay
(1);
dula=1;
P0=table[aa];
dula=0;
P0=0xff;
wela=1;
P0=0x7f;
wela=0;
delay
(1);
}
voidinit()
{
shu=56;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
Shi=5;
ge=6;
}
2.数码管上显示出“HELLO”
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
voiddisplay(uchar,uchar,uchar,uchar,uchar,uchar);
voiddelay(uint);
voidmain()
{
while
(1)
{
display(16,17,18,18,19,20);
}
}
voiddisplay(ucharone,uchartwo,ucharthree,ucharfour,ucharfive,ucharsix)
{
dula=1;
P0=table[six];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay
(1);
dula=1;
P0=table[five];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay
(1);
dula=1;
P0=table[four];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay
(1);
dula=1;
P0=table[three];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay
(1);
dula=1;
P0=table[two];
dula=0;
P0=0xff;
wela=1;
P0=0xbf;
wela=0;
delay
(1);
dula=1;
P0=table[one];
dula=0;
P0=0xff;
wela=1;
P0=0x7f;
wela=0;
delay
(1);
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
单片机最小系统图
单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。
1.电源供电模块
对于一个完整的电子设计来讲,首要问题就是为整个系统提供电源供电模块,电源模块的稳定可靠是系统平稳运行的前提和基础。
51单片机虽然使用时间最早、应用范围最广,但是在实际使用过程中,一个和典型的问题就是相比其他系列的单片机,51单片机更容易受到干扰而出现程序跑飞的现象,克服这种现象出现的一个重要手段就是为单片机系统配置一个稳定可靠的电源供电模块。
此最小系统中的电源供电模块的电源可以通过计算机的USB口供给,也可使用外部稳定的5V电源供电模块供给。
电源电路中接入了电源指示LED,图中RS0为LED的限流电阻。
S1为电源开关。
2.复位电路
单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。
单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。
当复位电平持续两个机器周期以上时复位有效。
复位电平的持续时间必须大于单片机的两个机器周期。
具体数值可以由RC电路计算出时间常数。
3.振荡电路
单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的精度更高。
有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。
晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
单片机晶振的作用是为系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。
如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。
STC89C51使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。
总结与体会
两周的单片机和C语言实训终于顺利完成了,其中包含着快乐,也有辛酸。
我们实训题目是利用动态扫描和定时器1在数码管上显示出从123456开始以1秒的速度往上递增直至123476并保持显示此数,与此同时利用定时器0以500mS速度进行流水灯从左至右移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。
到此保持住和在期刊上查找一篇关于《单片机》的文章,将其内容做成PPT并同时提交该文章的PDF格式文档。
刚开始大家都觉得这个题目比较困难。
并且它真正困难的地方是程序设计,而我们最弱的就是编程,不过在我们和老师同心努力下最终完成了。
刚开始我们完全不知道怎么开始,后来跟我们细讲题目并让我们把程序分成4个程序写然后再综合起来。
经过这样我们发现比以前写一个简单多了。
通过一周的努力我们终于完成了实训要求并在电路板上展现出来。
焊接电路板完工,细心检查后,进行通电测试。
结果发现在下载程序时总是不能上电,通过检查,原来是和开关串联的电阻太大从而导致单片机的电压太低,,经过改进后能胜利下载程序。
但还有个问题是,当报警电路不会报警,在请教老师后,发现走动蜂鸣器的电压太低了,是因为串接了一个太大的电阻。
然后,我们换了一个小电阻,但这时蜂鸣器却一直在叫,停不下来,不过,在我们的的细心检查下,原来是在放大电路的一端虚焊了,这说明我们焊接电路的技术还不够好。
在重新焊接那端后,我们的电路板终于成功实现功能,当时我们的心情都是无比兴奋和快乐的,因为我们辛苦没有白费。
在完成单片机课程设计后,我们发现我们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。
但通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。
同时也通过查论文资料这一项目的要求不但扩充了知识和查资料方法而且也提高了我们的课外阅读兴趣,并让我们认识到把理论应用到实践中去是多么重要。
附录
总电路原理图
总程序
#include
#include
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
uchartemp,t0,t1,bai,shi,ge,flag,flag1;
uintshu;
voidinit();
voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge);
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
init();
while
(1)
{
if(flag1!
=1)
display(1,2,3,4,shi,ge);
else
display(16,17,18,18,19,20);
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(flag!
=1)
{
if(t0==10)
{
t0=1;
temp=_crol_(temp,1);
P1=temp;
}
}
else
{
if(t0%4==0)
P1=~P1;
if(t0==60)
{
TR0=0;
P1=0xff;
flag1=1;
}
}
}
voidtimer1()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t1++;
if(t1==20)
{
t1=0;
shu++;
shi=shu/10;
ge=shu%10;
if(shu==76)
{
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
flag=1;
t0=0;
P1=0xff;
TR1=0;
}
}
}
voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge)
{
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay
(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay
(1);
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay
(1);
dula=1;
P0=table[cc];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay
(1);
dula=1;
P0=table[bb];
dula=0;
P0=0xff;
wela=1;
P0=0xbf;
wela=0;
delay
(1);
dula=1;
P0=table[aa];
dula=0;
P0=0xff;
wela=1;
P0=0x7f;
wela=0;
delay
(1);
}
voidinit()
{
shu=56;
temp=0xfe;
P1=temp;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
参考文献
【1】胡进德《51单片机应用基础》湖北科学技术出版社.
【2】彭军《实用电子技术》科学出版社
【3】陈希有《电路理论基础》高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言 报告