導航:首頁 > 編程語言 > 單片機電子時鍾設計的程序

單片機電子時鍾設計的程序

發布時間:2023-08-11 20:12:06

Ⅰ 51單片機求這個時鍾的c語言程序

以下是四位數碼管可調時帶秒閃爍的c51單片機電子鍾程序(c語言)。

/**** 本程序中,晶振為12MHz, ****/
/**** 時間控制採用定時中斷控制方式。 ****/
/**** 模式和時間調整採用查詢方式。 ****/

#include<reg52.h>

sbit P20=P2^0; //分個位控制端
sbit P21=P2^1; //分十位控制端
sbit P22=P2^2; //時個位控制端
sbit P23=P2^3; //時十位控制端
sbit led=P2^7; //second display led

sbit key0=P3^0; //模式設置
sbit key1=P3^1; //加
sbit key2=P3^2; //減

unsigned char hour,min,sec,T50ms;
unsigned char modstate; //模式狀態

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段碼

void init(); //初始化子程序聲明
void delay500us(unsigned char X); //延時子程序聲明
void display(); //顯示子程序聲明
void display001(); //顯示子程序聲明
void display002(); //顯示子程序聲明
void keyscan(); //按鍵識別子程序聲明

void main()
{
init();
while(1)
{
keyscan();
}
}

void init() //初始化子程序
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
ET0=1;
EA=1;
TR0=1;
}

void delay500us(unsigned char X)
{
unsigned char i,j;
for(i=X;i>0;i--)
for(j=248;j>0;j--);
}

void timer0() interrupt 1 //timer0中斷服務子程序,定時時間為50ms,本程序加了10us的時間修正量
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;

T50ms++;
if(T50ms>=20)
{
T50ms=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)hour=0;
}
}
}
}

void display()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour/10];
P23=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour%10];
P22=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min/10];
P21=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min%10];
P20=0;
delay500us(5);

if(T50ms<=10)led=0;
if(T50ms>10)led=1;
}

void display001()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour/10];
P23=0;
delay500us(10);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour%10];
P22=0;
delay500us(10);
}

void display002()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min/10];
P21=0;
delay500us(10);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min%10];
P20=0;
delay500us(10);
}

void keyscan() //按鍵識別鍾程序
{
while(modstate==0)
{
display();
if(key0==0)
{
display();
if(key0==0)modstate++; //這兩句加在一起為延時10ms軟體防抖設計。
while(key0==0)display001(); //等待按鍵釋放。
}
}
//****************************************************************************//
while(modstate==1)
{
display001();
if(key0==0)
{
display001();
if(key0==0)modstate++; //這兩句加在一起為延時10ms軟體防抖設計。
while(key0==0)display002(); //等待按鍵釋放。
}

if(key1==0)
{
display001();
if(key1==0)
{
hour++;
if(hour>=24)hour=0;
while(key1==0)display001();
}
}
if(key2==0)
{
display001();
if(key2==0)
{
hour--;
if(hour>=24)hour=0;
while(key2==0)display001();
}
}
}
//****************************************************************************//
while(modstate==2)
{
display002();
if(key0==0)
{
display002();
if(key0==0)modstate=0; //這兩句加在一起為延時10ms軟體防抖設計。
while(key0==0)display(); //等待按鍵釋放。
}

if(key1==0)
{
display002();
if(key1==0)
{
min++;
if(min>=60)min=0;
while(key1==0)display002();
}
}
if(key2==0)
{
display002();
if(key2==0)
{
min--;
if(min>=60)min=0;
while(key2==0)display002();
}
}
}
}

Ⅱ 一個51單片機電子鍾程序,求詳細的解釋啊急急急!!!

#include <AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //定義顯示用的段碼
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定義顯示用的位碼
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0}; //定義顯示緩沖區
unsigned char dispbitcnt; //定義顯示的位

unsigned char second; //定義秒
unsigned char minite; //定義分鍾
unsigned char hour;//定義小時
unsigned int tcnt;//定義定時累加器
unsigned char mstcnt;//定義毫秒累加器

unsigned char i,j;

void main(void) //主函數
{
TMOD=0x02; //設置定時器工作模式
TH0=0x06; //設置初值
TL0=0x06;
TR0=1; //開定時器
ET0=1; //開定時器中斷
EA=1; //開總中斷

while(1)
{
if(P0_0==0) //判斷P00口的按鍵是否按下
{
for(i=5;i>0;i--)
for(j=248;j>0;j--);//延時消抖
if (P0_0==0) //判斷按鍵真的按下了
{
second++; //秒加1
if(second==60) //秒加到60?
{
second=0; //秒清零
}
dispbuf[0]=second%10; //取秒的個位放在顯示緩沖
dispbuf[1]=second/10; //取秒的十位放在顯示緩沖
while(P0_0==0); //等待,知道按鍵松開
}
}
if(P0_1==0) //p01的按鍵按下,設置分鍾,請參考秒的程序,一樣的
{
for(i=5;i>0;i--)
for(j=248;j>0;j--);
if(P0_1==0)
{
minite++;
if(minite==60)
{
minite=0;
}
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
while(P0_1==0);
}
}
if(P0_2==0) //p02的按鍵按下,設置小時,請參考秒的程序,一樣的
{
for(i=5;i>0;i--)
for(j=248;j>0;j--);
if(P0_2==0)
{
hour++;
if(hour==24)
{
hour=0;
}
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
while(P0_2==0);
}
}
}
}
void t0(void) interrupt 1 using 0 //定時器中斷函數
{
mstcnt++; //累加器加一
if(mstcnt==8) //計時滿8毫秒?
{
mstcnt=0; //累加器清零
P1=dispcode[dispbuf[dispbitcnt]]; //送顯示段碼
P3=dispbitcode[dispbitcnt]; //送顯示位碼
dispbitcnt++; //顯示位加1
if(dispbitcnt==8) //8位都顯示完了?
{
dispbitcnt=0; //從第一位開始顯示
}
}
tcnt++; //累加器加一
if(tcnt==4000) //記滿1秒
{
tcnt=0; //累加器清零
second++; //秒加一
if(second==60) //秒滿60?
{
second=0; //秒清零
minite++; //分鍾加一
if(minite==60) //分鍾滿60
{
minite=0; //分鍾清零
hour++; //小時加1
if(hour==24) //小時滿24
{
hour=0; //小時清零
}
}
}
dispbuf[0]=second%10; //將時分秒的個位與十位分開,裝在顯示區
dispbuf[1]=second/10;
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
}
}

其實這個程序不難,仔細想想,有不懂的再問我吧

Ⅲ 51單片機簡單電子時鍾程序,通過按鍵設置時間,有圖,有解析!

#include<reg52.h>
#include<stddef.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD1602_FLAG
#defineLCD1602_PORTP0

sbitlcd1602_rs=P2^0;
sbitlcd1602_e=P2^2;
sbitlcd1602_rw=P2^1;
sbitlcd1602_busy=P0^7;
sbitkey_ch=P3^5;
sbitkey_add=P3^6;
sbitkey_minus=P3^7;

uchari,sec,min,h,date,month,flag;
uintyear;
uchar*chgstr[7]={"","sec","min","hour","date","min","year"};
ucharj,k,m,n,o,p;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchartimestr[10],datestr[10];
voidinit();
voiddelay(uint);
voidtime_display();
voiddate_display();
voidcontrol();
voidtime();
/*
************************************
*函數名稱:lcd1602_CheckBusy()
*函數功能:狀態查詢
************************************
*/

voidlcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}

/*
***************************************
*函數名稱:lcd1602_WriteCmd()
*函數功能:寫命令
*入口參數:命令字
*出口參數:無
***************************************
*/

voidlcd1602_WriteCmd(constucharcmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}

/*
*******************************************
*函數名稱:lcd1602_WriteData()
*函數功能:寫數據
*入口參數:c--待寫數據
*出口參數:無
*********************************************
*/

voidlcd1602_WriteData(constucharc)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}

/*
***********************************************
*函數名稱:lcd1602_Init()
*函數功能:初始化LCD
*入口參數:無
*出口參數:無
***********************************************
*/

voidlcd1602_Init()
{
lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點陣
lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,
lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove
lcd1602_WriteCmd(0x01);//clearscreen
}

/*
************************************************
*函數名稱:lcd1602_Display()
*函數功能:字元顯示
*入口參數:ptr--字元或字元串指針
*出口參數:無
*說明:用戶可通過以下方式來調用:
*1)lcd1602_Display("Hello,world!");
*2)INT8U存儲類型txt[]="要顯示的字元串";
*或者INT8U存儲類型txt[]={'t','x','t',..,''};
*INT8U*ptr;
*ptr=&txt;
*lcd1602_Display(ptr);
*或lcd1602_Display(txt);
*或lcd1602_Display(&txt);
************************************************
*/

voidlcd1602_Display(constuchar*ptr,ucharline,ucharxaddr)
{
uchardatai=0;
uchar*dataq;

q=ptr;
switch(line)
{
case0:
lcd1602_WriteCmd(0x80+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
case1:
lcd1602_WriteCmd(0xc0+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}


voidmain()
{
lcd1602_Init();
init();
while(1)
{
time_display();
date_display();
control();
}
}
voidinit()
{
i=0;
sec=0;
min=30;
h=7;
date=17;
month=10;
year=2017;
flag=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidtime_display()
{
timestr[7]=0x30+sec%10;
timestr[6]=0x30+sec/10;
timestr[5]=':';
timestr[4]=0x30+min%10;
timestr[3]=0x30+min/10;
timestr[2]=':';
timestr[1]=0x30+h%10;
timestr[0]=0x30+h/10;
timestr[8]=0;
lcd1602_Display(timestr,1,3);
}
voiddate_display()
{
datestr[9]=0x30+date%10;
datestr[8]=0x30+date/10;
datestr[7]=':';
datestr[6]=0x30+month%10;
datestr[5]=0x30+month/10;
datestr[4]=':';
datestr[3]=0x30+year%10;
datestr[2]=0x30+year/10%10;
datestr[1]=0x30+year/100%10;
datestr[0]=0x30+year/1000;
lcd1602_Display(datestr,0,2);
}
voidcontrol()
{
if(!key_ch)
{
delay(5);
if(!key_ch)
{
flag++;
TR0=0;
if(flag==7)
{flag=0;TR0=1;lcd1602_Init();}
lcd1602_Display(chgstr[flag],1,12);
}
}
while(!key_ch);
if(flag==1&&key_add==0)
{
while(!key_add);
sec++;
if(sec==60)
sec=0;
}
if(flag==1&&key_minus==0)
{
while(!key_minus);
sec--;
if(sec==-1)
sec=59;
}

if(flag==2&&key_add==0)
{
while(!key_add);
min++;
if(min==60)
min=0;
}
if(flag==2&&key_minus==0)
{
while(!key_minus);
min--;
if(min==-1)
min=59;
}

if(flag==3&&key_add==0)
{
while(!key_add);
h++;
if(h==24)
h=0;
}
if(flag==3&&key_minus==0)
{
while(!key_minus);
h--;
if(h==-1)
h=23;
}

if(flag==4&&key_add==0)
{
while(!key_add);
date++;
if(date==29)
if((year%4!=0)&&(month==2))
date=1;
if(date==30)
if((year%4==0)&&(month==2))
date=1;
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
date=1;
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
date=1;
}

if(flag==4&&key_minus==0)
{
while(!key_minus);
if(date>1)date--;
}

if(flag==5&&key_add==0)
{
while(!key_add);
month++;
if(month==13)
month=1;
}
if(flag==5&&key_minus==0)
{
while(!key_minus);
month--;
if(month==0)
month=12;
}

if(flag==6&&key_add==0)
{
while(!key_add);
year++;
if(year==99)
year=1;
}
if(flag==6&&key_minus==0)
{
while(!key_minus);
year--;
if(year==0)
year=99;
}
}

voidT0_rpt()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
time();
}

voidtime()
{
if(i==20)
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
h++;
if(h==24)
{
h=0;
min=0;
sec=0;
date++;
if(date==29)
if((year%4!=0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==30)
if((year%4==0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
}
}
}
}
}

Ⅳ 利用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);

}

}

Ⅳ 誰能告訴我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++;
}

/*還有什麼不明白繼續追加*/

Ⅵ 用AT89C51單片機設計一電子鬧鍾,C語言程序和模擬

可以用單片機內部定時器來完成,
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
/* 函數申明 -----------------------------------------------*/
void TransferData(char data1,bit DI);
void display(void);
void display_grapic(void);
void delayms(uint n);
void DisplayLine(uchar line1,uchar line2);
void DisplayGraphic(uchar code *adder);
void delay(uint m);
void lcd_mesg(uchar code *adder1);
unsigned char Convert(unsigned char In_Date);
void initinal(void);
void initina2(void) ;
void lcd_m(uchar adder1,uchar adder2,uchar a);
/* 變數定義 -----------------------------------------------*/
uchar scnt = 0 ;
uchar last_scnt = 0 ;
uchar updat_vision = 0 ;
sbit key1 = P3^5 ;
sbit key2 = P3^7 ;
sbit key3 = P3^6 ;
sbit gnd = P3^0 ;
sbit spk = P1^0 ;
uchar timer_miao = 0 ;
uchar timer_fen = 0 ;
uchar timer_shi = 0 ;
uchar cnt = 0 ;
uchar sw = 0 ;
uchar spk_on = 0 ;
uchar noise_shi = 0 ;
uchar noise_fen = 0 ;
uint count = 0 ;
uint count1 = 0 ;
uint count2 = 0 ;
uchar time_rch = 0 ;
sbit datacs=P2^6;
sbit chipcs=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x07,
0x39,0x5e,0x79,0x71
};
/*
********************************************************************************
** 函數名稱 : Init_Timer0(void)
** 函數功能 : 定時器初始化子程序
********************************************************************************
*/
void Init_Timer0(void) //定時器初始化子程序
{
TMOD |= 0x11; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
TH0=0x3c; //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
TL0=0xaf;
TH1=0x03; //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
TL1=0xe8;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
ET1=1;
TR0=1;
}
/*
********************************************************************************
** 函數名稱 : Timer0_isr(void) interrupt 1 using 1
** 函數功能 : 定時器中斷程序
********************************************************************************
*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x3c; //重新賦值,方式1是16位計數器,不能硬體重裝初始值
TL0=0xaf;

if(cnt<20)
{
cnt ++ ;
}else
{
cnt = 0 ;
if(sw==0)
{
if(timer_miao<59)
{
timer_miao++;
}else
{
timer_miao = 0 ;
if(timer_fen<59)
{
timer_fen++;
}else
{
timer_fen = 0 ;
if(timer_shi<23)
{
timer_shi++;
}else
{
timer_shi = 0 ;
}
}
}
}
}
}
void Timer1_isr(void) interrupt 3
{
TH1=0x03; //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
TL1=0xe8;
if(scnt<7)
{
scnt ++ ;
}else
{
scnt = 0 ;
}
switch(scnt)
{
case 0 : P0 = 0xfe ;chipcs = 1 ; chipcs = 0 ; P0=table[timer_miao%10] ;datacs=1;datacs=0; break ;
case 1 : P0 = 0xfd ;chipcs = 1 ; chipcs = 0 ; P0=table[timer_miao/10] ;datacs=1;datacs=0; break ;
case 2 : P0 = 0xfb ;chipcs = 1 ; chipcs = 0 ; P0= 0x40 ;datacs=1;datacs=0; break ;
case 3 : P0 = 0xf7 ;chipcs = 1 ; chipcs = 0 ; P0=table[timer_fen%10] ;datacs=1;datacs=0;break ;
case 4 : P0 = 0xef ;chipcs = 1 ; chipcs = 0 ; P0=table[timer_fen/10] ;datacs=1;datacs=0;break ;
case 5 : P0 = 0xdf ;chipcs = 1 ; chipcs = 0 ; P0= 0x40 ;datacs=1;datacs=0; break ;
case 6 : P0 = 0xbf ;chipcs = 1 ; chipcs = 0 ; P0=table[timer_shi%10] ;datacs=1;datacs=0;break ;
case 7 : P0 = 0x7f ;chipcs = 1 ; chipcs = 0 ; P0=table[timer_shi/10] ;datacs=1;datacs=0;break ;
}
}
void key(void)
{
if(key1==0)
{
if(count<8000)
count ++ ;
}else
{
if(count>5000)
{
if(sw<3)
sw++;
else
sw=0;
}
count = 0 ;
}
if(key2==0)
{
if(count1<8000)
count1 ++ ;
}else
{
if(count1>5000)
{
switch(sw)
{
case 0 : spk_on = 1 ; time_rch=0;break ;
case 1 : if(timer_shi<23)timer_shi++;else timer_shi = 0 ; break ;
case 2 : if(timer_fen<59)timer_fen++;else timer_fen = 0 ; break ;
case 3 : if(timer_miao<59)timer_miao++;else timer_miao = 0 ; break ;
}
}
count1 = 0 ;
}
if(key3==0)
{
if(count2<8000)
count2 ++ ;
}else
{
if(count2>5000)
{
switch(sw)
{
case 0 : spk_on = 0 ; time_rch=0; break ;
case 1 : if(timer_shi>0)timer_shi--;else timer_shi = 23 ; break ;
case 2 : if(timer_fen>0)timer_fen--;else timer_fen = 59 ; break ;
case 3 : if(timer_miao>0)timer_miao--;else timer_miao = 59 ; break ;
}
}
count2 = 0 ;
}
}
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void main(void)
{
sw=0;
noise_shi = 0 ;
noise_fen = 2 ;
Init_Timer0();
while(1)
{
key();
}
}

閱讀全文

與單片機電子時鍾設計的程序相關的資料

熱點內容
數據標注哪裡可以接 瀏覽:482
在家自學編程下什麼學 瀏覽:705
最近很火的app軟體是什麼軟體 瀏覽:862
ai文字工具 瀏覽:157
蘭博玩游戲路徑怎麼選擇正確文件 瀏覽:972
淘寶直通車恢復老版本 瀏覽:510
播放草莓的圖片我都文件 瀏覽:55
微信大文件打不開 瀏覽:767
家裝合同准備哪些文件 瀏覽:296
應用bat合並excel文件 瀏覽:984
迅雷影音文件夾 瀏覽:109
makefile的文件路徑 瀏覽:392
計算機程序文件名擴展名為 瀏覽:982
網路游戲推廣策劃案 瀏覽:609
替換所有文件內容的代碼 瀏覽:960
不是常用數據模型有哪些 瀏覽:426
aspcms版本號 瀏覽:835
安卓怎麼用數據流量下載軟體 瀏覽:553
大眾手動空調數據流通道號是多少 瀏覽:303
手機qq令牌 瀏覽:737

友情鏈接