(1)程序运行时P0^0的LED点亮,数码管显示0;
(2)当完成一次按键操作,P0^0的LED熄灭,P0^1的LED点亮,以此类推;同时数码管进行计数,完成一次按键操作,计数加 1 ,显示范围0-F;
(1)程序运行时P0^0的LED点亮,数码管显示0;
(2)当完成一次按键操作,P0^0的LED熄灭,P0^1的LED点亮,以此类推;同时数码管进行计数,完成一次按键操作,计数加 1 ,显示范围0-F;
点亮LED灯
#include "reg52.h"//调用52单片机的头文件,写51也可以//
sbit LED=P2^0;//sbit 是用来确定地址,这里是把LED定义为P2的0号接口//
void main()
{
LED=0;//代表着P2口出低电位使发光二极管前后产生电位差而发光//
}
流水灯实现
#include "reg52.h"
#define LED P2
#define ui unsigned int
#define uc unsigned char
void delayms(ui del) //延时语句,延时时长为(del*10)ms
{
ui i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++) ;
}
void main(){
int i;
while(1){
for(i=1;i<8;i++){
LED=(0xff<<i);//把0的那一位不断左移使二极管导通
delayms(15);//此处延时是为了展现视觉效果,不延时会太快人眼看不出流水效果
}
}
}
实现使流水灯从左到右再从右到左
#include "reg52.h"
#define LED P2
#define ui unsigned int
#define uc unsigned char
void delayms(ui del)
{
ui i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++) ;
}
void main(){
int i;
while(1){
for(i=1;i<8;i++){
LED=(0xff<<i);
delayms(15);
}
LED=0x00;//让所有灯熄灭准备待会反着来亮
delayms(10);//这就是待会……
for(i=1;i<8;i++){
LED=(0xff>>i);//右移!
delayms(15);
}
}
}
#include<reg52.h>
void main()
{
P0=0X3F;//显示字符‘0’
}
进行动态显示
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71}; //0~F数码
void delay(u16 i) //延时函数
{
while(i--);
}
void DigDisplay() //数码管显示函数
{
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:
LSC = 0;LSB = 0;LSA = 0;break; //显示第1个数码管
case 1:
LSC = 0;LSB = 0;LSA = 1;break; //显示第2个数码管
case 2:
LSC = 0;LSB = 1;LSA = 0;break; //显示第3个数码管
case 3:
LSC = 0;LSB = 1;LSA = 1;break; //显示第4个数码管
case 4:
LSC = 1;LSB = 0;LSA = 0;break; //显示第5个数码管
case 5:
LSC = 1;LSB = 0;LSA = 1;break; //显示第6个数码管
case 6:
LSC = 1;LSB = 1;LSA = 0;break; //显示第7个数码管
case 7:
LSC = 1;LSB = 1;LSA = 1;break; //显示第8个数码管
}
P0 = smgduan[i+1];//显示1~8的数值
delay(100); //延时,造成视觉暂留现象
P0 = 0x00; //数码管消隐
}
}
void main()
{
while(1)
{
DigDisplay();
}
}