1.单个LED灯,单个按键
//C语言的头文件 //这是第一种注释方式;
#include
#include <> //预处理命令
void main(void) //主函数名,必须有一个主函数,void为数据类型
{
unsigned int a; //定义变量,a为int类型,无符号整型。语句必须分号结尾
do{ //do-while 组成的循环过程,过程的开始
for (a=0; a<500; a++); //这是一个条件循环,判断a的值是否小于500,真循环-耗时,假转下句
P1_0 = 0; //位赋值语句,设 P1.0 口为低电平—置0,点亮 LED
for (a=0; a<500; a++); //这又是一个判断循环
P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED
}
while(1); //do-while 组成循环过程的末尾,需要对do的过程进行一次判断
}
程序说明:
While(条件语句) 与 for(条件语句) 单独使用所表达的循环,是在句首先执行判断,为真循环,为假转下一句执行。其中语句的括号内为判断条件语句。
Do-while合用,是需要对do的过程再进行一次判断。While(条件语句)为真循环,为假跳转。while(1)表示高电平为真循环do,否则,低电平跳转。由于P1.0 口为高电平结尾,因此,又回到do再循环,无限反复。
2.多个LED灯,单个按键
#include
#include <> //预处理命令
void main(void) //主函数名,必须有一个主函数,void为数据类型
{
unsigned int a; //定义变量,a为int类型,无符号整型。语句必须分号结尾
do{ //do-while 组成的循环过程,过程的开始
for (a=0; a<500; a++); //这是一个条件循环,判断a的值是否小于500,真循环-耗时,假转下句
P1_0 = 0; //位赋值语句,设 P1.0 口为低电平—置0,点亮 LED
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
for (a=0; a<500; a++); //这又是一个判断循环
P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
}
while(1); //do-while 组成循环过程的末尾,需要对do的过程进行一次判断
}
程序说明:
每个口用位赋值指令来开关P1口的各个LED。可以用字节赋值指令一次性的开关8位P1口LED。
P1=0; //P1口8位置低电平,点亮8个LED
P1=1; // P1口8位置低电平,关闭8个LED
#include
#include <> //预处理命令
void main(void) //主函数名,必须有一个主函数,void为数据类型
{
unsigned int a; //定义变量,a为int类型,无符号整型。语句必须分号结尾
do{ //do-while 组成的循环过程,过程的开始
for (a=0; a<500; a++); //这是一个条件循环,判断a的值是否小于500,真循环-耗时,假转下句
P1 = 0; //字节赋值语句,设 P1 口为低电平—置0,点亮 8个LED
for (a=0; a<500; a++); //这又是一个判断循环
P = 1; //设 P1 口为高电平,熄灭 LED
}
while(1); //do-while 组成循环过程的末尾,需要对do的过程进行一次判断
}
l LED循环问题(跑马灯):
每个口用位赋值指令来开关P1口的各个LED,用位指令赋值顺序开关,实现跑马灯。
#include
#include <> //预处理命令
void main(void) //主函数名,必须有一个主函数,void为数据类型
{
unsigned int a; //定义变量,a为int类型,无符号整型。语句必须分号结尾
do{ //do-while 组成的循环过程,过程的开始
for (a=0; a<500; a++); //这是一个条件循环,判断a的值是否小于500,真循环-耗时,假转下句
P1_0 = 0; //位赋值语句,设 P1.0 口为低电平—置0,点亮 LED
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
for (a=0; a<500; a++); //这又是一个判断循环
P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
for (a=0; a<500; a++); //这又是一个判断循环
P1_0 = 1;
P1_1 = 1;
P1_2 = 0;
P1_3 = 1;
for (a=0; a<500; a++); //这又是一个判断循环
P1_0 = 1;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
for (a=0; a<500; a++); //这又是一个判断循环
P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
}
while(1); //do-while 组成循环过程的末尾,需要对do的过程进行一次判断
}
用循环语句实现跑马灯,需要使用数组—表data。每个字节--8位来表达P1口各个位的电平高低,也就是亮与灭。
#include
#include <> //预处理命令
void main(void) //主函数名,必须有一个主函数,void为数据类型
{
unsigned int a; //定义变量,a为int类型,无符号整型。语句必须分号结尾
do{ //do-while 组成的循环过程,过程的开始
for (a=0; a<500; a++); //这是一个条件循环,判断a的值是否小于500,真循环-耗时,假转下句
P1 = 0; //字节赋值语句,设 P1 口为低电平—置0,点亮 8个LED
for (a=0; a<500; a++); //这又是一个判断循环
P = 1; //设 P1 口为高电平,熄灭 LED
}
while(1); //do-while 组成循环过程的末尾,需要对do的过程进行一次判断
}
3. 键盘与数码管
//键盘扫描法--数码管显示键值。行P1.0~3 列P1.4~7
#include
unsigned char code tabyin[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0到F的16个键值
unsigned char code tabyang[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0x88,0x83,0xc6,0xa1,0x86,0x8e};//0到F的16个键值
//延时函数
void Delayt(unsigned char t)
{
unsigned char i;
for(t=0;i<=t;t++)
for(i=0;i<255;i++);
}
//键值判断函数
bit pkey(void)
{
P1=0xf0;
if(P1!=0xf0)
{
Delayt(25);
if(P1!=0xf0)
return 1;
else
return 0;
}
else
return 0;
}
//主函数
void main(void)
{
unsigned char key,j,k,s;
while(1)
{
if(pkey()==1)
{
P1=0xfe;
k=0xfe;
for(j=0;j<4;j++)
{
s=P1&0xf0;
switch(s)
{
case 0xe0: key=4*j+0; break;
case 0xd0: key=4*j+1; break;
case 0xb0: key=4*j+2; break;
case 0x70: key=4*j+3; break;
default: break;
}
k=(k<<1)|0x01;
P1=k;
}
}
P2=0x00;
P3=0xff;
P3=tabyang[key];
Delayt(200);
P2=tabyin[key];
Delayt(250);
}
}