初學單片機 年前就整了一個學習板 附帶一個光盤的。。但由于電腦系統升級成64位了。原來的IED光驅檢測不到了。所以一直也都沒有看附帶光盤里的教程。下班回家了就沒事自己個鼓掏。網上看了很多的教程,但是閉門造車終究是不行的。。。
發此帖一是尋求良師益友,二是請壇中大神解惑!(尋求良師益友,有誠意的請加QQ1677599388、PS:不知道能不能發QQ號)
這是一個利用定時器寫的簡易時鐘C,現在我想要做出整點蜂鳴器響5秒。響500MS閉500MS,直至5S結束!求大神結個思路或是直接給個C我慢慢分析!謝謝!
/*利用定時器的時間顯示及按鍵調整時分秒*/
#include
#define uchar unsigned char
#define uint unsigned int
sbit a=P1^1; //74HC138_a
sbit b=P1^2; //74HC138_b
sbit c=P1^3; //74HC138_c
//sbit le=P1^0; //74HC573_le
sbit bz=P1^4; //蜂鳴器輸出口
sbit H_KEY=P2^2; //時調整鍵
sbit M_KEY=P2^1; //分調整鍵
sbit S_KEY=P2^0; //秒調整鍵
void seconds_adjust(); //秒調整函數
void minute_adjust(); //分調整函數
void hours_adjust(); //時調整函數
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //數碼管顯示數組
uchar hours=11, minute=59, seconds=55; //時間初始化
uchar deda=0;
void delay(uchar count); //延時模塊
void zhh(); //走時模塊
void display(); //顯示模塊
void init_timer()//采用定時器0中斷,50MS更新一次
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
}
void T0_srv(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
deda++;
}
void seconds_adjust()//秒調整模塊
{
while(!S_KEY) display(); //等待秒調整鍵松開
deda=0;seconds++; //毫秒清零、秒加1
if(seconds==60)seconds=0; //如果秒等于60,秒變0
}
void minute_adjust()//分調整模塊
{
while(!M_KEY) display();
seconds=0;minute++;
if(minute==60)minute=0;
}
void hours_adjust()//時調整模塊
{
while(!H_KEY) display();
seconds=0;hours++;
if(hours==24)hours=0;
}
void zhh()//走時模塊
{
if(deda>=20)seconds++,deda=0;
if(seconds==60)minute++,seconds=0;
if(minute==60)hours++,minute=0;
if(hours==24)hours=0;
}
void display()//顯示模塊
{
le=1; //段選始終高電平
a=0,b=0,c=0; //位選最高位選通
P0=table[hours/10]; //P0口送段碼
delay(5); //延遲5MS
P0=0; //P0口段碼清口消隱
a=1,b=0,c=0;
P0=table[hours%10];
delay(5);
P0=0;
a=0,b=1,c=0;
P0=table[10];
delay(5);
P0=0;
a=1,b=1,c=0;
P0=table[minute/10];
delay(5);
P0=0;
a=0,b=0,c=1;
P0=table[minute%10];
delay(5);
P0=0;
a=1,b=0,c=1;
P0=table[10];
delay(5);
P0=0;
a=0,b=1,c=1;
P0=table[seconds/10];
delay(5);
P0=0;
a=1,b=1,c=1;
P0=table[seconds%10];
delay(5);
P0=0;
}
void delay(uchar k)//延時模塊1MS
{
uchar i,j;
for(i=0;i
for(j=0;j<120;j++) ;
}
void voice()//整點蜂鳴器叫
{
if((minute==0)&(seconds<=0))
{
????
}
}
void main()//主程序
{
init_timer(); //定時模塊
while(1) //無限循環
{
if(!H_KEY) hours_adjust(); //時調整
if(!M_KEY) minute_adjust(); //分調整
if(!S_KEY) seconds_adjust(); //秒調整
zhh(); //走時模塊
display(); //顯示
voice(); //蜂鳴器整點響5S
}
}
懇請大神指導一下?????中應如何實現蜂鳴器響5秒。響500MS閉500MS,直至5S結束.
延時或是定時器中斷都成!謝謝!