今天来哥不一样的,单片机部分!这一期的话,会比较有意思在我看来,我是真的很喜欢单片机啦哈哈哈哈哈!
学习过的知识要及时巩固,符合记忆曲线的复习,才能牢记到心里
——————————————————————————————————————————
我选择的第一个项目案例是:跑马灯
这个案例算是特别基础的案例,让我稍微回忆一下
ps:我使用的是普中的开发板
首先我们得要求他要怎么闪,亮灭闪三下,然后全灭,接者跑马,依次点亮,再一次熄灭。
那么开始吧!
首先,我们先设定延时函数,用我们的软件设定的延时函数如下
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
我喜欢把这个函数给修改一下,并且将其模块化,创建一个新的delay.c和一个新的delay.h
delay.c如下:
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{ i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
不过如果想在主函数main中调用这个函数,我们需要为delay创建一个头文件delay.h如下
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif
ok,我们的预处理完成,接着就是编写我们的主程序了:
#include <REGX52.H>
#include "delay.h" //调用我们上面所定义的delay头文件
void LEDrunning() //定义跑马灯函数
{
int i;
for(i=0;i<3;i++)
{
P2=0x00; //全亮 0000 0000
Delay(100);
P2=0xff;
Delay(100); //亮,持续1000ms,灭持续100ms,总共执行三次
}
for(i=0;i<8;i++)
{
P2=0xff<<i ; /*依次点亮,1111 1111向左移动,下一位为1111 1110
依次类推 1111 1100,高位的1向左走,低位补0 */
Delay(100); //必须要加延时避免现象过快无法观察到
}
for(i=0;i<8;i++)
{
P2=~(0xff<<i) ; //与上述相反,0000 0000 则会变为0000 0001这样就实现了依次点灭
Delay(100);
}
}
int main()
{
while(1)
{
LEDrunning(); //调用运行跑马灯函数
}
}
那么我们上电看看他的效果!
完美!