久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1692|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

這個(gè)單片機(jī)電路原理圖加個(gè)蜂鳴器的話程序要怎么弄?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

初學(xué)者 求指導(dǎo) 謝謝大家
單片機(jī)源程序如下:
#include <reg51.H>
#define uint unsigned int
#define uchar unsigned char

sbit LCD_RS=P3^0;
sbit LCD_EN=P3^1;
sbit key1=P3^2;   
sbit key2=P3^3;
sbit key3=P3^4;


uchar table[]= "T1:00.00";    //第一行
uchar table1[]="T2:00.00";    //第二行
uchar keyvalue,k1,k2;
char sec_1=0,sec_2=0,min_1,min_2;//分秒變量
uchar min1=50,min2=50;                //預(yù)置分變量
uint ms1=0;ms2=0;                        //中斷計(jì)時(shí)變量
bit key_sign=0;                        //按鍵狀態(tài)標(biāo)志
bit flag1,flag2;                        //啟停標(biāo)志

void delay(uint x);
void write_com(uchar com);
void write_date(uchar date);
void LCD_init();
void display();
void keyscan();
void Timer0Init();

/*******100us延時(shí)程序********/
void delay(uint x)
{
    uint a,b;
    for(a=x;a>0;a--)
        for(b=10;b>0;b--);
}
/*******1602液晶屏寫(xiě)指令程序********/
void write_com(uchar com)
{
    LCD_RS=0;    //允許寫(xiě)指令
    P2=com;        //傳遞指令
    delay(10);    //延時(shí)1ms
    LCD_EN=1;    //使能寫(xiě)入
    delay(10);    //延時(shí)1ms
    LCD_EN=0;    //低跳變執(zhí)行
   
}
/*******1602液晶屏寫(xiě)數(shù)據(jù)程序********/
void write_date(uchar date)
{
    LCD_RS=1;    //允許寫(xiě)數(shù)據(jù)
    P2=date;    //傳遞數(shù)據(jù)
    delay(10);    //延時(shí)1ms
    LCD_EN=1;    //使能寫(xiě)入
    delay(10);    //延時(shí)1ms
    LCD_EN=0;    //低跳變執(zhí)行
   
}
/*******1602液晶屏初始化程序********/
void LCD_init()        //設(shè)置顯示模式、
{
    write_com(0x38);//設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
    write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
    write_com(0x0c);//設(shè)置開(kāi)顯示,不顯光標(biāo)
    write_com(0x06);//設(shè)置寫(xiě)一個(gè)字符后地址指針加1
}
/***********按鍵掃描子程序****************/

void keyscan()   
{
    static uchar count=0;                        //計(jì)數(shù)變量            
    if(!key1||!key2||!key3)                        //檢測(cè)輸入如果為0
    {                    
        if(++count>=2 && key_sign==0)//計(jì)數(shù)延時(shí)消抖
        {            
            key_sign=1;            //按鍵狀態(tài)標(biāo)志置1,防止重復(fù)響應(yīng)
            if(!key1&&flag1==0&&flag2==0)
                keyvalue=++keyvalue%3;
            if(!key2)
            {
                switch(keyvalue)
                {
                    case 0:
                        k1++;
                        if(k1==1)//啟動(dòng)
                        {
                            min_1=min1;   
                            sec_1=0;
                            flag1=1;
                        }
                        if(k1==2)//暫停
                            flag1=0;
                        if(k1==3)//清0
                        {
                            k1=0;
                            min_1=0;   
                            sec_1=0;
                            ms1=0;
                        }break;
                    case 1: if(min1<98)min1++;sec_1=0; break;
                    case 2: if(min2<98)min2++;sec_2=0; break;
                }
            }   
            if(!key3)
            {
                switch(keyvalue)
                {
                    case 0:
                        k2++;
                        if(k2==1)//啟動(dòng)
                        {
                            min_2=min2;   
                            sec_2=0;
                            flag2=1;
                        }
                        if(k2==2)//暫停
                            flag2=0;
                        if(k2==3)//清0
                        {
                            k2=0;
                            min_2=0;   
                            sec_2=0;
                            ms2=0;
                        }break;
                    case 1: if(min1>1)min1--;sec_1=0; break;
                    case 2: if(min2>1)min2--;sec_2=0; break;
                }
            }
        }
    }
    else
    {
        count=0;                //計(jì)數(shù)變量清0
        key_sign=0;
    }
}


void display()
{
    uchar i;
    if(keyvalue==0)
    {
        table[3]=min_1/10+'0';
        table[4]=min_1%10+'0';
        table[6]=sec_1/10+'0';
        table[7]=sec_1%10+'0';
        table1[3]=min_2/10+'0';
        table1[4]=min_2%10+'0';
        table1[6]=sec_2/10+'0';
        table1[7]=sec_2%10+'0';
    }
    if(keyvalue==1)
    {
        table[3]=min1/10+'0';
        table[4]=min1%10+'0';
        table[6]=0x3c;//<
        table[7]=0x3c;//<
        table1[3]=min2/10+'0';
        table1[4]=min2%10+'0';
        table1[6]='0';
        table1[7]='0';
    }
    if(keyvalue==2)
    {
        table[3]=min1/10+'0';
        table[4]=min1%10+'0';
        table[6]='0';
        table[7]='0';
        table1[3]=min2/10+'0';
        table1[4]=min2%10+'0';
        table1[6]=0x3c;//<
        table1[7]=0x3c;//<
    }
    write_com(0x80);            //數(shù)據(jù)指針第一行起始0x80位置
    for(i=0;i<8;i++)            //每循環(huán)一次寫(xiě)一個(gè)字節(jié)數(shù)據(jù)
        write_date(table[ i]);    //寫(xiě)一個(gè)字節(jié)數(shù)據(jù)        
    write_com(0xc0);            //數(shù)據(jù)指針第二行起始位置0x80+0x40=0xc0
    for(i=0;i<8;i++)            //每循環(huán)一次寫(xiě)一個(gè)字節(jié)數(shù)據(jù)
        write_date(table1[ i]);    //寫(xiě)一個(gè)字節(jié)數(shù)據(jù)        
}

         





/***********定時(shí)器初始化程序****************/
void Timer0Init()        //1毫秒@11.0592MHz
{
    TMOD = 0x01;        //設(shè)置定時(shí)器模式
    TL0 = 0x66;        //設(shè)置定時(shí)初值
    TH0 = 0xFC;        //設(shè)置定時(shí)初值
    TF0 = 0;        //清除TF0標(biāo)志
    TR0 = 1;        //定時(shí)器0開(kāi)始計(jì)時(shí)
    EA=1;                            //開(kāi)總中斷
    ET0=1;                        //開(kāi)定時(shí)器0中斷   
}
/***************主程序****************/
void main()
{
    LCD_init();   
    Timer0Init();                //定時(shí)器初始化
    while(1)
    {
        keyscan();
        display();
    }
}
/**************中斷服務(wù)程序*****************/
void timer0() interrupt    1
{
    TL0 = 0x66;        //設(shè)置定時(shí)初值
    TH0 = 0xFC;        //設(shè)置定時(shí)初值
    if(flag1)
    {
        ms1++;
        if(ms1>=1000)
        {
            ms1=0;
            sec_1--;
            if(sec_1==0&&min_1==0)
            {
                flag1=0;
                k1=0;
            }
            else if(sec_1<0)
            {
                sec_1=59;
                min_1--;
            }
        }
    }
    if(flag2)
    {
        ms2++;
        if(ms2>=1000)
        {
            ms2=0;
            sec_2--;
            if(sec_2==0&&min_2==0)
            {
                flag2=0;
                k2=0;
            }
            else if(sec_2<0)
            {
                sec_2=59;
                min_2--;
            }
        }
    }
}

雙路99分鐘倒計(jì)時(shí) 仿真.zip

110.53 KB, 下載次數(shù): 2

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:789121 發(fā)表于 2022-6-3 18:47 | 只看該作者
蜂鳴器建議選有源的,這樣加個(gè)三極管就可以直接用引腳高低電平控制了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:752225 發(fā)表于 2022-6-3 20:32 | 只看該作者
同意樓上說(shuō)的,可以用有源蜂鳴器和一個(gè)三極管來(lái)實(shí)現(xiàn),注意NPN或PNP三極管,蜂鳴器擺放的位置不同,可百度查詢
回復(fù)

使用道具 舉報(bào)

地板
ID:979299 發(fā)表于 2022-6-3 20:46 | 只看該作者
在中斷里找到標(biāo)志位1,在下面添加上buzz=0;即可,標(biāo)志位2也一樣,要停止鳴響,在主函數(shù)里添加一個(gè)按鍵程序
            if(sec_1==0&&min_1==0)
            {
                flag1=0;
                buzz=0;
                k1=0;
            }

主函數(shù)里寫(xiě)
                 if(key4==0)
                {
                        buzz=1;
                }
當(dāng)然還在先定義按鍵和BUZZ
sbit key4=P3^5;
sbit buzz=P1^0;
回復(fù)

使用道具 舉報(bào)

5#
ID:987652 發(fā)表于 2022-6-3 20:49 | 只看該作者
不要黑 發(fā)表于 2022-6-3 18:47
蜂鳴器建議選有源的,這樣加個(gè)三極管就可以直接用引腳高低電平控制了。

但是這些引腳的高低電平一直在變化。
回復(fù)

使用道具 舉報(bào)

6#
ID:987652 發(fā)表于 2022-6-3 21:56 | 只看該作者
興安xa 發(fā)表于 2022-6-3 20:46
在中斷里找到標(biāo)志位1,在下面添加上buzz=0;即可,標(biāo)志位2也一樣,要停止鳴響,在主函數(shù)里添加一個(gè)按鍵程序
...

好的,非常感謝!
回復(fù)

使用道具 舉報(bào)

7#
ID:987652 發(fā)表于 2022-6-8 22:25 | 只看該作者
興安xa 發(fā)表于 2022-6-3 20:46
在中斷里找到標(biāo)志位1,在下面添加上buzz=0;即可,標(biāo)志位2也一樣,要停止鳴響,在主函數(shù)里添加一個(gè)按鍵程序
...

打擾一下,大佬可以幫忙看看我的第二個(gè)主題該如何修改嗎
回復(fù)

使用道具 舉報(bào)

8#
ID:451718 發(fā)表于 2022-6-9 15:49 | 只看該作者
unsigned char BPFlag = 0;
void Deel_Beep()
{
    static unsigned char BPSign = 0;
          switch(BPFlag)
                {
                        case 0:                //-------不響
                                BZ = 0;
                                break;
                        case 1:                //-------長(zhǎng)響
                                BZ = 1;
        BPSign ++;
        if(BPSign>5)
        {
            BPSign = 0;
            BPFlag = 0;
            BZ = 0;
        }
                                break;
                        case 2:                //-------雙響
                                switch(BPSign)
        {
            case 0:
                BZ = 1;
                BPSign++;
                break;
            case 1:
                                                          BZ = 0;
                                                    BPSign++;
                                                    break;
                                                case 2:
                BZ = 1;
                BPSign++;
                break;
            default:                                               
                                                          BZ = 0;
                                                    BPSign = 0;
                                                    BPFlag = 0;
                                                    break;
        }
                                break;
                        case 3:                //-------短響
                                BZ = 1;
        BPSign ++;
        if(BPSign>1)
        {
            BPSign = 0;
            BPFlag = 0;
            BZ = 0;
        }
                                break;
                        case 4:                //-------雙響
                        switch(BPSign)
                        {
                                        case 0:
                                                        BZ = 1;
                                                        BPSign++;
                                                        break;
                                        case 1:
                                                        BZ = 0;
                                                        BPSign++;
                                                        break;
                                        case 2:
                                                        BZ = 1;
                                                        BPSign++;
                                                        break;
                                        case 3:
                                                        BZ = 0;
                                                        BPSign++;
                                                        break;
                                        case 4:
                                                        BZ = 1;
                                                        BPSign++;
                                                        break;
                                        default:                                               
                                                        BZ = 0;
                                                        BPSign = 0;
                                                        BPFlag = 0;
                                                        break;
                        }
                        break;
                }  
}      
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: аⅴ资源新版在线天堂 | 性色av香蕉一区二区 | 黄色大片免费播放 | 黄色片网站在线观看 | 成人国产精品久久久 | 亚洲国产一区二区三区 | 国产激情一区二区三区 | 国产一区二区三区在线 | 粉嫩一区二区三区国产精品 | 91精品一区| 一区二区三区av | 国产成人99 | 欧美日韩一区二区三区在线观看 | 日韩免费一区二区 | 天天色天天射天天干 | 欧美偷偷| www.久久.com | 中文字幕一区二区三区乱码图片 | 日韩久久久一区二区 | av影音资源 | 久久青| 国产亚洲第一页 | 国产精品一区在线观看 | 精品综合 | 欧美性a视频 | 国产免费av在线 | 亚洲欧美中文字幕 | 91视频88av| 久久99精品国产 | 欧美激情亚洲天堂 | 国产视频精品在线 | 蜜桃视频麻豆 | 国产精品一码二码三码在线 | 国产精品国产精品国产专区不卡 | 成人h视频在线观看 | 国产伦精品一区二区三区高清 | 日本久久精 | 欧美日韩成人 | 色综合色综合色综合 | 亚洲精品一二三 | 国产免费xxx |