27,374
社区成员
发帖
与我相关
我的任务
分享
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit r2=P1^2; //设置方波P1.2输出-->十位数
sbit r3=P1^3; //设置方波P1.3输出-->个位数
unsigned char code table[]={0x40, 0xf9, 0x24, 0x30,
0x19, 0x12, 0x02, 0x78,
0x00, 0x10, 0x08, 0x03,
0x46, 0x21, 0x06, 0x0e};
uint num=60;
void delay(uint z);
void init();
void timeover(void);
void main(){ //r2为真时LED十位数亮,r3为真时LED个位数亮
init();
TR0=1; //启动定时
while(1){
r2=0;
r3=1;
P0=table[num%10];
delay(5000);
r3=0;
r2=1;
P0=table[num/10];
delay(5000);
if(TF0){
timeover();
TF0=0;
}
}
}
void init()
{
//uint i;
TMOD=0x01; //设置定时器/计数器的工作方式1
TH1=0x59; //设置初值为高字节 //关于频率的计算,开始算出来的默认值是
//23870us,经过进一步的计算得出23000的初值
TL1=0xd8; //设置初值为低字节
IE=0x00; //禁止中断
}
void delay(uint z){
while(z--){_nop_();}
}
void timeover(void){
TR0=0;
TH1=0x59;
TL1=0xd8;
num--;
if(num == -1)
num = 60;
TR0=1;
}
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void init();
void action();
void delay(uint);
void time0over(void);
uint num=60;
sbit rect_wave2=P1^2;
sbit rect_wave3=P1^3;
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main()
{
init();
while(1)
{
rect_wave2=0; //打开0端
rect_wave3=1; //关闭1端 表示个位数字的变化
P0=table[num%10];
delay(3000); time0over();
}
}
void action()
{
rect_wave2=0; //打开0端
rect_wave3=1; //关闭1端 表示个位数字的变化
P0=table[num%10];
delay(5000);
TR0=1;
rect_wave3=0;
rect_wave2=1;
P0=table[num/10]; //关闭2端 表示十位数字的变化
delay(5000);
}
void timer1int(void) interrupt 1 //采用定时中断计数0
{
TR0=0;
//init();
action();
TR0=1;
}
void time0over(void){
TH1=0x59;
TL1=0xd8;
num--;
if(num == -1)
num = 60;
}
void init() //寄存器初始化
{
TMOD=0x01; //设置定时器/计数器的工作方式1(16位)
IE=0x82; //启动中断EA,用定时器0----开启定时中断?
TCON=0x20; //开启全部定时标示为TF1 TR1 TF0 TR0
TH0=0x59; //设置初值为高字节
TL0=0xd8; //
}
void delay(uint i){
while(i--)
{_nop_();_nop_();_nop_();_nop_();_nop_(); }
}
就是这个不知道如何去改 如果用这段代码 不知怎的 就定在60 不动啦