导航:首页 > 操作系统 > 单片机led点阵做模拟时钟

单片机led点阵做模拟时钟

发布时间:2023-03-25 12:06:33

㈠ 谁能告诉我51单片机简单的led数码管时钟程序 24小时制的(c语言版的)

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uchar time;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0; //位码
P0=(tab[shi/10]); //段码
delay(2);
P2=1;
P0=(tab[shi%10]);
delay(2);
P2=2; //位码
P0=0x40; //段码
delay(2);
P2=3; //位码
P0=(tab[fen/10]); //段码
delay(2);
P2=4;
P0=(tab[fen%10]);
delay(2);
P2=5; //位码
P0=0x40; //段码
delay(2);
P2=6; //位码
P0=(tab[miao/10]); //段码
delay(2);
P2=7;
P0=(tab[miao%10]);
delay(2);

}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{

if(time==20)
{
time=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}

}

}
display(shi,fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}

/*还有什么不明白继续追加*/

㈡ 求助单片机汇编语言:在LED上实现时钟功能

程序就不写了,因为每个人有每个人的写作风格,我给你的程序,你不一定能理解我的思路,拿一个现成的程序让你看,那最终不是你自己的,所以要让自己弄懂,就给你一个思路,你就把程序做出来,那才是自己的东西,这里就给你一个思路

把0……9的数码显示代码存在ROM里,用tab:db……(字型码)来存,做一段1秒的定时程序,在程序的初始化时要做几个计数器,分别对时分秒计数,先从秒开始,设初始值为10,然后是“分”60个,最后一个是“时”也是60,开中断,启动1秒定时器,一秒到了以后,把1的字型码发送到串行口,然后秒计数器减1,在启动1秒定时,到了后,把2字型码发送出去……直到减为0,个位进1,将秒的“十”位字型码发送到出去,分计数器从60开始减计数,这里要注意,定时器不能停,要一直的循环执行1秒定时,采用中断方式,分进位后,再对时计数器减计数,就象这样,不停的减计数,直至溢出后将相应的代码发送出去,基本思路就是这样,关键的就是几个计数器的控制,要主要完成了一个周期后,要重新赋值

㈢ 求一段用51单片机来实现60个led灯循环点亮的程序,没过一秒点亮一盏(就是模拟时钟的秒针)

51单片机来实现60个led灯循环点亮的程序://************************************汇编程序:
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data count=0;
bit flag=0;
//*********主函数*****************
void main(void)
{
uchar i=0,k=0xfe;
TMOD=0x01;
TH0=0x4c;TL0=0x00;//定时50ms
EA=1;ET0=1;TR0=1;
while(1)
{
if(flag==1){k=k<<1|0x01;flag=0;i++;}
if(i==8){i=0;k=0xfe;}
P1=k;
}
}
//*********中断函数*****************//0111 1111
void dy1s(void) interrupt 1 using 1
{
TH0=0x4c;TL0=0x00;//定时50ms
count++;
if(count==20){flag=1;count=0;} //1s到了
}。C语言程序编写。
void main() { P1=0XFF; /*定义初始状态为全灭*/while(1) { delay(2000); P1=0X7e; delay(2000); P1=0Xbd; delay(2000);P1=0Xdb;delay(2000); P1=0Xe7; delay(2000); P1=0Xdb;delay(2000); P1=0Xbd;delay(2000); P1=0X7e; delay(2000); P1=0XFF; /********此循环使得发光二极管按照07,16,25,34,43,52,61,70的顺序循环交替两两点亮*******/} /*end while*/}/*end main*/

㈣ 用proteus仿真做LED点阵屏幕时钟的时候,时间不真实,过七八秒,秒位才跳一次,CPU过载,请问怎么解决

是用延时子程序计时得到的秒吗?这样就不准确,最好采用定时器并中断的方扒纯式还比较准点,但是仿真运行,这时间肯定是不准裂型的,与电脑的性能有关,如果电脑CPU的频度不高,会影响仿真春源咐速度的。如果是采用定时器及中断方式,就要优化程序了。

㈤ 用51单片机做一个LED显示的电子钟

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="ME-400-A clock";
uchar code table1[]=" --:--:-- ";
uchar code table2[]="ALL:00:00:-- ";
uchar code table3[]=" ";
uchar clk_time[3]; //秒,分,时寄存器初始值
sbit T_RST=P2^2;//ds1302-5
sbit T_IO=P2^3;//ds1302-6
sbit T_CLK=P2^4;//ds1302-7
sbit en=P2^5; //参照LCD1602说明档,使能信号
sbit rw=P2^6; //。。。。。。。。,读写信号端(输入高电频时为读,低电为写)
sbit rs=P2^7; //。。。。。。。。,数据/命令选择端(H/L)
sbit led=P1^0;
sbit la=P1^1;
sbit wela=P1^2;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit up=P3^3;
sbit down=P3^4;
sbit set=P3^2;
sbit did=P1^4;
uchar num,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg,b,clock_s,clock_g;
char hour,mie,sei,c,nhour,nmie,shour,smie;
/******************DS1302:写入操作(上升沿)*********************/

void write_byte(uchar da)
{
uchar i;
ACC=da;
for(i=8;i>0;i--)
{
T_IO=ACC0;
T_CLK=0;
T_CLK=1;
ACC=ACC>>1;
}
}

/******************DS1302:读取操作(下降沿)*****************/
uchar read_byte(void)
{
uchar i;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
T_CLK = 1;
T_CLK = 0;
ACC7 = T_IO;
}
return(ACC);

}

/******************DS1302:写入数据(先送地址,再写数据)***************************/
void write_1302(uchar addr,uchar da)
{
T_RST=0; //停止工作
T_CLK=0; //只有在CLK为低电平时,才能将RST置为高电平,然后才能传输数据
T_RST=1; //重新工作
write_byte(addr); //写入地址

write_byte(da);
T_RST=0;
T_CLK=1;
}

/******************DS1302:读取数据(先送地址,再读数据)**************************/
uchar read_1302(uchar addr)
{
uchar temp;
T_RST=0; //停止工作
T_CLK=0;
T_RST=1; //重新工作
write_byte(addr); //写入地址
temp=read_byte();
T_RST=0;
T_CLK=1; //停止工作
return(temp);
}

/***********************延时程序=a*1ms**************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void fn()
{
did=0;
delay(120);
did=1;
delay(120);
did=0;
delay(120);
did=1;
delay(120);
did=0;
delay(120);
did=1;
delay(120);
did=0;
delay(320);
did=1;
delay(400);
}
void write_com(uchar com)
{
led=1;
wela=1;
P0=0xff;
delay(1);
led=0;
wela=0;
P0=0x00;
la=1;
delay(1);
la=0;
rs=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}

void write_data(uchar date)
{
led=1;
wela=1;
P0=0xff;
delay(1);
led=0;
wela=0;
P0=0x00;
la=1;
delay(1);
la=0;
rs=1;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
void morning()
{ shour=clock_ss*10+clock_sg;
smie=clock_fs*10+clock_fg;
if(b==0)
{
if(nhour==shour)
{
if(smie>=nmie)
{
fn();
}
}
}

}
void init()
{
b=0;
P0=0xff;
delay(5);
led=1;
delay(5);
P0=0xff;
led=0;
la=0;
wela=1;
delay(5);
wela=0;//关ME-400开发板数码管
nhour=0;
nmie=0;
rw=0;
en=0;
write_com(0x38);//设置液晶
write_com(0x0c);//设光标等
write_com(0x06);//写一个字符地址指针加1且光标加1
write_com(0x01);//清屏
write_com(0x80);//设置s地址指针
}
void display(uchar add,date)
{
if(b==0)
{
clock_ms=clk_time[0]/ 16; clock_mg=clk_time[0]%16;
led=0;
clock_fs=clk_time[1]/ 16; clock_fg=clk_time[1]%16;
led=0;
clock_ss=clk_time[2]/ 16; clock_sg=clk_time[2]%16;
write_com(0x80+0x44);
write_data(0x30+clock_ss);
write_com(0x80+0x45);
write_data(0x30+clock_sg);
write_com(0x80+0x47);
write_data(0x30+clock_fs);
write_com(0x80+0x48);
write_data(0x30+clock_fg);
write_com(0x80+0x4a);
write_data(0x30+clock_ms);
write_com(0x80+0x4b);
write_data(0x30+clock_mg);

}
if(b!=0)
{
clock_s=date/ 10; clock_g=date%10;
write_com(0x80+0x40+add);
write_data(0x30+clock_s);
write_data(0x30+clock_g);
}

}
void key()
{
uchar clock_s1, clock_s2, clock_f1, clock_f2;
rw=0;

if(set==0)
{
delay(10);
if(set==0)
{
did=0;
delay(10); did=1;
b++;

}
while(!set);

if(b==1)
{
hour=clock_ss*10+clock_sg;
mie=clock_fs*10+clock_fg;
write_com(0x80+0x45);
write_com(0x0f);

}
if(b==2)
{
write_com(0x80+0x48);

}
if(b==3)
{
write_com(0x80+0x40);
for(num=0;num<13;num++)
{
write_data(table2[num]);

}

write_com(0x80+0x45); display(4,nhour);write_com(0x80+0x45);
}
if(b==4)
{

write_com(0x80+0x48);
display(7,nmie); write_com(0x80+0x48);

}
if(b==5)
{
write_com(0x80+0x40);
for(num=0;num<4;num++)
{
write_data(table3[num]);

}
write_com(0x80+0x45);
write_com(0x0c);
b=0;
clock_s1=hour/10;//十进制转十六进制
clock_s2=hour%10;//十进制转十六进制
clock_s1=clock_s1&0xff;//十进制转十六进制
clock_s2=clock_s2&0xff;//十进制转十六进制
clock_s1<<=4;//十进制转十六进制
clock_s1=clock_s1|clock_s2;//十进制转十六进制

clock_f1=mie/10;//十进制转十六进制
clock_f2=mie%10;//十进制转十六进制
clock_f1=clock_f1&0xff; //全1出1 与运算
clock_f2=clock_f2&0xff;//十进制转十六进制
clock_f1<<=4;//十进制转十六进制
clock_f1=clock_f1|clock_f2;//十进制转十六进制

write_1302(0x8e,0x00); //WP=0 写操作
write_1302(0x80,0x00);//写秒
write_1302(0x82,clock_f1);//写分
write_1302(0x84,clock_s1);//写时
write_1302(0x86,0x14);//写日
write_1302(0x88,0x02);//写月
write_1302(0x8a,0x06);//写星期
write_1302(0x8c,0x09);
write_1302(0x8e,0x80); //WP=1 写保护

}
}
if(b!=0)
{
if(up==0)
{
delay(10);
if(up==0)
{
did=0;
delay(10);
did=1;
while(!up);
if(b==1)
{

hour++;
if(hour>=24)
{
delay(1);
hour=0;
}
display(4,hour);
write_com(0x80+0x45);

}
if(b==2)
{
mie++;

if(mie>=60)
{
mie=0;
}
display(7,mie);
write_com(0x80+0x48);
}
if(b==3)
{

nhour++;
if(nhour>=24)
{
delay(1);
nhour=0;
}
display(4,nhour);
write_com(0x80+0x45);

}
if(b==4)
{
nmie++;

if(nmie>=60)
{
nmie=0;
}
display(7,nmie);
write_com(0x80+0x48);
}
}

}

if(down==0)
{
delay(10);
if(down==0)
{
did=0;
delay(10);
did=1;
while(!down);
if(b==1)
{
hour--;
if(hour<0)
{

hour=23;
}
display(4,hour);
write_com(0x80+0x45);

}
if(b==2)
{
mie--;
if(mie<0)
{
mie=59;
}
display(7,mie);
write_com(0x80+0x48);
}
if(b==3)
{
nhour--;
if(nhour<0)
{

nhour=23;
}
display(4,nhour);
write_com(0x80+0x45);

}
if(b==4)
{
nmie--;
if(nmie<0)
{
nmie=59;
}
display(7,nmie);
write_com(0x80+0x48);
}

}

}
}
}

void main()
{
uchar temp=0x80;
uchar i;
init();
for(num=0;num<14;num++)
{
write_data(table[num]);
delay(100);
}

write_com(0x80+0x40); // 设置数据地址指针为0X40
for(num=0;num<15;num++)
{
write_data(table1[num]);

}
/*for(num=0;num<16;num++)
{
write_com(0x18);
delay(20);
}*/
write_1302(0x8e,0x00);
write_1302(0x90,0xa4);
write_1302(0x8e,0x80);
while(1)
{

if(b==0)

{ temp=0x81;
for(i=0;i<3;i++)
{
clk_time[i]=read_1302(temp);
temp+=2;
}
display(0x4b,0x00);
}

morning();
key();

}
}

1602做的时钟

㈥ 如何做一个单片机电子时钟

这个很简单啊,两种思路:1,用单片机定时器来做,优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块(1602液晶比较好);缺点是:定时不是很准,跑的时间长了会有误差,而且主要是程序,要写很多,不过程序不是很难。2,用时钟芯片,一般都用DS1302,还需要单片机最小系统和显示模块,优点是:定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序相对简单。缺点是:外围电路比前者相对复杂一点。如果想做个实际的东西拿来用,建议使用第二种方法,如果是想锻炼自己的编程能力的话,选第一种吧。祝成功!

㈦ 单片机制作电子时钟用DS1302做时钟源,一个16X16LED点阵显示屏滚动显示,可通过按键调节时间。

这要是仿真,还省点事。要做实物,费时了,用万能电路板焊能快些。

㈧ 51单片机多功能LED点阵显示数字时钟

数字时钟
这段程序是在PRTUES上完全好使
你可以根据 程序自己在PROTUES上画图

#include<reg51.h>
#define uint unsigned int
char code tab[]=;
char code table[]=;
sbit an=P2^5;
sbit wei=P2^6;
sbit button1=P1^0;
sbit button2=P1^1;
sbit button3=P1^2;
sbit button4=P1^3;
sbit button5=P1^4;
sbit button6=P1^5;
sbit button7=P1^6;
sbit button8=P1^7;
void delay(uint z);
void start();
void display();
static char a,b,c,d,k,e,f,g,h;
static char num1,num2,num3,num4;
void main()
{ start();
while(1)

if(button2==0)
if(button3==0)
if(button4==0)
{ delay(10);
if(button4==0)
}}
while(button4==0)
}
if(button5==0)
{ delay(10);
if(button5==0)
}
while(button5==0)
}
if(button6==0)
{ delay(10);
if(button6==0)
}
while(button6==0)
}
if(button7==0)
{delay(10);
if(button7==0)
{num3--;
if(num3<0)
}
while(button7==0)
}
if(button8==0)
{delay(10);
if(button8==0)

while(button8==0)
}
display();
} }

void start()
{ EA=1;
TMOD=0x01;ET0=1;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;}

void delay(uint z )
{ uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);}

void timer1() interrupt 1
{ TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
k++;
if(k==2) //总忘k把清零
{k=0;num1++;
if(num1==100)
{num1=0;num2++;
if(num2==60){num2=0;num3++;
if(num3==60){num3=0;num4++;
if(num4==24)}
}} }}

void display()
{a=num1/10;b=num1%10;c=num2/10;d=num2%10;
e=num3/10;f=num3%10;g=num4/10;h=num4%10;
wei=1;P0=0x80;wei=0;
an=1;P0=tab[b];an=0;delay(1);
P0=0x00;
wei=1;P0=0x40;wei=0;
an=1;P0=tab[a];an=0;delay(1);
P0=0x00;
wei=1;P0=0x20;wei=0;
an=1;P0=tab[d];an=0;
an=1;P0=table[d];an=0;delay(1);
P0=0x00;
wei=1;P0=0x10;wei=0;
an=1;P0=tab[c];an=0;delay(1);
P0=0x00;

wei=1;P0=0x08;wei=0;
an=1;P0=table[f];an=0;delay(1);
an=1;P0=tab[f];an=0;delay(1);
P0=0x00;
wei=1;P0=0x04;wei=0;
an=1;P0=tab[e];an=0;delay(1);
P0=0x00;
wei=1;P0=0x02;wei=0;
an=1;P0=tab[h];an=0;
an=1;P0=table[h];an=0;delay(1);
P0=0x00;
wei=1;P0=0x01;wei=0;
an=1;P0=tab[g];an=0;delay(1);
P0=0x00;

}

㈨ 利用AT89C51单片机设计简易电子钟(六位),通过8位LED数码管实现时间显示;系统可以通过三个按键实现时间


程序设计思路:1.利用单片机内部定时器作为计时器,调用timer函数;2、设计一套按键子程序;(3)设计一套数码显示管子程序。下列提供一套程序供参考。


#include<iom16v.h>

#include <macros.h>

#define uchar unsigned char

#define uint unsigned int


const uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9对应字符

const uchar key_value[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

uchar data[4]={0}; //显示初始值为0

uint count=0; //初始计数值为0

uchar keynum;



void port_init() //端口初始化函数

{DDRA=0XFF; //端口A为推挽1输出

PORTA=0XFF;

PORTB=0XFF; //端口B为推挽1输出

DDRB=0XFF;

DDRC=0XFF; //端口C为不带上拉电阻的输入

PORTC=0XFF;

DDRD=0XFF; //端口D低4位为输出

PORTD=0X0F;

}



void delay(uint j) //延时函数

{uint k;

while(j--)

{for(k=1000;k>0;k--) ;}

}



void display(uchar *p) //显示函数

{uchar i,sel=0x01;

for(i=0;i<4;i++)

{PORTA=sel; //选通最右边的数码管

PORTB=table[p[i]]; //送字型码

delay(1);

sel=sel<<1; //左移一位

}

}



uchar get_key(void)

{if((PIND&0X0F)!=0X0F) delay(3);

{

PORTD=0XEF;

switch(PIND&0X0F)

{case 0x0e: keynum=key_value[0];break;

case 0x0d: keynum=key_value[4];break;

case 0x0b: keynum=key_value[8];break;

case 0x07: keynum=key_value[12];break;

default:break;

}

PORTD=0xdf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[1];break;

case 0x0d:keynum=key_value[5];break;

case 0x0b:keynum=key_value[9];break;

case 0x07:keynum=key_value[13];break;

default:break;

}


PORTD=0xbf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[2];break;

case 0x0d:keynum=key_value[6];break;

case 0x0b:keynum=key_value[10];break;

case 0x07:keynum=key_value[14];break;

default:break;

}

PORTD=0x7f;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[3];break;

case 0x0d:keynum=key_value[7];break;

case 0x0b:keynum=key_value[11];break;

case 0x07:keynum=key_value[15];break;

default:break;

}

while((PIND&0x0f)!=0x0f);

}


return keynum;

}


void process(uint i,uchar *q) //拆分BCD码函数,显示千、百、十、个位

{ q[0]=i/1000;

i=i%1000;

q[1]=i/100;

i=i%100;

q[2]=i/10;

i=i%10;

q[3]=i;

}


void main(void)

{port_init();

PORTB=0xff;

PORTA=0X00;

delay(50);

PORTA=0xff;

while(1)

{get_key();

count=keynum;

process(count,data);

display(data);

}

}

㈩ 谁有proteus LED点阵时钟仿真,最好proteus图形,单片机是c51的哦,程序是c语言的哦急急急!!!

#include<reg51.h>

unsignedcharseven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90};

unsignedcharflash,mode=0;

charmin=50,hour=12,hour_rom,min_rom,sec=25;

unsignedcharj,k;

unsignedinti;

unsignedcharkey_set_s,key_up_s,key_down_s,key_reset_s;

sbitP0_7=P0^7;

sbitkey_set=P3^4;

sbitkey_up=P3^5;

sbitkey_down=P3^6;

sbitkey_reset=P3^7;

sbitbuzzer=P1^0;

bitdop,bb;//声明

voiddelay(unsignedintx)//延时

{

while(x--);

}

voidtimer0_isr(void)interrupt1//中断枯瞎基服务函数

{

TH0=0xf8;//为65535-2000=63535转化为16进制取高八位

TL0=0x2f;//取低八位

i++;

bb=!bb;

if(i>=250)//半秒,五百一秒

{

i=0;

k++;

flash=~flash;

dop=!dop;

}

if(k>=2)//大于二归零

{

k=0;

sec++;

}

if(sec>=60)//秒

{

sec=0;

min++;

}

if(min>=60)//分

{

min=0;

hour++;

}

if(hour>=24)//小时

hour=0;

P0=0xff;//P0初始化为全111111111

if(mode==0)//正常显示

{

switch(j)//控制语句

{

case0:P0=seven_seg[sec%10];P2=0xfe;break;//秒个位

case1:P0=seven_seg[sec/10];P2=0xfd;break;//秒十位

case2:P0=seven_seg[min%10];P0_7=dop;P2=0xfb;break;

case3:P0=seven_seg[min/10];P2=0xf7;break;

case4:P0=seven_seg[hour%10];P0_7=dop;P2=0xef;break;//dop为小数点

case5:P0=seven_seg[hour/10];P2=0xdf;break;

}

}

////////////////////

if(mode==1)//模式一C1状态

{

switch(j)

{

case0:P0=seven_seg[min%10];P2=0xfe;break;

case1:P0=seven_seg[min/10];P2=0xfd;break;

case2:P0=seven_seg[hour%10]|没谨flash;P2=0xfb;break;//flash为闪烁

case3:P0=seven_seg[hour/10]|flash;P2=0xf7;break;

case4:P0=seven_seg[1];P2=0xef;break;//1为C1状态

case5:P0=0xc6;P2=0xdf;break;//0xc6为显示C

}

}神闷

////////////////////

if(mode==2)//模式二C1状态

{

switch(j)

{

case0:P0=seven_seg[min%10]|flash;P2=0xfe;break;

case1:P0=seven_seg[min/10]|flash;P2=0xfd;break;

case2:P0=seven_seg[hour%10];P2=0xfb;break;

case3:P0=seven_seg[hour/10];P2=0xf7;break;

case4:P0=seven_seg[1];P2=0xef;break;

case5:P0=0xc6;P2=0xdf;break;

}

}

////////////////////

if(mode==3)//模式三C2状态

{

switch(j)

{

case0:P0=seven_seg[min_rom%10];P2=0xfe;break;

case1:P0=seven_seg[min_rom/10];P2=0xfd;break;

case2:P0=seven_seg[hour_rom%10]|flash;P2=0xfb;break;

case3:P0=seven_seg[hour_rom/10]|flash;P2=0xf7;break;

case4:P0=seven_seg[2];P2=0xef;break;

case5:P0=0xc6;P2=0xdf;break;

}

}

////////////////////

if(mode==4)//模式四C2状态

{

switch(j)

{

case0:P0=seven_seg[min_rom%10]|flash;P2=0xfe;break;

case1:P0=seven_seg[min_rom/10]|flash;P2=0xfd;break;

case2:P0=seven_seg[hour_rom%10];P2=0xfb;break;

case3:P0=seven_seg[hour_rom/10];P2=0xf7;break;

case4:P0=seven_seg[2];P2=0xef;break;

case5:P0=0xc6;P2=0xdf;break;

}

}

j++;

if(j>=6)

j=0;

}

voidkey(void)//调用开关函数

{

////////////////

if(key_set==0)//设置

{

delay(300);

if(key_set==0)

key_set_s=1;

}

if(key_set==1&&key_set_s==1)

{

mode++;

if(mode>=5)

mode=1;

key_set_s=0;

}

/////////

if(key_up==0)//上调

{

delay(300);

if(key_up==0)

key_up_s=1;

}

if(key_up==1&&key_up_s==1)

{

if(mode==1)hour++;

if(mode==2)min++;

if(mode==3)hour_rom++;if(hour_rom>=24)hour_rom=0;

if(mode==4)min_rom++;if(min_rom>=60)min_rom=0;

key_up_s=0;

}

/////////////////

if(key_down==0)//下调

{

delay(300);

if(key_down==0)

key_down_s=1;

}

if(key_down==1&&key_down_s==1)

{

if(mode==1)hour--;if(hour<0)hour=23;

if(mode==2)min--;if(min<0)min=59;

if(mode==3)hour_rom--;if(hour_rom<0)hour_rom=23;

if(mode==4)min_rom--;if(min_rom<0)min_rom=59;

key_down_s=0;

}

/////////////////

if(key_reset==0)//复位

{

delay(300);

if(key_reset==0)

key_reset_s=1;

}

if(key_reset==1&&key_reset_s==1)

{

key_reset_s=0;

mode=0;

}

}

voidtimer0_init(void)//timero初始化函数

{

TMOD=0x01;//方式1

TH0=0xf8;

TL0=0x2f;

EA=1;//中断开关

ET0=1;//中断小开关

TR0=1;//开始计数

}

voidmain(void)//主函数

{

timer0_init();

while(1)

key();

{

if(hour==hour_rom&&min==min_rom)

buzzer=bb;//buzzer为蜂鸣器

}

}

阅读全文

与单片机led点阵做模拟时钟相关的资料

热点内容
python闹钟怎么打 浏览:684
虚拟主机服务器有什么区别 浏览:831
算法与程序的奥秘章节检测 浏览:377
找pdf 浏览:527
与服务器连接断开如何处理 浏览:831
服务器维修预计十分钟什么意思 浏览:168
黑马程序员主打教学是什么 浏览:39
python九乘法表怎么编写 浏览:972
思维方式pdf 浏览:654
tcc社区app怎么注册 浏览:937
央视网下载加密 浏览:452
命令行访问服务器 浏览:36
梁加密区箍筋是不是必须封闭箍筋 浏览:760
在百度地图如何定位服务器地址 浏览:570
单片机计数器中断 浏览:296
哈啰安装文件夹名称 浏览:294
解压视频声控用杯子玩泡沫 浏览:740
19年的普通安卓机怎么样了 浏览:604
如何在app上刷导游题目 浏览:861
子弹解压视频大全 浏览:323