2-1 点亮一个LED
#include
void main()
{
P2=0xFE;//1111 1110
}
2-2 让LED闪烁(此文章所有代码都是最终实现代码)
#include
#include
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE;
Delay500ms();
P2=0xFF;
Delay500ms();
}
}
2-3 LED流水灯
#include
#include
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main()
{
while(1)
{
P2=0xFE; //1111 1110
Delay500ms();
P2=0xFD; //1111 1101
Delay500ms();
P2=0xFB; //1111 1011
Delay500ms();
P2=0xF7; //1111 0111
Delay500ms();
P2=0xEF; //1110 1111
Delay500ms();
P2=0xDF; //1101 1111
Delay500ms();
P2=0xBF; //1011 1111
Delay500ms();
P2=0x7F; //0111 1111
Delay500ms();
}
}
2-3 LED流水灯PLUS
#include
#include
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms) //非0为真,先执行一次即为延时1ms,然后自减到0
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
int main()
{
while(1)
{
P2=0xFE; //1111 1110
Delay1ms(100);
P2=0xFD; //1111 1101
Delay1ms(100);
P2=0xFB; //1111 1011
Delay1ms(100);
P2=0xF7; //1111 0111
Delay1ms(100);
P2=0xEF; //1110 1111
Delay1ms(100);
P2=0xDF; //1101 1111
Delay1ms(100);
P2=0xBF; //1011 1111
Delay1ms(100);
P2=0x7F; //0111 1111
Delay1ms(100);
}
}
3-1 独立按键控制LED亮灭
#include
int main()
{
while(1)
{
if(P3_1==0) //K1接在了P31,直接读这个寄存器
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
3-2 独立按键控制LED状态
#include
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
int main()
{
while(1)
{
if(P3_1==0)
{
Delay(20); //如果P31是按下状态,那么延时20ms
while(P3_1==0); //按下不操作,松手才操作;while(P3_1==0)检测松手,不能不加
Delay(20); //松手以后,消除松手抖动
P2_0=~P2_0; //可以操作了,然后取反
}
}
}
3-3 独立按键控制LED显示二进制
int main()
{
unsigned char LEDNum=0; // 无符号字符型为0~255的8位二进制数据,表示一个寄存器
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum=++;
P2=~LEDNum;
}
}
}
3-4 独立按键控制LED移位
#include
void Delay(unsigned int xms); //另一种声明方式
unsigned char LEDNum;
int main()
{
P2=~0x01;
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8)
LEDNum=0;
P2=~(0x01<
4-1 静态数码管显示
#include
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // 0-9的段码表
void Nixie(unsigned char Location,Number) // 数码管显示的子函数,两个参数:位置和数字
{
switch(Location)
{
case 1: P2_4=1; P2_3=1; P2_2=1; break;
case 2: P2_4=1; P2_3=1; P2_2=0; break;
case 3: P2_4=1; P2_3=0; P2_2=1; break;
case 4: P2_4=1; P2_3=0; P2_2=0; break;
case 5: P2_4=0; P2_3=1; P2_2=1; break;
case 6: P2_4=0; P2_3=1; P2_2=0; break;
case 7: P2_4=0; P2_3=0; P2_2=1; break;
case 8: P2_4=0; P2_3=0; P2_2=0; break;
}
P0=NixieTable[Number]; // P0的值即为要显示的数字
}
int main()
{
Nixie(2,3);
while(1)
{
}
}
4-2 动态数码管显示
#include
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1: P2_4=1; P2_3=1; P2_2=1; break;
case 2: P2_4=1; P2_3=1; P2_2=0; break;
case 3: P2_4=1; P2_3=0; P2_2=1; break;
case 4: P2_4=1; P2_3=0; P2_2=0; break;
case 5: P2_4=0; P2_3=1; P2_2=1; break;
case 6: P2_4=0; P2_3=1; P2_2=0; break;
case 7: P2_4=0; P2_3=0; P2_2=1; break;
case 8: P2_4=0; P2_3=0; P2_2=0; break;
}
P0=NixieTable[Number];
Delay(1);
P0=0x00;
}
int main()
{
while(1)
{
Nixie(1,1);
// Delay(20);
Nixie(2,2);
// Delay(20);
Nixie(3,3);
// Delay(20);
}
}