C51语句概念
单分支语句
表达语句
if(表达式) {
分支一
}
else
{
分支二
}
表达语句
if(表达式)
{
语句
}
#include<reg52.h>
sbit key1 = P3^2;
void delay(unsigned int k)
{
unsigned i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{
while(1)
{
if(key1==0)
{
P2=0X0F; //0000(左边) 1111 是左边四个灯亮
delay(500);
}
else
{
P2=0XF0; //1111(右边) 0000 是右边四个灯亮
delay(500);
}
}
}
多分支语句
if(表达式){
语句
}else if(表达式){
语句
}else{
表达式
}
#include<reg52.h>
sbit key1 = P3^2;
sbit key2 = P3^3;
void delay(unsigned int k)
{
unsigned i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{
while(1)
{ if(key1==0 && key2==0)
{
0X00; //全亮
}
else if(key1==0)
{
P2=0X0F; //0000(左边) 1111 是左边四个灯亮
delay(500);
}
else if(key2==0)
{
P2=0XF0; //1111(右边) 0000 是右边四个灯亮
delay(500);
}
else
{
P2=0XFF;
}
}
}
两个按钮来控制左右移动的效果
#include<reg52.h>
sbit key1=P3^2;
sbit key2=P3^3;
bit f1,f2;
unsigned char tab[8]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};
void delay(unsigned int k)
{
unsigned i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
-
void main()
{
while(1)
{ int i;
if(key1==0)
{
f1=1;
f2=0;
}else if(key2==0)
{
f1=0;
f2=1;
}
else if(f1==1)
{
for(i=0;i<8;i++)
{
P2=tab[i];
delay(500);
}
P2=0XFF;
}
else if(f2==1)
{
for(i=7;i>=0;i--)
{
P2=tab[i];
delay(500);
}
P2=0XFF;
}
}
}
for 循环语句
数码管原理
数码管八段数码管内部由七个条形发光二极管和一个小圆点发光二极管组成和共阴极数码管。
二极管的阳极接在一起电源,共阳极是公共端,共阴极分别引出。
数码管的静态显示
静态显示也叫直流驱动或静态驱动。
优点:数据稳定,无闪亮。
缺点:位数多时,功率耗大。
数码管的读法:dp g f e d c b a
左右读法 亮为0,灭为1来不是。
数码管的共阴接口的二进制码
比如说:我们在想亮1那就接口设置为0xF9
L.显示的接口设置为0x47
数码管显示数字的代码(简单来表示)
#include<reg52.h>
unsigned char tab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0x83,0x83,0xc6,0x92,0xa1,0x86,0x8e};
void delay()
{
unsigned i,j;
for(i=0;i<100;i++)
for(j=0;j<124;j++);
}
void main()
{
while (1)
{
P2=0xef;
P0=0xc0;
delay();
P0=0xf9;
delay();
P0=0xa4;
delay();
P0=0xb0;
delay();
P0=0x99;
delay();
P0=0x92;
delay();
P0=0x82;
delay();
P0=0xf8;
delay();
P0=0x80;
delay();
P0=0x90;
delay();
P0=0x88;
delay();
P0=0x83;
delay();
P0=0xc6;
delay();
P0=0xa1;
delay();
P0=0x86;
delay();
P0=0x8e;
delay();
P0=0xC8;
delay();
P2=0xcf;
P0=0xc0;
delay();
P0=0xf9;
delay();
P0=0xa4;
delay();
P0=0xb0;
delay();
P0=0x99;
delay();
P0=0x92;
delay();
P0=0x82;
delay();
P0=0xf8;
delay();
P0=0x80;
delay();
P0=0x90;
delay();
P0=0x88;
delay();
P0=0x83;
delay();
P0=0xc6;
delay();
P0=0xa1;
delay();
P0=0x86;
delay();
P0=0x8e;
delay();
P0=0xC8;
delay();
P2=0x8f;
P0=0xc0;
delay();
P0=0xf9;
delay();
P0=0xa4;
delay();
P0=0xb0;
delay();
P0=0x99;
delay();
P0=0x92;
delay();
P0=0x82;
delay();
P0=0xf8;
delay();
P0=0x80;
delay();
P0=0x90;
delay();
P0=0x88;
delay();
P0=0x83;
delay();
P0=0xc6;
delay();
P0=0xa1;
delay();
P0=0x86;
delay();
P0=0x8e;
delay();
P0=0xC8;
delay();
P2=0x0f;
P0=0xc0;
delay();
P0=0xf9;
delay();
P0=0xa4;
delay();
P0=0xb0;
delay();
P0=0x99;
delay();
P0=0x92;
delay();
P0=0x82;
delay();
P0=0xf8;
delay();
P0=0x80;
delay();
P0=0x90;
delay();
P0=0x88;
delay();
P0=0x83;
delay();
P0=0xc6;
delay();
P0=0xa1;
delay();
P0=0x86;
delay();
P0=0x8e;
delay();
P0=0xC8;
delay();
}
}
函数方法:
#include<reg52.h>
unsigned char tab[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
void delay(unsigned int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{
while(1)
{
int i;
P2=0xef; // 数码管第一个亮 1110 1111
for(i=0;i<16;i++)
{
P0=tab[i];
delay(5000);
}
P0=0XFF;
delay(5000);
P2=0XDF; // 数码管第二个亮 1101 1111
for(i=15;i>0;i--)
{
P0=tab[i];
delay(5000);
}
P0=0XFF;
delay(5000);
P2=0XBF; // 数码管第三个亮 1011 1111
for(i=0;i<16;i++)
{
P0=tab[i];
delay(5000);
}
P0=0XFF;
delay(5000);
P2=0X7F; // 数码管第四个亮 0111 1111
for(i=0;i<16;i++)
{
P0=tab[i];
delay(5000);
}
}
}
按钮来控制数字的变化
#include<reg52.h>
unsigned char tab[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
sbit key1=P3^2;
sbit key2=P3^3;
void delay(unsigned int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{
while(1)
{
int i;
P2=0XEF;
if(key1==0&&key2==1)
{
i++;
delay(1000);
if(i>15) i=0;
P0=tab[i];
}
if(key2==0&&key1==1)
{
i--;
delay(1000);
if(i<0) i=15;
P0=tab[i];
}
}
}
7SEG-MAX4-CA |
|
74LS04 |
|
BUTTON |
|
RESPACK-8 |
数码管同时亮
显示为3282
#include<reg52.h>
unsigned char tab[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
sbit key1=P3^2;
sbit key2=P3^3;
void delay(unsigned int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
//显示3
void one()
{
P0=0XB0; //段选 P2.7 P2.6 P2.5 P2.4
P2=0XEF; //位选 1 1 1 0
}
// 显示2
void two()
{
P0=0XA4;
P2=0XDF; //位选 1 1 0 1
}
// 显示8
void three()
{
P0=0X80;
P2=0XBF; //位选 1 0 1 1
}
// 显示2
void four()
{
P0=0XA4;
P2=0X7F; //位选 0 1 1 1
}
void main()
{
while(1)
{
// 第一个端口
one();
delay(4);
// 第二个端口
two();
delay(4);
// 第三个端口
three();
delay(4);
// 第四个端口
four();
delay(4);
}
}
按来说说所的表示(1234)
#include<reg52.h>
void delay(unsigned int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{
while(1)
{
P0=0XF9;
P2=0XEF;
delay(4);
P0=0XA4;
P2=0XDF;
delay(4);
P0=0XB0;
P2=0XBF;
delay(4);
P0=0X99;
P2=0X7F;
delay(4);
}
}
仿真软件运行
#include<reg52.h>
unsigned char tab[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
sbit key1=P3^2;
sbit key2=P3^3;
void delay(unsigned int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{
while(1)
{
P0=0XF9;
P2=0XEF;
delay(4);
P0=0XFF;
P0=0XA4;
P2=0XDF;
delay(4);
P0=0XFF;
P0=0XB0;
P2=0XBF;
delay(4);
P0=0XFF;
P0=0X99;
P2=0X7F;
delay(4);
P0=0XFF;
}
}
第四种表示方法:
#include<reg52.h>
unsigned char tab[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
sbit key1=P3^2;
sbit key2=P3^3;
void delay(unsigned int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{ int num = 3282;
while(1)
{
P0=tab[num/1000%10];
P2=0XEF;
delay(4);
P0=0XFF;
P0=tab[num/100%10];
P2=0XDF;
delay(4);
P0=0XFF;
P0=tab[num/10%10];
P2=0XBF;
delay(4);
P0=0XFF;
P0=tab[num%10];
P2=0X7F;
delay(4);
P0=0XFF;
}
}
按钮来控制0到12的变化
#include<reg52.h>
unsigned char tab[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
sbit key1= P3^2;
sbit key2= P3^3;
sbit LED = P2^0;
bit f1,f2;
void delay(unsigned int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
void main()
{ int num = 3282;
while(1)
{
if(key1==0 && f1==0)
{
f1=1;
num++;
if(num>12)
{
num=0;
LED=0;
delay(2000);
LED=1;
}
}
if(key1==1) f1=0;
P0=tab[num/1000%10];
P2=0XEF;
delay(4);
P0=0XFF;
P0=tab[num/100%10];
P2=0XDF;
delay(4);
P0=0XFF;
P0=tab[num/10%10];
P2=0XBF;
delay(4);
P0=0XFF;
P0=tab[num%10];
P2=0X7F;
delay(4);
P0=0XFF;
}
}
数码管的0到99 的减加法
#include<reg52.h>
// 数码管的动态显示
#define u8 unsigned char
#define u16 unsigned int
u8 tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; // 0到9的执行编码
u8 dx[]={0XB0,0XA4,0X80,0XA4}; //学号3282
u8 wx[]={0XEF,0XDF,0XBF,0X7F}; //端口的位选
sbit sb1=P3^2; // 按钮1
sbit sb2=P3^3; // 按钮2
bit flag1,flag2; //标志位
char cnt; // 变量
// 延迟函数
void delay(u16 k)
{
u16 i,j;
for(i=0;i<k;i++)
for(j=0;j<124;j++);
}
/**
// 显示函数 第一种方法(简单)
void xs()
{
P0=dx[0];
P2=wx[0];
delay(1);
P0=0XFF; //关闭显示
P0=dx[1];
P2=wx[1];
delay(1);
P0=0XFF; //关闭显示
P0=dx[2];
P2=wx[2];
delay(1);
P0=0XFF; //关闭显示
P0=dx[3];
P2=wx[3];
delay(1);
P0=0XFF; //关闭显示
}
*/
// 显示函数 第二种方法(循环)
void xs()
{
int i;
for(i=0;i<4;i++)
{
P0=dx[i];
P2=wx[i];
delay(1);
P0=0XFF; //关闭显示
}
}
// 主函数
void main()
{
while(1)
{
xs();
// 加法
if(sb1==0&&flag1==0)
{
flag1=1;
cnt++;
if(cnt>99)
{
cnt=0;
}
dx[0]=0X88;
dx[1]=0XBF;
dx[2]=tab[cnt/10];
dx[3]=tab[cnt%10];
}
if(sb1==1)flag1=0;
// 减去方法
if(sb2==0&&flag2==0)
{
flag2=1;
cnt--;
if(cnt<0)
{
cnt=99;
}
dx[0]=0XC6;
dx[1]=0XBF;
dx[2]=tab[cnt/10];
dx[3]=tab[cnt%10];
}
if(sb2==1)flag2=0;
}
}