|
#include <reg52.h>
typedef unsigned char uint8;//定义参数类型,规范书写格式
typedef unsigned int uint16;
uint16 i; //定义i 用于非精确延时计数
uint8 ledbuf;//定义led变量缓存,起到中间变量作用
/*STC89C51 P1口外38译码器;6号接三极管b极,起到所有LED高电平总开关作用 见末尾图1*/
sbit ADDR0 =P1^0;
sbit ADDR1 =P1^1;
sbit ADDR2 =P1^2;
sbit ADDR3 =P1^3;
sbit ENLED =P1^4;
/******** 38译码器引脚对应P1位置*********/
main()
{
i =0;
cnt=0;
ledbuf=0x01;
/************** 参数初始化*************/
ADDR0 =0;
ADDR1 =1;
ADDR2 =1;
ADDR3 =1;
ENLED =0;
/************** 38译码器设置*************/
while(1)
{
P0=~ledbuf; //对P0赋值
for(i=0;i<30000;i++); //延时设置,这里注意 i 的值,如果uint8型,计数最大到255,超过256程序会死;这里 i 定义为uint1
ledbuf<<=1; //中间变量左移,>>符号为右移
if(ledbuf==0x00) //是为了保证最后一个led灯正常亮,ledbuf需左移为0000 0000,如果写0x80,最后一个灯就直接跳过状态显示
{
ledbuf = 0x01;
}
}
}
/**************main 主函数*************/
图1:38译码器74HC138 LEDS6 为LED总控制开关
图2:LED电路
|
评分
-
查看全部评分
|