单片机控制流水灯 数码管显示时间 蜂鸣器报警
2011-10-10 17:30
549 查看
#include<AT89x52.h>
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xb0};
sbit L1=P2^7;
sbit clk=P2^0;
sbit AB=P2^1;
sbit SA=P2^2;//数码管一的com端
sbit SB=P2^3;//数码管二的com端
sbit SC=P2^4;
sbit SD=P2^5;
void delay2(void)
{
unsigned char i,j,k;
for(i=10;i>0;i--)
for(j=10;j>0;j--)
for(k=20;k>0;k--);
}
void delay(void)
{
unsigned char i,j,k;
for(i=21;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void setTable(char num)
{
unsigned char c;
for(c=0;c<8;c++)
{
clk=0;
AB=num&0x01;
num=num>>1;
clk=1;
}
}
void Light(void)
{
unsigned char a,b,c,j,x,y,z,aa;
for(c=0;c<10;c++)
{
for(b=0;b<10;b++)
{
for(z=0;z<10;z++)
{
for(j=0;j<10;j++)
{
for(a=0;a<90;a++)
{ //千位上的数码管显示数字
setTable(table[c]);
SA=0;
SB=1;
SC=1;
SD=1;
delay2();
//百位上的数码管显示数字
setTable(table[b]);
SB=0;
SC=1;
SD=1;
SA=1;
delay2();
//十位上的数码管显示数字
setTable(table[z]);
SC=0;
SD=1;
SB=1;
SA=1;
delay2();
//个位上的数码管显示数字
setTable(table[j]);
SD=0;
SC=1;
SB=1;
SA=1;
delay2();
}
}
}
}
}
}
void main(void)
{
while(1)
{
Light();
/* x=0xfe;
L1=0;//报警器开始响
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现一行流水灯逐个闪亮
{
P1=x;
delay();
x=x*4;//左移两位
x=x|0x03;
}
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现后三排两两依次变量
{
P1=x;
delay();
x=x/4;//右移两位
x=x|0x03;
}
L1=0;
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现后三排两两依次熄灭
{
P1=x;
delay();
x=x*4;//右移两位
x=x|0x03;
}
L1=0;
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现前三排两两依次变亮
{
P1=x;
delay();
x=x*4;
x=x|0xc0;
}
L1=0;
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现前三排两两依次熄灭
{
P1=x;
delay();
x=x/4;
x=x|0xc0;
}
L1=0;
delay();
L1=1;
delay();
x=0x7f;
for(y=0;y<4;y++)
{
P1=x;
delay();
x=x/4;
x=x|0xc0;
}*/
}
}
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xb0};
sbit L1=P2^7;
sbit clk=P2^0;
sbit AB=P2^1;
sbit SA=P2^2;//数码管一的com端
sbit SB=P2^3;//数码管二的com端
sbit SC=P2^4;
sbit SD=P2^5;
void delay2(void)
{
unsigned char i,j,k;
for(i=10;i>0;i--)
for(j=10;j>0;j--)
for(k=20;k>0;k--);
}
void delay(void)
{
unsigned char i,j,k;
for(i=21;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void setTable(char num)
{
unsigned char c;
for(c=0;c<8;c++)
{
clk=0;
AB=num&0x01;
num=num>>1;
clk=1;
}
}
void Light(void)
{
unsigned char a,b,c,j,x,y,z,aa;
for(c=0;c<10;c++)
{
for(b=0;b<10;b++)
{
for(z=0;z<10;z++)
{
for(j=0;j<10;j++)
{
for(a=0;a<90;a++)
{ //千位上的数码管显示数字
setTable(table[c]);
SA=0;
SB=1;
SC=1;
SD=1;
delay2();
//百位上的数码管显示数字
setTable(table[b]);
SB=0;
SC=1;
SD=1;
SA=1;
delay2();
//十位上的数码管显示数字
setTable(table[z]);
SC=0;
SD=1;
SB=1;
SA=1;
delay2();
//个位上的数码管显示数字
setTable(table[j]);
SD=0;
SC=1;
SB=1;
SA=1;
delay2();
}
}
}
}
}
}
void main(void)
{
while(1)
{
Light();
/* x=0xfe;
L1=0;//报警器开始响
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现一行流水灯逐个闪亮
{
P1=x;
delay();
x=x*4;//左移两位
x=x|0x03;
}
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现后三排两两依次变量
{
P1=x;
delay();
x=x/4;//右移两位
x=x|0x03;
}
L1=0;
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现后三排两两依次熄灭
{
P1=x;
delay();
x=x*4;//右移两位
x=x|0x03;
}
L1=0;
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现前三排两两依次变亮
{
P1=x;
delay();
x=x*4;
x=x|0xc0;
}
L1=0;
delay();
L1=1;
delay();
for(y=0;y<4;y++)//实现前三排两两依次熄灭
{
P1=x;
delay();
x=x/4;
x=x|0xc0;
}
L1=0;
delay();
L1=1;
delay();
x=0x7f;
for(y=0;y<4;y++)
{
P1=x;
delay();
x=x/4;
x=x|0xc0;
}*/
}
}
相关文章推荐
- 利用单片机的数码管模拟时钟的显示时间
- 【蓝桥杯|单片机组】| 数码管与LED流水灯动态显示
- 用定时器0控制切换流水灯顺序,用外部中断控制两种数码管显示方式
- 单片机控制的数码管显示
- 52单片机串口控制AD转换显示到共阳极数码管
- 定时器0控制LED的闪烁时间;计数器1来控制数码管的显示
- 52单片机控制数码管显示数字
- 用定时器1控制四位数码管从6432减到6393保持住这个数值,同时用定时器0控制流水灯从上至下以500ms移动同时停止!!!然后流水灯全部闪烁2.4秒后熄灭!继而数码管上显示6666
- 一天:51单片机从入门到一个动态数码管显示数字控制
- 定时器控制数码管动态显示(单片机)
- Toast源码分析 控制显示时间
- 单片机C51 - 蜂鸣器(变频闪灯报警)
- 80C51 单片机 数码管显示循环数字
- 单片机数码管显示
- 单片机蜂鸣器控制程序和驱动电路
- 单片机:按键(使用中断)控制数码管的数字加减(c语言实现)
- 单片机远程控制步进电机、LED灯和蜂鸣器
- 【原创】基于FPGA的数码管的动态显示--ILOVEFPGA--动态流水般飘过
- sql语句控制时间的显示格式语句
- 控制DateTimePicker日期或时间的显示格式[C#]