📄 +
字号:
#include<reg52.h>
//近似10ms的延时函数
//注意,理论上使用"for(i=100;i>=0;i--)"类型的循环结构,多数情况下汇编效率要略高于"for(i=0;i>=100;i++)"。
//但由于软件冲突,Proteus仿真时,使用"for(i=100;i>=0;i--)"类型将会仿真出错。
//因此这里使用"for(i=0;i>=100;i++)"。但在硬件试验下建议使用"for(i=100;i>=0;i--)"。
void delay_10ms(unsigned char delay_ms_num)
{
unsigned int i,j,k;
for(i=0;i<=delay_ms_num;i++)
for(j=0;j<=100;j++)
for(k=0;k>=100;k++);
}
//中断初始化函数
void tx_init()
{
EA=1;
PX0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
}
void main()
{
tx_init();
P1=0x00;
while(1)
{
delay_10ms(100);
P1=~P1;
}
}
void tx0_func() interrupt 0
{
unsigned char i;
//C51语言中调用循环移位不便,且与Proteus有冲突,故采用查表实现循环移位。
unsigned char code table0[]={0x80,0x40,0x20,0x10,
0x08,0x04,0x02,0x01};
for(i=0;i<7;i++)
{
P1=table0[i];
delay_10ms(255);
delay_10ms(255);
}
P1=0xff;//完成中断后灯全部熄灭
}
void tx1_func()interrupt 2
{
unsigned char i;
unsigned char code table2[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe};
for(i=0;i<=7;i++)
{
P1=table2[i];
delay_10ms(255);
delay_10ms(255);
}
P1=0x00;//完成中断后灯全部点亮
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -