标题:
流水灯,数码管同时工作
[打印本页]
作者:
潇潇123
时间:
2017-5-13 22:44
标题:
流水灯,数码管同时工作
请教怎么让流水灯和数码管同时工作,我弄的总只能显示其中一个…刚刚入门的小白,最好能推荐些有相关的详细教程的,谢谢谢谢!!
作者:
admin
时间:
2017-5-14 00:40
这是我八年前写的程序,你可以参考一下:
http://www.51hei.com/bbs/dpj-3011-1.html
作者:
潇潇123
时间:
2017-5-18 20:37
admin 发表于 2017-5-14 00:40
这是我八年前写的程序,你可以参考一下:
http://www.51hei.com/bbs/dpj-3011-1.html
这是我的程序,如果是想要在定时器定义一个变量用来延时 ,也可以的吗 大概要怎么弄啊
#include<reg52.h>
#include <intrins.h>
sbit key1=P1^0;
sbit key2=P1^1 ;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4; //第五个键盘调节分
sbit key6=P1^5;
typedef unsigned char u8;
typedef unsigned int u16;
u8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71,};// 段选
u8 smgduan1[16]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,};
u8 smgwei[8]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c}; //位选
u8 a[4];//保存时钟的数据
u8 sec,min;
void delay(u16 i)
{
while(i--);
}
void time0init() //定时器0初始化
{
TMOD=0X01;
TH0=0Xfc;
TL0=0X18; //1ms
TR0=1;
EA=1;
ET0=1;
}
void display()
{
u8 i;
a[0]=smgduan[sec%10];
a[1]=smgduan[sec/10];
a[2]=smgduan1[min%10];
a[3]=smgduan[min/10];
for(i=0;i<4;i++)
{
P0=a[i];
P2=smgwei[4-i];
delay(300); //不同的延时时间对数码管显示亮度会产生很大的影响,时间越短影响越大
}
}
//--声明全局函数--//
void Delay10ms(unsigned int c); //延时10ms
/*******************************************************************************
* 函 数 名 : abc
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
abc()
{
if(min==40)
{
unsigned char LED;
LED = 0x01; //0xfe = 1111 1110
while (1)
{
P0 = LED;
Delay10ms(50);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if (P0 == 0x00) //当它全灭的时候,重新赋值
{
LED = 0x01; // 0xfe = 1111 1110
}
}
}
}
/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
void keyscan()
{
if(key2==0)
{
delay(200);
if(key2==0)
{
delay(200);
min=0;
sec=0;
while (!key2);}
}
if(key1==0)
{
delay(200);
if(key1==0)
{
delay(200);
while (!key1);
TR0=~TR0;
}
}
if(key3==0)
{
delay(200);
if(key3==0)
{
delay(200);
sec +=10;
while(!key3);
}
}
if(key5==0)
{
delay(200);
if(key5==0)
{
delay(200);
min+=10;
while(!key5);}
if(min>=60)
{delay(200);
min=0;
sec=0;
while(!key5);}}
if(key6==0)
{
delay(200);
if(key6==0)
{
delay(200);
if(min>=10)
min-=10;
while(!key6);}
else
{delay(200);
min=0
sec=0;
while(!key6);}
}
if(key4==0)
{
delay(200);
if(key4==0)
{
delay(200);
if(sec>=10)
{delay(200);
sec-=10;
while(!key4);
}
else if(min>=1&&sec<=10)
{delay(200);
min-=1;
sec+=50;
while(!key4);
}
else if(min==0&&sec<=10)
{delay(200);
min=0;
sec=0;
while(!key4);
}
}
}
}
void main()
{
time0init();
while(1)
{ abc();
keyscan();
display();
}
}
void time0() interrupt 1
{
static u16 j;
TH0=0Xfc;
TL0=0X18; //1ms
j++;
if(j==1000) //1s
{
j=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
}
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1