STC15F单片机流水灯程序设计说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

“流水灯”程序设计说明
1程序设计思路
流水灯是经典的测试发光二极管是否正常工作和学习使用发光二极管的案例。

流水灯电路连接示意图
2关键代码设计说明
本程序由三个函数组成:
(1)void Init() 初始化函数
{
P0M1 = 0x00;//0000 0000
P0M0 = 0xff;//1111 1111 将P0各位设置为推挽输出
P2M1 = 0x00;//0000 0000
P2M0 = 0xff;//1111 1111 将P2各位设置为推挽输出
led_sel = 1;//为1时是led灯显示,为0时是数码管显示
}
(2)void delay(uint t):本过程目的是延时tms;但是延时的时间可能不是很准确。

单片机工作时,是在统一的时钟脉冲控制下有序进行的。

这个脉冲是由单片机控制器中的时钟电路产生的。

时钟电路由振荡器和分频器组成,振荡器产生基本的振荡信号,然后进行分频,得到相应的时钟。

振荡电路通常有内部振荡和外部振荡两种方式。

STC15F2K60S2单片机内部集成高精度R/C时钟,工作时钟可以使用内部振荡器或者外部晶体振荡器(简称晶振)产生的时钟。

外部振荡信号通过内部时钟电路,经过分频,得到相应的时钟信号。

图2外部振荡模式工作原理示意图
说明:
(1)振荡周期:晶体振荡器的周期。

(2)状态周期:振荡信号经二分频后形成的时钟脉冲信号,用S表示。

一个状态周期的两个振荡周期作为两个节拍分别称为节拍P1和节拍P2。

P1有效时,通常
完成算术逻辑操作;P2有效时,一般进行内部寄存器之间的传输。

(3)机器周期:完成一个基本操作所需的时间称为机器周期。

一个机器周期包含6个状态周期,用S1、S2、….、S6表示;共12个节拍,依次可表示为S1P1、
S1P2、S2P1、S2P2、……、S6P1、S6P2。

(4)指令周期:CPU执行一条指令所需要的时间。

CPU执行指令是在时钟脉冲控制下一步一步进行的,由于指令的功能和长短各不相同,因此,指令执行所需的时
间也不一样。

一个指令周期通常含有1~4个机器周期。

MCS-51单片机各种周期的相互关系
例:若MCS-51单片机外接晶振为12MHz时,则单片机的四个周期的具体值为:
振荡周期=1/12MHz=1/12μs=0.0833μs
时钟周期=1/6μs=0.167μs
机器周期=1μs
指令周期=1~4μs
单片机晶体振荡器M的频率可以在4MHz~48MHz之间选择,典型值是11.0592MHz(因为使用这个频率的晶振可以准确地得到9600bits/s和19200bits/s的波特率)。

(3)主函数:每隔一定延时给P0口赋值,P0位中为1的对应发光二极管将选通。

由于显示模式是从右向左不断循环,因此可以利用移位计算来完成不同发光二极管依次显示的效果。

要显示的信息放置在了led中,初始化为00000001。

void main()
{
Init(); //初始化
led = 0x01; //第一个LED发光
while(1)
{
P0 = led; //LED显示
delay(500); //延时500mS
if(led == 0x80)
{
led = 0x01;
}
else
{
led = led << 1;//led值逐一左移
}
}
}。

相关文档
最新文档