51系统c语言指令大全,51系列-C语言程序详解

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);

}

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值