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

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

QQ登錄

只需一步,快速開始

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

自己敲的程序 出問題了 急需大神幫助。。!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:65824 發(fā)表于 2014-9-8 10:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
超聲波可以正常測距  但是按鍵無法設(shè)定報(bào)警距離    (報(bào)警模塊現(xiàn)在還沒有加)

//--------------------------------------
#include<reg52.h>
#include<intrins.h>

#define uint  unsigned int
#define uchar unsigned char

#define yh 0x80                              


#define NOP() {_nop_();_nop_();_nop_();_nop_();}

//------LCD引腳-----
sbit LCD_RS=P1^0;
sbit LCD_RW=P1^1;
sbit LCD_EN=P2^5;

sbit key1=P3^5;                             //設(shè)置鍵
sbit key2=P3^6;                             //加鍵
sbit key3=P3^7;                             //減鍵
sbit buzzer=P2^3;                            //蜂鳴器,通過三極管9012驅(qū)動(dòng),端口低電平響

//------超聲波引腳-------
sbit Tx=P3^3;                //觸發(fā)控制信號(hào)輸入
sbit Rx=P3^2;                //回響信號(hào)輸出
uchar code table[]={"L=000cm  H=000cm"};                //LCD第一行顯示
uchar code table1[]={"0123456789"};
uchar temp_dis[]= {"Distance=000.0cm"};                                //LCD第二行

long int t,distance,key1n,b1,b2,b3,b4,b5,b6;
uchar cache[4]={0,0,0,0};

//--------延時(shí)-------
void delay(uint ms)
{
        uint t;
        while(ms--)
        for(t=0;t<120;t++);
}



//-------讀LCD狀態(tài)-------
uchar read_lcd_state()
{
        uchar state;
        LCD_RS=0;
        LCD_RW=1;
        LCD_EN=1;
        _nop_();
        state=P0;
        LCD_EN=0;
        _nop_();
        return state;
}
//-------忙等待------
void lcd_busy_wait()
{
        while((read_lcd_state() & 0x80)==0x80);
        NOP();
}
//----------LCD寫指令----------
void lcd_write_com(uchar com)
{
        lcd_busy_wait();
        LCD_RS=0;                //RS為0時(shí),寫指令,RS為1時(shí),寫數(shù)據(jù)
        LCD_RW=0;
        P0=com;
        NOP();
        LCD_EN=1;
        NOP();
        LCD_EN=0;
}
//----------LCD寫數(shù)據(jù)----------
void lcd_write_data(uchar dat)
{
        lcd_busy_wait();
        LCD_RS=1;
        LCD_RW=0;
        P0=dat;
        NOP();                                       
        LCD_EN=1;
        NOP();
        LCD_EN=0;
}
//-------LCD初始化-------
void lcd_init()
{
        LCD_EN=0;
        lcd_write_com(0x38);                        //LCD顯示模式設(shè)置
        lcd_write_com(0x0c);                        //LCD顯示開/關(guān)及光標(biāo)設(shè)置
        lcd_write_com(0x06);                        //當(dāng)寫一個(gè)字符后地址指針加1,且光標(biāo)加1
        lcd_write_com(0x01);                        //顯示清屏
}
//---------設(shè)置液晶顯示位置-----------
void set_lcd_pos(uchar p)
{
        lcd_write_com(p|0x80);
}
//---------液晶顯示程序----------
void lcd_print(uchar p,uchar *s,uint low)
{
        uint num;
        set_lcd_pos(p);
        for(num=0;num<low;num++)               
        {
                lcd_write_data(s[num]);
                delay(1);       
        }
}
void HC05_Init()
{
        Tx=1;                                                //觸發(fā)脈沖
        NOP();NOP();NOP();NOP();
        Tx=0;
        distance=0.188*t;                        //距離計(jì)算
}
void distance_convert(long int dat)
{
        cache[0]=dat/1000;
        cache[1]=dat/100%10;
        cache[2]=dat/10%10;
        cache[3]=dat%10;
        temp_dis[9]=cache[0]+'0';
        temp_dis[10]=cache[1]+'0';
        temp_dis[11]=cache[2]+'0';
        temp_dis[13]=cache[3]+'0';
}
//-------keybord_scan----------------------------
//****************鍵盤掃描有關(guān)函數(shù)**********************
void keyscan()
{
        if(key1==0)                          //key1為功能鍵(設(shè)置鍵)
        {
        delay(9);                            //延時(shí),用于消抖動(dòng)
        if(key1==0)                          //延時(shí)后再次確認(rèn)按鍵按下
        {
    buzzer=0;                           //蜂鳴器短響一次
    delay(20);
    buzzer=1;
        while(!key1);
        key1n++;
        if(key1n==8)
                key1n=1;                      //設(shè)置按鍵共有秒、分、時(shí)、星期、日、月、年、返回,8個(gè)功能循環(huán)
        switch(key1n)
        {
       
        case 1:
                        lcd_write_com(yh+0x02);         //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                           lcd_write_com(0x0f);            //設(shè)置光標(biāo)為閃爍
                   //        temp=(miao)/10*16+(miao)%10;    //秒數(shù)據(jù)寫入DS1302
                           //write_1302(0x8e,0x00);
                           //write_1302(0x80,0x80|temp);//miao
                    //write_1302(0x8e,0x80);
                           break;
        case 2:  lcd_write_com(yh+4);             //按2次fen位置顯示光標(biāo)
                       
                     lcd_write_com(0x0f);
                        break;
        case 3: lcd_write_com(yh+5);               //按動(dòng)3次,shi
                     lcd_write_com(0x0f);
                        break;
        case 4: lcd_write_com(yh+12);           //按動(dòng)4次,week
                     lcd_write_com(0x0f);
                        break;
        case 5: lcd_write_com(yh+13);           //按動(dòng)5次,ri
                     lcd_write_com(0x0f);
                        break;
        case 6: lcd_write_com(yh+14);           //按動(dòng)6次,yue
                     lcd_write_com(0x0f);
                        break;
       
               
        case 7:
                        lcd_write_com(0x0c);             //按動(dòng)到第8次,設(shè)置光標(biāo)不閃爍
                                                                                       
                       
            }

          }

        }
//------------------------------加鍵key2----------------------------               
        if(key1n!=0)                     //當(dāng)key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零)
        {

        if(key2==0)                     //上調(diào)鍵
        {
        delay(10);
        if(key2==0)
        {
    buzzer=0;                      //蜂鳴器短響一次
    delay(20);
    buzzer=1;
        while(!key2);
        switch(key1n)
        {
        case 1:b1++;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                if(b1==10)
                        b1=0;           
                        lcd_write_data(table1[b1]);   
                       
                        //write_1602com(0x0b);
                        break;
       
        case 2:b2++;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                if(b2==10)
                        b2=0;           
                        lcd_write_data(table1[b2]);   
                       
                        //write_1602com(0x0b);
                        break;
        case 3:b3++;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                if(b3==10)
                        b3=0;           
                        lcd_write_data(table1[b3]);   
                               
                                //write_1602com(0x0b);
                        break;
                       
        case 4:b4++;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                        if(b4==10)
                                b4=0;           
                                lcd_write_data(table1[b4]);   
                               
                                //write_1602com(0x0b);
                                break;
        case 5:b5++;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                        if(b5==10)
                                b5=0;           
                                lcd_write_data(table1[b5]);   
                               
                                //write_1602com(0x0b);
                                break;
        case 6:b6++;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                        if(b6==10)
                                b6=0;           
                                lcd_write_data(table1[b6]);   
                               
                                //write_1602com(0x0b);
                                break;
              }

          }

        }
        //------------------減鍵key3,各句功能參照'加鍵'注釋---------------
        if(key3==0)
        {
        delay(10);                        //調(diào)延時(shí),消抖動(dòng)
        if(key3==0)
        {
    buzzer=0;                        //蜂鳴器短響一次
    delay(20);
    buzzer=1;
        while(!key3);
        switch(key1n)
        {
                case 1:b1--;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                if(b1==-1)
                        b1=9;           
                        lcd_write_data(b1);   
                       
                        //write_1602com(0x0b);
                        break;
       
        case 2:b2--;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                if(b2==-1)
                        b2=9;           
                        lcd_write_data(b2);   
                       
                        //write_1602com(0x0b);
                        break;
        case 3:b3--;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                if(b3==-1)
                        b3=9;           
                        lcd_write_data(b3);   
                               
                                //write_1602com(0x0b);
                        break;
                       
        case 4:b4--;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                        if(b4==-1)
                                b4=9;           
                                lcd_write_data(b4);   
                               
                                //write_1602com(0x0b);
                                break;
        case 5:b5--;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                        if(b5==-1)
                                b5=9;           
                                lcd_write_data(b5);   
                               
                                //write_1602com(0x0b);
                                break;
        case 6:b6--;                  //設(shè)置鍵按動(dòng)1次,調(diào)秒
                        if(b6==-1)
                                b6=9;           
                                lcd_write_data(b6);   
                               
                                //write_1602com(0x0b);
                                break;
                               
           }

         }
   }

        }

}
//------------------------------------------------
//------------主程序-----------
void main()
{
        lcd_init();
        delay(5);
        TMOD=0x19;
        EA=1;                        //開總中斷
        TR0=1;                        //啟動(dòng)定時(shí)器
        EX0=1;                        //開外部中斷
        IT0=1;                        //設(shè)置為下降沿中斷方式
        while(1)
        {
                HC05_Init();
                distance_convert(distance);
                lcd_print(0x00,table,16);
                lcd_print(0x40,temp_dis,16);
        }
}
//外部中斷0
void int0() interrupt 0
{
        t=(TH0*256+TL0);        //計(jì)算高電平持續(xù)的時(shí)間,上升沿到來時(shí)候開始計(jì)時(shí),下降沿到來進(jìn)入外部中斷,關(guān)閉計(jì)時(shí)器,停止計(jì)時(shí)
        TH0=0;
        TL0=0;
}


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

使用道具 舉報(bào)

沙發(fā)
ID:65341 發(fā)表于 2014-9-8 11:30 | 只看該作者
按鍵的原理圖?
回復(fù)

使用道具 舉報(bào)

板凳
ID:65824 發(fā)表于 2014-9-8 12:03 | 只看該作者
獨(dú)立按鍵   連接在3.5 3.6 3.7
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩精品在线 | av大片 | 久久精品国产久精国产 | 一区二区三区视频在线观看 | 黄色在线免费播放 | 日韩电影中文字幕 | 精品久久不卡 | 国产一区二区三区免费 | 亚洲精品免费在线 | ririsao久久精品一区 | 亚洲精品一区二区在线观看 | 最新毛片网站 | 成人影院网站ww555久久精品 | www.99精品| 日本黄色不卡视频 | av黄色在线| 欧美精品二区 | 高清国产午夜精品久久久久久 | av手机在线看 | 色综合天天综合网国产成人网 | 欧美电影一区 | 国产成人99久久亚洲综合精品 | 久草视频观看 | 久久久噜噜噜久久中文字幕色伊伊 | 欧美精品一区久久 | 爱爱视频网 | 一级免费毛片 | 天天操夜夜操 | 欧美日韩久久 | 亚洲成a人片 | 人人人人干 | 一级片免费网站 | 91精品国产综合久久婷婷香蕉 | 羞羞网站免费 | 一区二区三区在线免费看 | 久久久久亚洲 | 中文字幕亚洲精品在线观看 | 精品视频一区二区三区在线观看 | 成人伊人 | 午夜影院毛片 | 国产在线中文字幕 |