高级会员
主题
回帖0
积分1988
阅读权限30
注册时间2012-2-14
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2013-7-16 17:19
|
显示全部楼层
再贴一个简单的定时器:
//流水灯接P3口;4位数码管位选接138译码器,
//段显接P0口 0000~9999S计数
#include <reg52.h>
typedef unsigned int uint16;
typedef unsigned char uint8;
uint8 code LED[] = {0x3f,0x06,0x5b,0x4f,//0,1,2,3
0x66,0x6d,0x7d,0x07,//4,5,6,7
0x7f,0x6f,0x77,0x7c,//8,9,A,b
0x58,0x5e,0x79,0x71,//c,d,E,F
0x54,0x40,0x76,0x80,0};//n,-,H,.
sbit LD = P1^1;
sbit LE = P1^0;
sbit AD = P2^2;
sbit BD = P2^3;
sbit CD = P2^4;
uint16 gx,sx,bx,qx,tx = 0;
void init()
{
P0 = 0;
LD = 1;
LE = 1;
TMOD = 0X10;
TH1 = 0XFC;
TL1 = 0X18;
TR1 = 1;
}
void stac()
{
static uint8 i = 0;
gx = tx%10;
sx = tx/10%10;
bx = tx/100%10;
qx = tx/1000/100%10;
switch(i)
{
case 0:AD = 0;BD = 0;CD = 0;i++;P0 = LED[qx];break;//14 E
case 1:AD = 1;BD = 0;CD = 0;i++;P0 = LED[bx];break;//16 n
case 2:AD = 0;BD = 1;CD = 0;i++;P0 = LED[sx];break;//13 d
case 3:AD = 1;BD = 1;CD = 0;i=0;P0 = LED[gx];break;//17 -
default:break;
}
}
void main()
{
uint8 i;
uint16 cont;
init();
while(1)
{
if(TF1 == 1)
{
TF1 = 0;
TH1 = 0XFC;
TL1 = 0X18;
cont++;
stac();
}
if(cont == 1000)
{
cont = 0;
tx++;
if(tx == 9999)
tx = 0;
P3 = ~(1 << i++);
if(i == 8)i = 0;
}
}
}
|
|