一、流水灯与数码管
流水灯不断左移,通过外部中断0来控制数码管的显示。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
void left_one();
//两个锁存器的锁存端
sbit dula= P2^6;
sbit wela= P2^7;
uchar temp, num, aa;
uchar code table[]={
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
void main()
{
num= 0;
TMOD= 0x01; //初始化定时器
//50毫秒进行一次中断
TH0= (65536-50000)/256; //高八位
TL0= (65536-50000)%256; //低八位
EA= 1; //开总中断
ET0= 1; //开定时器中断
TR0= 1; //启动定时器
//点亮一个流水灯
temp= 0xfe;
P1= temp;
//数码管的初始值为0
dula= 1;
P0= table[0];
dula= 0;
//每个数码管都亮
wela= 1;
P0= 0x00;
wela= 0;
while(1)
{
//流水灯左移一位
left_one();
}