📄 2he1.c
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LEDdata=P1^0;
sbit LEDclk=P1^1;
sbit LEDmr=P1^2;
/*延时*/
void delay(uint time){
uchar k;
while(time--){
for(k=0;k<125;k++);
}
}
/*传送LED数据*/
void display(uchar num){
if (num&0x80) {
LEDdata=1;
}
else{
LEDdata=0;
}
num=_crol_(num,1);//左移一位
LEDclk=0;//写入数据
_nop_();
_nop_();
LEDclk=1;
}
void delay_ms(unsigned short ms)
{
unsigned short i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
void display_two(){
unsigned char led_contrl; //指示灯控制字节
unsigned char i ; //循环变量
unsigned char contrl1,contrl2; //指示灯移位变量
//模式一:按次序闪烁灯
P0 = 0xff; //熄灭所有指示灯
led_contrl=0x01; //初始化指示灯控制字节
delay_ms(300); //延时300MS
for(i=0;i<8;i++)
{
P0=~led_contrl; //点亮控制字节相应指示灯
delay_ms(250);
if(led_contrl<0x80){led_contrl<<=1; } //控制字节移位操作
else {led_contrl=0x01; }
}
//模式二:依次点亮所有指示灯
P0=0xff;
//熄灭所有指示灯
led_contrl=0xff; //初始化指示灯控制字节
contrl1=0xfe; //初始化移位变量1
delay_ms(300);
for(i=0;i<8;i++)
{
P0=led_contrl&contrl1; //点亮控制字节相应的指示灯
delay_ms(250);
contrl1<<=1; //移位变量左移1位
}
//模式三:交叉闪烁指示灯
P0=0xff; //熄灭所有指示灯
contrl1=0x02; //初始化移位变量1
contrl2=0x80; //初始化移位变量2
delay_ms(300);
for(i=0;i<8;i++)
{
led_contrl=contrl1|contrl2;
P0=~led_contrl; //点亮控制字节相应指示灯
delay_ms(250);
contrl1<<=1; //移位变量1左移1位
contrl2>>=1; //移位变量2右移1位
}
}
void main(){
uchar n,temp;
P1=0xff;
LEDclk=0;
LEDmr=0;
delay(1);
LEDmr=1;
while(1) {
temp=0xfe; //显示的初值
for (n=23;n>0;n--){
display(temp);//写入数据,并显示
delay(200);
temp=_crol_(temp,1);
temp=temp|0x01;
}
display(0xff); //关闭显示
delay(400);
display_two();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -