/* MCU: AT89S52
/* MCU-crystal: 12M
/* Version: 01
/* Last Updata: 2009-2-21
/* Author:
/* Description:
/* 使用定时器0,定时中断2ms一次对数码管显示扫描;
/* 三个位管要以扫描方式显示,使用共阳管,计灶首春数速度为1S;
/* 段A-H接到P0.1....7,位选为 P1.0,1,2;
/* 流水也以计数方式从200到250在P2口显示,低电平有效;
/****************************************************/
#include <reg52.h>
unsigned char code num_disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90}//共阳数字字形芹凯0到9
unsigned char code bit_sel[]={0xfb,0xfd,0xfe}//低电平有效数字个十百位选择
unsigned char buf[3]={0,0,2}//计算中的个十百位暂时存放处
unsigned char one,ten,second//个十位变量和流水灯显示3秒的时间变量
unsigned char rate//扫描速度,调整以适应显示效果
unsigned char stop=0, flag=1,flag1=0//隐耐闪烁3秒的标志位,用于主函数对中断的关断参数传递
unsigned int t,tt//2ms变量
unsigned char rate//与变量t同步,辅助赋值变
/**********主函数**********/
main(void)
{
TMOD=0X01
TH0=0xf8//定时2ms
TL0=0x30
ET0=1
EA=1
TR0=1
while(1)
{ if(stop==1)//判断stop信号,为1后便关闭定时器
{ TR0=0
ET0=0
EA=0
}
}
}
/*******************中断*******************/
void timer0() interrupt 1
{
TH0=0xf8//重新赋值定时2ms
TL0=0x30
if(flag==0)//定义用于判断计数是否到了250,若到了则不再计数,转向else执行流水灯闪烁任务
{
t++
if(t==500)
{ t=0
one++
P2=200+ten*10+one//在P2口的流水等,也是从200开始计数。
if(one==10)
{ one=0
ten++
if(ten==5)
{ flag=1//转向执行闪烁任务
}
}
}
}
else//flag已经==1;转向else执行流水灯闪烁任务
{ tt++
if(tt==500)
{ tt=0
second++
P2=~P2//流水灯全部以1S速度闪烁
if(second==3)stop=1//判断3秒时间到,关闭中断,停止闪烁,数码管熄灭
}
}
rate++
P0=0XFF//消隐
if(rate==3)rate=0
P0=num_disp[buf[rate]]
P1=bit_sel[rate]
buf[0]=one
buf[1]=ten
//因为百位没有变,所以不用赋值
}
最佳答案第一阶段:是先浏览教科书里的硬件部分,大至了解单片机的硬件结构。如ROM、RAM、地址、I/O口等,以及看一些厂家的MCU资料(Data Sheet),来加强MCU所提供各项资源的印象。呵呵,还是得先看书。看不懂的就问老师,问知道的人。可以理解,我以前在学校也是对单片机一点儿也不理解,其实渗指简单点的说单片机就是一块集成芯片,但是不同的地方就是可以通过编程来改变其引脚的电平高低。大二学了数电没有?学过数点你就会理解高低电平的含义。另外,大一的时候学过计算机基础了吧。你可以用计算机的原理来理解单片机。比如说 ROM 其实就像计算机的硬盘一样,是用来装东西的,装你运行的程序。第二阶段:就是了解二进位数字、十六进位数和软件方面的内容。尽管有很多高级语言可用于单片机的编程,但我觉得初学还是以汇编语言为好,更有利于和硬件结合,掌握硬件结构。知道汇编语言、机器语言、指令、 程序等概念后,从MOV指令开始,学习汇编语言和编程,在此如51的MCU汇编语言系统有11条指令,简单又好理解它们怎样和硬件联系,更有助于一般学习单片机的指令整合与运用.因此其方法可先了 解几条基本的MOV指令和它的机器语言,大致建立起单片机的硬件和软件概念,来知道单罩握片机的硬件是由指令控制指挥的。
第三阶段按照编程环境的使用手册,熟悉使用编程环境。现在的编程环境一般都和电脑相连,只要具备基本电脑知识的人都可很快掌握 *** 作步骤。
第四阶段是依靠实验板,学习掌握单片机的汇编语言指令系统和简单编程。同时和前面所学硬件知识结合组装,起到主学软件,巩固硬件的双重作用。
开始 时可用别人编的简单程式在实验板上进行验证、分析,主要是熟悉该学习方法,在应用方面主要针对单片机I/O各项介面的使用,如A/D,D/A,PWM输出的应用,LCD与VFD的控制,以及如何规范各项串列输出入口的通讯协定等,对其所控制的各项元器件须先分析驱动能力,如电流电压问题等。
汇编语言熟悉后,建议尽快学习C语言的编程,毕竟C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可丛闷配以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化 程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件 开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。
另外,我觉得一开始很多的概念可能你都不怎么理解的,光看书也难理解,还得多问人,还有找一样好的仿真软件,一定要会用。在学指令的时候一条一条的验证,那样才会理解。
就比如一个非常简单的 REG 0000H
AJMP 30H
MOV 20H #05H
END
看看仿真软件的寄存器,内部数据存储器里面的数据有什么改变。当你看到20H单元上的值变成了5,你就知道 MOV 20H #05H 的含义。但是光看书,可能就理解不出来。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)