电子萌新的学习记录
STC12C5A60S单片机——独立按键流水灯
1.0版本(非常普通,使用三个独立按键控制加速、减速、停止与启动)代码如下:
#include <STC12C5A60S2.H>
#include "intrins.h"
sbit key1 = P2 ^ 2;
sbit key2 = P2 ^ 1;
sbit key3 = P2 ^ 0;
unsigned int i, time = 500;
void Delay_ms(unsigned int time)
{
unsigned char i, j;
while (time--)
{
_nop_(); _nop_(); _nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
void main()
{
P0M0 = 0xff;
while (1)
{
for (i = 0; i < 8; i++)
{
P0 = 0x01 << i;
Delay_ms(time);
if (key1 == 0)
{
Delay_ms(10);
if (key1 == 0)
{
time = 100;
}
while(!key1);
}
if (key2 == 0)
{
Delay_ms(10);
if (key2 == 0)
{
time = 900;
}
while(!key2);
}
if (key3 == 0)
{
Delay_ms(10);
if (key3 == 0)
{
while(1)
{
while(!key3);
if (key3 == 0)
{
Delay_ms(10);
if(key3 == 0)
{
break;
}
}
}
}
while(!key3);
}
}
}
}
使用stc-isp-15xx-v6.87F软件将hex文件下载进单片机版
下面为2.0版本
2.0版本可变速,代码如下
#include <STC12C5A60S2.H>
#include"intrins.h"
unsigned int i, time;
sbit key1 = P2^2;
sbit key2 = P2^1;
sbit key3 = P2^0;
void Delay_ms(unsigned int time)
{
unsigned char i, j;
while (time--)
{
_nop_();_nop_();_nop_();
i = 11;
j = 190;
do
{
while(--j);
}while(--i);
}
}
void main()
{
P0M0 = 0xff;
time = 200;
while(1)
{
for (i = 0; i < 8; i++)
{
P0 = 0x01 << i;
Delay_ms(time);
if (key1 == 0)
{
Delay_ms(10);
if (key1 == 0)
{
time = time / 2;
if (time < 40) //这里可调最快速度
{
time = 40;
}
}
while(!key1);
}
if (key2 == 0)
{
Delay_ms(10);
if (key2 == 0)
{
time = time * 2;
if (time > 1000) //这里可调最慢速度
{
time = 1000;
}
}
while(!key2);
}
if (key3 == 0)
{
Delay_ms(10);
if (key3 == 0)
{
while(1)
{
while(!key3);
if (key3 == 0)
{
Delay_ms(10);
if (key3 == 0)
{
break;
}
}
}
}
while(!key3);
}
}
}
}