keil uVision4界面:
#include<reg51.h>
#include<intrins.h> //包含循环移位函数的头文件
#define uchar unsigned char
#define uint unsigned int
uchar t;
void main()
{
uchar num=0;
uchar i,wei=0x80;
TMOD=0x01; //定时器T0为方式1
//设置定时器初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //总中断允许
ET0=1; //允许定时器T0中断
TR0=1; //启动定时器T0
P2=0xff;
while(1)
{
if(t==20) //1s时间到
{
t=0;
num++;//每1s计数
if(num==8)
num=0; //
wei=_crol_(wei,1); //循环移位函数_crol_(wei,1)将wei循环右移1位
P0=0x90; //P0口输出段码
P2=wei; //P2口输出位控码
}
}
}
void int0() interrupt 1 //T0中断程序
{
//重新赋初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++; //50ms计时
}
proteus仿真界面:
![](https://img-blog.csdnimg.cn/img_convert/e9f55043845984a129bc3d1c7bf23f24.png)