- 好久没碰单片机了,有些生疏了。到现在还依稀记得自己独自坐在电脑屏幕前自学单片机,硬生生的去看了单片机的基础,现在想想还是挺有趣的。附上当初一点初学的单片机小程序,请大家多多指教!
用P1口作为输出口,接8位用作逻辑电平显示的发光二极管。设计程序使发光二极管间
隔300ms先奇数亮再偶数亮,循环3次;一个发光二极管亮上下循环3次;两个分别从两
边向中间流动3次;再从中间向两边流动3次;8个全部闪烁3次;关闭全部发光二极管
,停止。
综合实验程序:
#库定义
#include<reg52.h>
#include<intrins.h>
sbit led=P1^0; #位定义
int i,j,k,num,e,p,m;
void delay(int k) #定义延时函数
{
while(k--);
}
void timer0() #定时器0的初始化
{
TMOD=0X01; #工作模式
TR0=1;
EA=1; #开启总中断
ET0=1;
TH0=0XDc; #定时时间 需经过换算
TL0=0X00;
}
void Pled()
{
EA=0;
for(p=0;p<3;p++){
P1=0xfe;
for(num=0;num<8;num++)
{
delay(50000);
P1=_crol_(P1,1); #_crol_(左移函数)
if(num==6)
{
for(e=0;e<6;e++){
delay(50000);
P1=_cror_(P1,1); #_cror_(左移函数)
}
}
}
}
}
void flowmiddle()
{
for(m=0;m<3;m++)
{
P1=0x7e;
delay(50000);
P1=0XBD;
delay(50000);
P1=0XDB;
delay(50000);
P1=0XE7;
delay(50000);
}
for(m=0;m<3;m++)
{
P1=0XE7;
delay(50000);
P1=0XDB;
delay(50000);
P1=0XBD;
delay(50000);
P1=0x7e;
delay(50000);
}
for(m=0;m<3;m++){
P1=0xff;
delay(50000);
P1=0;
delay(50000);
}
}
void main()
{
timer0();
while(1){
if(j==7)
{ j=0;
Pled();
flowmiddle();
} if(j==0)
{
P1=0xff;
}
}
}
void time0() interrupt 1 #定时器0中断响应
{
TH0=0Xdc;
TL0=0X00;
i++;
if(i==30)
{ i=0;
j++;
if(j%2==0){
P1=0x55;}
if(j%2!=0)
{
P1=0xaa;
}
}
}
实验实现说明:使用定时器0设定一个计时300ms的计时器,通过判断变量j在计时器计时到后是奇偶数,分别亮对应的小灯,当变量到7时,清除变量值,并执行通过左右移操作,以及流向中间的操作。