『壹』 用c語言寫51單片機鬧鍾程序
//*********************************************************
//實現功能:本程序實現在P1口模擬一個流水燈程序
//*********************************************************
#include <reg51.h>
#define p_out P1   //宏定義輸出的i/o口為P1
//******************時間延遲函數**********************
//描  述:用指令實現延時一段時間
//入口參數:int i,為時間延遲參數
//****************************************************
void delay_time(int i)
{
 while(i)
  i--;
}
//******************主函數***************************
//描  述:實現在P1口模擬一個流水燈程序
//****************************************************
void main(void)
{unsigned char i=0;       //初始化一個局部變數為0
 p_out=0xff;        //初始化將要輸出的i/o口,輸出高電平,熄滅所有燈
 while(1)          
    {
 for(i=0;i<8;i++)
 {
  p_out=~(1<<i);//點亮一個燈,
  delay_time(50000);  //延遲一段時間
  p_out=0xff;//熄滅所有燈
  }
    }
}
//**************************************
//****************************************************
//實現功能:把鍵盤輸入的鍵盤碼,用led顯示出來
//****************************************************
#include <reg51.h>
#define p_key P1
#define led_date P0
#define choose_p P2
unsigned char change(unsigned char i);
unsigned int display_num=0;
//******************時間延遲函數**********************
//描  述:用指令實現延時一段時間
//入口參數:int i,為時間延遲參數
//****************************************************
void delay_time(int i)
{
 while(i)
  i--;
}
//******************按鍵掃描函數**********************
//描    述:對4*4鍵盤進行掃描,程序只適合4*4鍵盤使用,
//         鍵盤佔用一組完整的i/o口,在使用這個程序前
//         要宏定義p_key為用戶實際連接鍵盤的i/o口 
//         #define p_key Pn;//(n=0、1、2、3)
//返回參數:若有檢測到按鍵就返回按鍵的編號,否則返回0xff
//****************************************************
unsigned char read_key(void)
{
 unsigned char j,key,key_buf=0;
 p_key=0xff;
 //檢測是否有建按下//
 p_key=0xf0;
 key=p_key;
 if(key==0xf0)
    {
  return(0xff);//沒按鍵按下,返回0xff
 }
 //有按下,延時去抖//
 delay_time(5000);
 //確認是否有建按下//
 p_key=0xf0;
 key=p_key;
 if(key==0xf0)
    {
  return(0xff);//沒按鍵按下,返回0xff
 }
 //真的有按鍵按下,掃描是哪一行有按鍵按下//
 for(j=0;j<4;j++)
 {key=p_key&(0x10<<j);
  if (key)
     {
   key=p_key;
  }
  else
     {
   key_buf=j*4;
   p_key=~(0x10<<j);//第j行的按鍵按下了,第j行輸出0,其他的i/o口輸出1
   //掃描是第j行的哪個按鍵按下//
   for(j=0;j<4;j++)
    {
   key=p_key&(1<<j);
         if (key)
       {
      key=p_key;
    }
     else
       {
    key_buf+=j;
    return(key_buf);//掃描到按鍵的確定位置,返回按鍵的編號
   }
  }
  }
 }
//沒掃描到按鍵,//
return(0xff);
}
//***************七段數碼管顯示函數*******************
//描    述:對四位的掃描型七段數碼管進行掃描顯示,在使用
//          前要定義一個全局變數display_num
//          unsigned int display_num;
//入口參數:unsigned int num,要顯示的數字(0-9999)
//****************************************************
void display(unsigned int num)
{
 if(num<10000)
  {
  display_num=num;
    }
  choose_p|=3;//先關顯示
  led_date=change(display_num/1000);//得到千位的數字,並轉換成七段碼型
  choose_p&=0xfe;//選通千位
  delay_time(50);//延時一段時間
     choose_p|=1;//關顯示
     display_num=display_num%1000;
     led_date=change(display_num/100);//得到百位的數字,並轉換成七段碼型
  choose_p&=0xfd;//選通百位
  delay_time(50);//延時一段時間
  choose_p|=2;//關顯示
  display_num=display_num%100;
     led_date=change(display_num/10);//得到十位的數字,並轉換成七段碼型
  choose_p&=0xfb;//選通十位
  delay_time(50);//延時一段時間
  choose_p|=4;//關顯示
  led_date=change(display_num%10);//得到個位的數字,並轉換成七段碼型
  choose_p&=0xf7;//選通十位
  delay_time(50);//延時一段時間
  choose_p|=8;//關顯示
}
//****************數字-碼型轉換函數*******************
//描    述:把數字轉換成七段碼型,此程序僅配合共陽的七
//          段數碼管使用
//入口參數:unsigned char i,要轉換的數字(0-9),
//返回參數:轉換後的七段碼型,0xff表示轉換失敗
//****************************************************
unsigned char change(unsigned char i)
 {
  switch(i)
   {
  case 0:
        return(0xc0);//0的七段碼型
  case 1:
        return(0xf9);//1的七段碼型
  case 2:
        return(0xa4);//2的七段碼型
  case 3:
        return(0xb0);//3的七段碼型
  case 4:
        return(0x99);//4的七段碼型
  case 5:
        return(0x92);//5的七段碼型
  case 6:
        return(0x82);//6的七段碼型
  case 7:
        return(0xf8);//7的七段碼型
  case 8:
        return(0x80);//8的七段碼型
  case 9:
        return(0x90);//9的七段碼型
     default:
        return(0xff);//轉換失敗
 }
 }
//*********************主函數*************************
//描    述:把鍵盤輸入的鍵盤碼,用led顯示出來
//****************************************************
int main(void)
{unsigned char i;
while(1)
 {
  i=read_key();//掃描鍵盤
  if(i<16)
    display((unsigned int)i);//有效的鍵盤值
  else
      display(0xffff);//數據無效
 }
}
//兩個程序加起來就可以完成你要求的功能,有說明,你認真看一下吧。
『貳』 用C語言怎麼編輯一個鬧鍾
呵呵,寫了一個玩玩:
#include <stdio.h>
#include <windows.h>
#include <winbase.h>
int main(int argc, char *argv[])
{
SYSTEMTIME time;
SYSTEMTIME clock;
GetLocalTime(&time);
printf("當前時間為:%2d:%2d:%2d\n",time.wHour,time.wMinute,time.wSecond);
printf("請設定鬧鍾時間:\n");
printf("時:");
scanf("%2d",&clock.wHour);
printf("分:");
scanf("%2d",&clock.wMinute);
while(1)
{
	Sleep(1000);
	GetLocalTime(&time);
	if((time.wHour==clock.wHour)&&(time.wMinute==clock.wMinute))
	{
		printf("\a\a\a時間到!!!");
		break;
	}
}
return 0;
}
『叄』 C語言中,alarm函數的用法
你好!
在你的alarm()的後面加一個pause()這個函數吧,應該可以的
希望回答能給你帶來幫助
如果滿意,請採納,如有疑問,可繼續追問。
記得給問豆啊!
『肆』 C語言 鬧鍾程序
用C語言實現的鬧鍾程序
#include
#include
#include
#include
#include
void
main()
{
int
gd=DETECT,gm;
int
x=320,y=240,r=200,i,h,m,s,thetamin,thetasec;
struct
time
t;
char
n[12][3]={"3","2","1","12","11","10","9","8","7","6","5","4"};
initgraph(&gd,&gm,"g:\\tc\\bgi");//圖形驅動器路徑,根據自己的系統更換。
circle(x,y,210);
setcolor(4);
settextstyle(4,0,5);
for(i=0;i<12;i++)
{
if(i!=3)
outtextxy(x+(r-14)*cos(M_PI/6*i)-10,y-(r-14)*sin(M_PI/6*i)-26,n[i]);
else
outtextxy(x+(r-14)*cos(M_PI/6*i)-20,y-(r-14)*sin(M_PI/6*i)-26,n[i]);
}
gettime(&t);
printf("The
current
time
is:
%2d:%02d:%02d.%02d\n",t.ti_hour,
t.ti_min,
t.ti_sec,
t.ti_hund);
while(!kbhit())
{
setcolor(5);
setfillstyle(1,5);
circle(x,y,10);
floodfill(x,y,5);
gettime(&t);
if(t.ti_min!=m)
{
setcolor(0);
line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180
)));
circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180))
,10);
line(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-110)*sin(M_PI/6*h
-((m/2)*(M_PI/180))));
circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-130)*sin(M_PI/6*h-(
(m/2)*(M_PI/180))),10);
}
if(t.ti_hour>12)
t.ti_hour=t.ti_hour-12;
if(t.ti_hour<4)
h=abs(t.ti_hour-3);
else&n
bsp;
h=15-t.ti_hour;
m=t.ti_min;
if(t.ti_min<=15)
thetamin=(15-t.ti_min)*6;
else
thetamin=450-t.ti_min*6;
if(t.ti_sec<=15)
thetasec=(15-t.ti_sec)*6;
else
thetasec=450-t.ti_sec*6;
setcolor(4);
line(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-110)*sin(M_PI/6*h
-((m/2)*(M_PI/180))));
circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-130)*sin(M_PI/6*h-(
(m/2)*(M_PI/180))),10);
line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180
)));
circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180))
,10);
setcolor(15);
line(x,y,x+(r-70)*cos(thetasec*(M_PI/180)),y-(r-70)*sin(thetasec*(M_PI/180
)));
delay(1000);
setcolor(0);
line(x,y,x+(r-70)*cos(thetasec*(M_PI/180)),y-(r-70)*sin(thetasec*(M_PI/180
)));
}
}
該程序已在Turbo
C++3.0中通過編譯.
『伍』 用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();
}
}
『陸』 怎麼用c語言編個鬧鍾
控制台程序么?是的話
#include <time.h>
#include <stdio.h>
#include <string.h>
int main()
{
time_t timer;
char str[80];
char str1[80];
struct tm *tblock;
timer=time(NULL);
tblock=localtime(&timer);
printf("Local time is: %s",asctime(tblock));
strcpy(str1,asctime(tblock));
struct tm *t;
t=localtime(&timer);
scanf("請輸入 秒 分 小時 天 月 年(從1900開始加)",&t->tm_sec,&t->tm_min,&t->tm_hour ,&t->tm_mday ,&t->tm_mon ,&t->tm_year );
strcpy(str,asctime(t));
for(;;)
{
	if(strcmp(str,str1)==0)
	{
		for(;;)
		{
		printf("\a");
		}
	}
}
return 0;
}
