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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2524|回復: 2
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:65824 發表于 2014-9-8 10:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
超聲波可以正常測距  但是按鍵無法設定報警距離    (報警模塊現在還沒有加)

//--------------------------------------
#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;                             //設置鍵
sbit key2=P3^6;                             //加鍵
sbit key3=P3^7;                             //減鍵
sbit buzzer=P2^3;                            //蜂鳴器,通過三極管9012驅動,端口低電平響

//------超聲波引腳-------
sbit Tx=P3^3;                //觸發控制信號輸入
sbit Rx=P3^2;                //回響信號輸出
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};

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



//-------讀LCD狀態-------
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時,寫指令,RS為1時,寫數據
        LCD_RW=0;
        P0=com;
        NOP();
        LCD_EN=1;
        NOP();
        LCD_EN=0;
}
//----------LCD寫數據----------
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顯示模式設置
        lcd_write_com(0x0c);                        //LCD顯示開/關及光標設置
        lcd_write_com(0x06);                        //當寫一個字符后地址指針加1,且光標加1
        lcd_write_com(0x01);                        //顯示清屏
}
//---------設置液晶顯示位置-----------
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;                                                //觸發脈沖
        NOP();NOP();NOP();NOP();
        Tx=0;
        distance=0.188*t;                        //距離計算
}
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----------------------------
//****************鍵盤掃描有關函數**********************
void keyscan()
{
        if(key1==0)                          //key1為功能鍵(設置鍵)
        {
        delay(9);                            //延時,用于消抖動
        if(key1==0)                          //延時后再次確認按鍵按下
        {
    buzzer=0;                           //蜂鳴器短響一次
    delay(20);
    buzzer=1;
        while(!key1);
        key1n++;
        if(key1n==8)
                key1n=1;                      //設置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環
        switch(key1n)
        {
       
        case 1:
                        lcd_write_com(yh+0x02);         //設置按鍵按動一次,秒位置顯示光標
                           lcd_write_com(0x0f);            //設置光標為閃爍
                   //        temp=(miao)/10*16+(miao)%10;    //秒數據寫入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位置顯示光標
                       
                     lcd_write_com(0x0f);
                        break;
        case 3: lcd_write_com(yh+5);               //按動3次,shi
                     lcd_write_com(0x0f);
                        break;
        case 4: lcd_write_com(yh+12);           //按動4次,week
                     lcd_write_com(0x0f);
                        break;
        case 5: lcd_write_com(yh+13);           //按動5次,ri
                     lcd_write_com(0x0f);
                        break;
        case 6: lcd_write_com(yh+14);           //按動6次,yue
                     lcd_write_com(0x0f);
                        break;
       
               
        case 7:
                        lcd_write_com(0x0c);             //按動到第8次,設置光標不閃爍
                                                                                       
                       
            }

          }

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

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

          }

        }
        //------------------減鍵key3,各句功能參照'加鍵'注釋---------------
        if(key3==0)
        {
        delay(10);                        //調延時,消抖動
        if(key3==0)
        {
    buzzer=0;                        //蜂鳴器短響一次
    delay(20);
    buzzer=1;
        while(!key3);
        switch(key1n)
        {
                case 1:b1--;                  //設置鍵按動1次,調秒
                if(b1==-1)
                        b1=9;           
                        lcd_write_data(b1);   
                       
                        //write_1602com(0x0b);
                        break;
       
        case 2:b2--;                  //設置鍵按動1次,調秒
                if(b2==-1)
                        b2=9;           
                        lcd_write_data(b2);   
                       
                        //write_1602com(0x0b);
                        break;
        case 3:b3--;                  //設置鍵按動1次,調秒
                if(b3==-1)
                        b3=9;           
                        lcd_write_data(b3);   
                               
                                //write_1602com(0x0b);
                        break;
                       
        case 4:b4--;                  //設置鍵按動1次,調秒
                        if(b4==-1)
                                b4=9;           
                                lcd_write_data(b4);   
                               
                                //write_1602com(0x0b);
                                break;
        case 5:b5--;                  //設置鍵按動1次,調秒
                        if(b5==-1)
                                b5=9;           
                                lcd_write_data(b5);   
                               
                                //write_1602com(0x0b);
                                break;
        case 6:b6--;                  //設置鍵按動1次,調秒
                        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;                        //啟動定時器
        EX0=1;                        //開外部中斷
        IT0=1;                        //設置為下降沿中斷方式
        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);        //計算高電平持續的時間,上升沿到來時候開始計時,下降沿到來進入外部中斷,關閉計時器,停止計時
        TH0=0;
        TL0=0;
}


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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩av电影院 | 午夜精品一区二区三区在线 | 成人二区三区 | 中文字幕一区二区三区乱码图片 | 日本免费一区二区三区 | 综合久久久 | 久久国产高清 | 热re99久久精品国99热观看 | 一区二区三区视频在线观看 | 热久久性 | 久久99精品久久久久久国产越南 | 国产免费一区二区 | 6080yy精品一区二区三区 | 羞羞午夜 | 一区二区精品 | www.亚洲视频.com| 久久久国产一区二区三区四区小说 | 午夜寂寞福利视频 | 国产黄色在线观看 | 欧美一级网站 | 影音av| 精品亚洲一区二区三区 | 日韩国产欧美一区 | 国产精品久久久久久久久久免费 | 九九亚洲 | 六月色婷 | www.久草 | 国产精品久久久久久久久久久免费看 | 天堂资源 | 91精品国产91久久久久久吃药 | 我要看黄色录像一级片 | 欧美激情在线精品一区二区三区 | 精久久久| 亚洲欧美另类在线观看 | 国产精品亚洲二区 | 日韩精彩视频 | 欧美精品在欧美一区二区少妇 | 一区精品视频 | 久久精品国产一区二区电影 | 国产精品一区二区久久精品爱微奶 | 欧美老妇交乱视频 |