单片机学习笔记 —— 点亮流水灯

我们前面学习了如何创建工程,现在就来实现一个流水灯吧。


一、八位发光二极管

led灯原理图

下图为led灯的原理图:

led灯阳极:P0[7…0]
led灯阴极:共阴极,P2.3


点亮led灯的条件

通电:P0=0xff
   P2.3=1
模式:推挽输出
  在实验板中,点亮led灯除了需要通电,还需要设置I/O口模式,可以通过设置寄存器P0M0[7…0]和P0M1[7…0]的值来实现,每一个led灯的I/O模式由P0M1和P0M0对应一位的组合决定(P0M1、P0M0共同控制了P0的I/O模式)

HIGHLOWI/O模式
00准双向口,灌电流可达到20mA
01推挽输出(强上拉输出,需加限流电阻)
10输入高阻
11开漏模式,内部上拉电阻断开

P0M1和P0M0组合决定了8位led的I/O模式,如下图:



二、时间设置

四种周期

振荡周期:晶体的振荡器周期(1/12us)
状态周期:振荡周期二分频得到的脉冲信号。前半部分和后半部分成为P1和P2,P1有效时完成算术路基运算,P2有效时完成内部寄存器的访问传输。
机器周期:完成一个基本操作所需要的时间成为机器周期。一个及其周期包含6个状态周期(12个振荡周期,即1us)
指令周期:CPU执行一条指令需要的时间。一般为1-4个机器周期。


软件延时函数

延时:可以通过1ms可以执行多少条指令来定义函数,执行空操作来实现时间延迟。
STC-ISP延时函数



三、流水灯实现

Init()函数:设置寄存器的值

sbit led_sel=P2^3;//P2^3----E3
uchar led;

void Init(){

	P0M1=0x00;
	P0M0=0xff;

	P2M1=0x00;
	P2M0=0x08;

	led_sel=1;	
}

描述:P0M1、P0M0设置led灯的I/O模式为推挽输出,P2M1、P2M0设置P2.3的I/O模式,设置P2.3=1使得led灯阴极姐低电平。这样Led灯在P0为0xff时就可以全亮了


Delay200ms()函数:延迟时间:

void Delay200ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	//_nop_();
	//_nop_();
	i = 9;
	j = 104;
	k = 139;
	do{
		do{
			while (--k);
		} while (--j);
	} while (--i);
}

main()函数:控制led灯左移

void main()
{
	Init();
	led=0x01;
	while(1)
	{
		P0=led;
		Delay200ms();
		if(led==0x80)
			led=0x01;
		else
			led=led<<1;
	}
}

描述:每隔200ms,P0的值左移一位,灯只有最左边的灯亮时,P0=0x01,即只有最右边的灯亮。这样,led灯就可以以自循环左移实现流水灯啦。



第二篇单片机学习笔记完结,cheers ! ??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值