用LED灯显示倒计时10秒 51单片机C语言编程 跪求
2013-06-15
展开全部
你的分不好拿啊= =!!!!
#include<reg51.h>
#define uchar unsigned char//宏定义
#define uint unsigned int
sbit dula=P2^6; //段控制位
sbit wela=P2^7; //位控制位
uchar miao,fen,aa,n1,n2,n3,n4;
uchar code table[]={ //显示编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z); //延时程序声明
void init(void);//初始化程序声明
void display(uchar n1 ,uchar n2,uchar n3,uchar n4); //显示程序声明
void main() //主程序
{
init(); //调用初始化程序
while(1) //进入大循环
{
if(aa==20) //判断是否到了1S
{
miao++; //秒数加1
if(miao==60) //判断是否到了60秒
{
miao=0; //秒数清0
fen++; //分数加1
if(fen==60) //判断是否到了60分
{
fen=0; //分数到60则清0
}
n1=fen/10; //第一个数码管显示分的十位
n2=fen%10; //第二个数码管显示分的个位
n3=miao/10; //第三个数码管显示秒的十位
n4=miao%10; //第四个数码管显示秒的个位
}
display(n1,n2,n3,n4);
}
}
}
void delay(uint z) //延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar n1 ,uchar n2,uchar n3,uchar n4)
{
dula=1; //开段选
P0=table[n1]; //送分的十位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xfe; //选通分的十位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
dula=1; //开段选
P0=table[n2]; //送分的个位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xfd; //选通分的个位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
dula=1; //开段选
P0=table[n3]; //送秒的十位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xfb; //选通秒的十位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
dula=1; //开段选
P0=table[n4]; //送秒的个位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xf7; //选通秒的个位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
}
void init(void)
{
}
void timer0(void) interrupt 1 using 1
{
TH0=(65536-50000)/256; //求模
TL0=(65536-50000)%256; //求余
aa++;
}
#include<reg51.h>
#define uchar unsigned char//宏定义
#define uint unsigned int
sbit dula=P2^6; //段控制位
sbit wela=P2^7; //位控制位
uchar miao,fen,aa,n1,n2,n3,n4;
uchar code table[]={ //显示编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z); //延时程序声明
void init(void);//初始化程序声明
void display(uchar n1 ,uchar n2,uchar n3,uchar n4); //显示程序声明
void main() //主程序
{
init(); //调用初始化程序
while(1) //进入大循环
{
if(aa==20) //判断是否到了1S
{
miao++; //秒数加1
if(miao==60) //判断是否到了60秒
{
miao=0; //秒数清0
fen++; //分数加1
if(fen==60) //判断是否到了60分
{
fen=0; //分数到60则清0
}
n1=fen/10; //第一个数码管显示分的十位
n2=fen%10; //第二个数码管显示分的个位
n3=miao/10; //第三个数码管显示秒的十位
n4=miao%10; //第四个数码管显示秒的个位
}
display(n1,n2,n3,n4);
}
}
}
void delay(uint z) //延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar n1 ,uchar n2,uchar n3,uchar n4)
{
dula=1; //开段选
P0=table[n1]; //送分的十位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xfe; //选通分的十位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
dula=1; //开段选
P0=table[n2]; //送分的个位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xfd; //选通分的个位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
dula=1; //开段选
P0=table[n3]; //送秒的十位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xfb; //选通秒的十位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
dula=1; //开段选
P0=table[n4]; //送秒的个位
dula=0; //关段选
P0=0xff; //消隐
wela=1; //开位选
P0=0xf7; //选通秒的个位
wela=0; //关位选
P0=0xff; //消隐
delay(1); //延时
}
void init(void)
{
}
void timer0(void) interrupt 1 using 1
{
TH0=(65536-50000)/256; //求模
TL0=(65536-50000)%256; //求余
aa++;
}
奥蕾达
2024-11-14 广告
2024-11-14 广告
如果说原理的话,液晶是起到一个开关的作用。好比水龙头控制水量,液晶控制着光的通过量。 1 A:透明的不是液晶,而是整个显示系统。液晶显示器中的液晶显示系统在未浮花第拘郢饺电邪钉矛通电时是透明的(而且是Normaly White模式的)。 2...
点击进入详情页
本回答由奥蕾达提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询