单片机实训总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“大学单片机实训总结”。
一、任务与目的 本课程的实训是使我们综合应用所学习的理论知识,使用STAR-MT51实验板完成单片机控制下的实时温度测量及显示的软件编程。
本课程实训涉及的知识包括:单片机的最小系统、单片机人机接口电路(独立式键盘、LED显示)、8位数码管的驱动电路、18B20温度芯片的应用等。
二、原理(条件)
1. LED发光二极管
一般的发光二极管的导通压降为1.7V~1.9V,工作电流为5mA~10mA 2.LED数码管显示接口
LED数码管是利用多个LED组合而成的显示设备,可以显示0-9等10个数字和某些字母,在许多的数字系统中作为显示输出设备,使用非常广泛。数码管内部字段LED和引脚分布图。它的结构是由发光二极管构成的a、b、c、d、e、f和g七段
LED内部的所有发光二极管有共阴极接法和共阳极接法两种:一种是将LED内部所有二极管阳极接在一起并通过com引脚引出,将每一个发光二极管的另一端分别引出到对应的引脚,称之为共阳极LED显示器
另一种是将LED内部所有发光二极管的阴极都连在一起的,称之为共阴极LED显示器
LED用于显示数字、字母或符号时,必须将要显示的内容转换为LED对应七段码的信息,共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。当发光二极管导通时,相应的笔划段发亮,即通过点亮不同的LED字段,可显示数字0,1,┅,9和A,b,C,d,E,F等不同的字符及自定义的一些简单符号。8个笔划段dp g f e d c b a对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二进制码就可以表示要显示字符的字形代码。
3. 独立式键盘接口
(1)监测有无键按下;键的闭合与否,反映在电压上就是呈现出高电平或低电平,所以通过电平的高低状态的检测,便可确认按键按下与否。
(2)判断是哪个键按下。(3)完成键处理任务。
需注意事项:
① 电路或软件的角度应解决的问题-----------消除抖动影响
键盘按键所用开关为机械弹性开关,利用了机械触点的闭合、断开作用。为了确保CPU对一次按键动作只确认一次,必须消除抖动的影响。按键的消抖,通常有软件、硬件两种消除方法。
软件消抖:在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认有键按下,进行相应处理工作。
②键盘电路结构
独立式按键就是各按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键工作状态不会影响其他I/O口线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键被按下了。优点:电路配置灵活,软件结构简单。
缺点:每个按键需占用一根I/O口线,在按键数量较多时,I/O口浪费大,电路结构显得复杂。因此,此键盘是用于按键较少或操作速度较高的场合。
4.定时器中断
定时/计数器是单片机的重要部件,其工作方式灵活,编程简单,使用方便。89C51单片机内有2个16位可编程的定时器/计数器,分别为T0和T1。定时器/计数器T0、T1核心组成部分为16位的加1计数器,它们的工作状态和工作方式分别由两个特殊功能寄存器TCON和TMOD来决定。
定时器/计数器T0、T1可以有四种不同的工作方式:方式0、方式
1、方式
2、方式3。
方式1 当TMOD中M1M0 = 01时,定时器/计数器选定方式1进行工作。下图是T0工作在方式1下的逻辑结构图(T1与其完全一致)。两个8位寄存器TH0和TL0构成了一个16位的定时器/计数器。
在该工作方式下,当作为定时器使用时,按定时时间计算计数初值。方式2 工作方式2,其逻辑结构如下图所示。该方式下,16位计数器被分为两个8位寄存器:TL0和TH0,其中TL0作为计数器,TH0作为计数器TL0的初值预置寄存器,并始终保持为初值常数。TH0的内容重新装入TL0后,其自身保持不变。这样计数器具有重复加载、循环工作的特点,可用于产生固定脉宽的脉冲信号。
这样省掉了工作方式0、方式1一定要通过软件给计数器重新赋初值的麻烦,并提高了计数精度。该工作方式下,当作为定时器使用时,按定时时间计算计数初值
三、内容与步骤
本实训采用STAR-MT51实验板,编写程序完成指导教师指定的项目内容。
1、LED指示灯闪烁。
2、8位数码管的指定显示内容。
3、数字时钟显示。
(一)熟悉STAR-MT51结构,复习单片机接口电路内容 编写第一个程序,控制LED指示灯闪烁
1、建立项目文件,掌握头文件的使用
2、熟悉单片机C文件编写规范,变量定义,程序注释写法等
3、熟练掌握KEIL C51调试环境,熟悉编译,设置,在线观察参数
4、编写LED指示灯亮灭的程序控制
5、添加延时子函数,掌握无传递参数的子函数编写
6、实现LED指示灯闪烁
程序:
#include unsigned char k;void delayms(unsigned char ms);main(){ while(1){
P0 = 0x01;
P0 = 0x01;
for(k=0;k
{
P0 =
delayms(1000);
}
for(k=0;k
{
P0 =
delayms(1000);
}
if(P0!=0xBF)
{
P0 = ~(0xfe
P0 = 0xaa;
}
else
{ P0 = 0xFF;
P1 = ~(0x01
}
}} void delayms(unsigned char ms)// 延时子程序
{
unsigned char i;while(ms--){
for(i = 0;i
(二)熟悉按键的电路及软件编程,编写对应程序,结合程序一实现按键控制LED指示灯闪烁
编写第二个程序,控制8位数码管的显示
1、建立项目文件,掌握头文件的使用
2、熟悉单片机C文件编写规范,变量定义,程序注释写法等
3、熟练掌握KEIL C51调试环境,熟悉编译,设置,在线观察参数
4、编写8位数码管的静态显示
5、添加显示子函数,掌握带传递参数的子函数编写
6、结合延时子程序,实现8位数码管的指定显示内容 程序:
#include unsigned char a[8]={0xf9,0xa4,0xb0,0X99,0X92,0X82,0XF8,0X80};unsigned char b[8]={0xfe,0xfd,0xfb,0XF7,0XEF,0XDF,0XBF,0X7F};unsigned char k;void delayms(unsigned char ms);void main(){ while(1){ for(k=0;k
// 延时子程序
{
unsigned char i;while(ms--){
(三)熟悉单片机定时器中断的相关内容,设计软件编写方案,实现时钟显示 编写第三个程序,控制8位数码管的显示时间
1、建立项目文件,掌握头文件的使用
2、熟悉单片机C文件编写规范,变量定义,程序注释写法等
3、熟练掌握KEIL C51调试环境,熟悉编译,设置,在线观察参数
4、编写8位数码管时钟显示软件
5、结合蜂鸣器的控制,编写带闹钟功能的时钟控制软件。
程序:
/*P1.4小时调整 P1.5分种调整*/ #include #include unsigned char data dis_digit;unsigned char key_s, key_v;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf[8];unsigned char data dis_index;unsigned char hour,min,sec;unsigned char sec100;
sbit k1 = P1^4;sbit k2 = P1^5;bit scan_key();//sao miao void proc_key();//chu li void inc_sec();void inc_min();void inc_hour();void display();void delayms(unsigned char ms);void main(void){ P0 = 0xff;P2 = 0xff;TMOD = 0x11;// 定时器0, 1工作模式1, 16位定时方式
TH1 = 0xdc;TL1 = 0;
TH0 = 0xFC;TL0 = 0x17;hour = 12;min = 00;sec = 00;
sec100 = 0;dis_buf[0] = dis_code[hour / 10];// 时十位
dis_buf[1] = dis_code[hour % 10];// 时个位
dis_buf[3] = dis_code[min / 10];// 分十位
dis_buf[4] = dis_code[min % 10];// 分个位
dis_buf[6] = dis_code[sec / 10];// 秒十位
dis_buf[7] = dis_code[sec % 10];// 秒个位
dis_buf[2] = 0xbf;
// 显示“-” dis_buf[5] = 0xbf;
// 显示“-”
dis_digit = 0xfe;dis_index = 0;
TCON = 0x01;IE = 0x8a;
// 使能timer0,1 中断
TR0 = 1;TR1 = 1;key_v = 0x03;
while(1){ if(scan_key()){
delayms(20);
if(scan_key())
proc_key();
} } } bit scan_key(){ if((k1 == 1)&(k2==1))return(0);else return(1);} void proc_key(){ EA = 0;if(k2 == 0){
inc_hour();
while(k2 == 0);
} if(k1 == 0){//inc_min();while(k2 == 0);
min++;
if(min > 59)
min = 0;dis_buf[3] = dis_code[min / 10];// 分十位
dis_buf[4] = dis_code[min % 10];// 分个位
while(k1 == 0);} EA = 1;} void timer0()interrupt 1 // 定时器0中断服务程序, 用于数码管的动态扫描
// dis_index---显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
// dis_digit---位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, //
选通P2.0口数码管 // dis_buf---显于缓冲区基地址
{ TH0 = 0xFC;TL0 = 0x17;
P2 = 0xff;
// 先关闭所有数码管
P0 = dis_buf[dis_index];
// 显示代码传送到P0口
P2 = dis_digit;
// dis_digit = _crol_(dis_digit,1);// 位选通值左移, 下次中断时选通下一位数码管
dis_index++;
// dis_index &= 0x07;// 8个数码管全部扫描完一遍之后,再回到第一
个开始下一次扫描
} void timer1()interrupt 3 { TH1 = 0xdc;sec100++;
if(sec100 >= 100){
sec100 = 0;
inc_sec();} } void inc_sec(){ sec++;if(sec > 59){
sec = 0;
inc_min();} dis_buf[6] = dis_code[sec / 10];// 秒十位
dis_buf[7] = dis_code[sec % 10];// 秒个位
} void inc_min(){ min++;if(min > 59){
min = 0;
inc_hour();} dis_buf[3] = dis_code[min / 10];// 分十位
dis_buf[4] = dis_code[min % 10];// 分个位 } void inc_hour(){ hour++;if(hour > 23){
hour = 0;} if(hour > 9)
dis_buf[0] = dis_code[hour / 10];// 时十位
else
dis_buf[0] = 0xff;// 当小时的十位为0时不 显示
dis_buf[1] = dis_code[hour % 10];} void delayms(unsigned char ms)// 延时子程序
{
unsigned char i;while(ms--){
for(i = 0;i
// 时个位
四、数据处理(现象分析)
五、结论
六、参考资料
《单片机原理应用》、《单片机原理及连接口技术》、《单片机微型计算机原理接口及应用》、《单片机原理及系统设计》、《单片机应用新技术教程》。
七、评语
单片机实训总结总结是事后对某一阶段的学习、工作或其完成情况加以回顾和分析的一种书面材料,它可以明确下一步的工作方向,少走弯路,少犯错误,提高工作效益,为此要我们写一份总结......
单片机实训总结总结是在某一特定时间段对学习和工作生活或其完成情况,包括取得的成绩、存在的问题及得到的经验和教训加以回顾和分析的书面材料,写总结有利于我们学习和工作能......
刀豆文库小编为你整合推荐8篇单片机实训总结,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......
单片机心得总结通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和......
单片机实训总结总结在一个时期、一个年度、一个阶段对学习和工作生活等情况加以回顾和分析的一种书面材料,它可以给我们下一阶段的学习和工作生活做指导,快快来写一份总结吧。......