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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1202|回復: 7
收起左側

單片機程序中72行有個錯誤不會改 求大神

[復制鏈接]
ID:498292 發(fā)表于 2019-4-15 10:51 | 顯示全部樓層 |閱讀模式
#include <reg52.h>                 //調用單片機頭文件
#define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535
uchar d_miao,d_fen = 0,d_shi;
uchar flag_bai_hei;         //白天的晚上的標志位
uchar value;
uint bai_3l_price = 60;        //白天3千米內的單價       6元
uint bai_3w_price = 18;        //白天3千米外的單價/千米         1.8元
uint bai_wait_price = 5;       //白天等待時的單價/分鐘         0.5元
uint wan_3l_price = 70;        //晚上3千米內的單價/千米         7元
uint wan_3w_price = 22;        //晚上3千米外的單價/千米         2.2元
uint wan_wait_price = 10;       //晚上等待時的單價/分鐘         1元
uint distance = 0;    //行使的距離
uint zong_jia;        //總的價
bit flag_200ms = 0;
bit flag_1s ;
bit flag_time_en = 0;
uchar flag_time_xs = 1;    //顯示時間和等待時間切換
sbit beep = P3^7;   //蜂鳴器IO口定義
uchar i;
sbit clk = P1^3;          //ds1302時鐘線定義
sbit io =  P1^4;          //數(shù)據(jù)線
sbit rst = P1^5;          //復位線
                                                //秒  分   時   日   月  年   星期         
uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //寫地址
uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //讀地址
uchar code init_ds[]  ={0x55,0x17,0x15,0x01,0x05,0x15,0x13};   
uchar idata miao,fen,shi,ri,yue,week,nian;
uchar t1_num,t2_num;        //計時間中斷的次數(shù)
unsigned long  speed1,juli,time2;
float f_hz,speed_km,speed_m;
uchar TH11,TL11;
uchar flag_en;   //開始計算速度使能
uchar flag_stop_en;   //要確定車子是否停下了
uint juli_s;             //每秒走的距離
uint juli_z;         //總路程
float zhijing = 0.75;  //直徑 0.55M
bit flag_1s = 1;             //1s
uchar menu_1;        //菜單設置變量
uchar menu_2;        //菜單設置變量
uint shudu;   //定義速度的變量
uint bj_shudu = 80;         //報警速度
uchar flag_ds_en;
long zong_lc;        //總量程

#include "lcd1602.h"
/***********************1ms延時函數(shù)*****************************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<120;j++);
}
#include "iic.h"
void write_iic_data()
{
        write_24c02(0,flag_bai_hei);
        write_24c02(1,bai_3l_price % 256);   //保存數(shù)據(jù)
        write_24c02(2,bai_3l_price / 256);   //保存數(shù)據(jù)
        write_24c02(3,bai_3w_price % 256);   //保存數(shù)據(jù)                 
        write_24c02(4,bai_3w_price / 256);   //保存數(shù)據(jù)               
        write_24c02(5,bai_wait_price % 256);   //保存數(shù)據(jù)               
        write_24c02(6,bai_wait_price / 256);   //保存數(shù)據(jù)            
        write_24c02(7,wan_3l_price % 256);   //保存數(shù)據(jù)
        write_24c02(8,wan_3l_price / 256);   //保存數(shù)據(jù)
        write_24c02(9,wan_3w_price % 256);   //保存數(shù)據(jù)                 
        write_24c02(10,wan_3w_price / 256);   //保存數(shù)據(jù)               
        write_24c02(11,wan_wait_price % 256);   //保存數(shù)據(jù)               
        write_24c02(12,wan_wait_price / 256);   //保存數(shù)據(jù)            
}
/****************讀出來保存的數(shù)據(jù)**********************/           
void read_iic_data()
{        
        flag_bai_hei = read_24c02(0);        
        bai_3l_price = read_24c02(2);
        bai_3l_price = bai_3l_price * 256 + read_24c02(1);
        bai_3w_price = read_24c02(4);
        bai_3w_price = bai_3w_price * 256 + read_24c02(3);
        bai_wait_price = read_24c02(6);
        bai_wait_price = bai_wait_price * 256 + read_24c02(5);
        wan_3l_price = read_24c02(8);
        wan_3l_price = wan_3l_price * 256 + read_24c02(7);
        wan_3w_price = read_24c02(10);
        wan_3w_price = wan_3w_price * 256 + read_24c02(9);
        wan_wait_price = read_24c02(12);
        wan_wait_price = wan_wait_price * 256 + read_24c02(11);
}
/********************獨立按鍵程序*****************/
uchar key_can;         //按鍵值
void key()         //獨立按鍵程序
{
        static uchar key_new;
        key_can = 20;                   //按鍵值還原
        P3 |= 0x78;                     //對應的按鍵IO口輸出為1
        if((P3 & 0x78) != 0x78)                //按鍵按下
        {
                delay_1ms(1);                     //按鍵消抖動
                if(((P3 & 0x78) != 0x78) && (key_new == 1))
                {                                                //確認是按鍵按下
                        key_new = 0;
                        switch(P3 & 0x78)
                        {
                                case 0x70:  key_can = 1;  break;         //得到按鍵值
                                case 0x68:  key_can = 2;  break;         //得到按鍵值
                                case 0x58:  key_can = 3;  break;         //得到按鍵值
                                case 0x38:  key_can = 4;  break;         //得到按鍵值
                        }
                        beep = 0;
                        delay_1ms(50);
                        beep = 1;               
                }        
        }
        else
                key_new = 1;        
}
/*************寫一個數(shù)據(jù)到對應的地址里***************/
void write_ds1302(uchar add,uchar dat)
{               
        rst = 1;                         //把復位線拿高
        for(i=0;i<8;i++)
        {                                     //低位在前
                clk = 0;                 //時鐘線拿低開始寫數(shù)據(jù)
                io = add & 0x01;            
                add >>= 1;                 //把地址右移一位
                clk = 1;                 //時鐘線拿高
        }        
        for(i=0;i<8;i++)
        {
                clk = 0;                 //時鐘線拿低開始寫數(shù)據(jù)
                io = dat & 0x01;
                dat >>= 1;                 //把數(shù)據(jù)右移一位
                clk = 1;                 //時鐘線拿高
        }
        rst = 0;                         //復位線合低
        clk = 0;
        io = 0;
}
/*************從對應的地址讀一個數(shù)據(jù)出來***************/
uchar read_ds1302(uchar add)
{
        uchar value,i;
        rst = 1;                         //把復位線拿高
        for(i=0;i<8;i++)
        {                                     //低位在前
                clk = 0;                 //時鐘線拿低開始寫數(shù)據(jù)
                io = add & 0x01;            
                add >>= 1;                 //把地址右移一位
                clk = 1;                 //時鐘線拿高
        }               
        for(i=0;i<8;i++)
        {
                clk = 0;                 //時鐘線拿低開始讀數(shù)據(jù)
                value >>= 1;
                if(io == 1)
                        value |= 0x80;
                clk = 1;                 //時鐘線拿高
        }
        rst = 0;                         //復位線合低
        clk = 0;
        io = 0;
        return value;                 //返回讀出來的數(shù)據(jù)
}

/*************把要的時間 年月日 都讀出來***************/
void read_time()
{
        miao = read_ds1302(read_add[0]);        //讀秒
        fen  = read_ds1302(read_add[1]);        //讀分
        shi  = read_ds1302(read_add[2]);        //讀時
        ri   = read_ds1302(read_add[3]);        //讀日
        yue  = read_ds1302(read_add[4]);        //讀月
        nian = read_ds1302(read_add[5]);        //讀年
        week = read_ds1302(read_add[6]);        //讀星期
}
/*************把要寫的時間 年月日 都寫入ds1302里***************/
void write_time()
{
        write_ds1302(write_add[0],miao);        //寫秒
        write_ds1302(write_add[1],fen);                //寫分
        write_ds1302(write_add[2],shi);                //寫時
        write_ds1302(write_add[3],ri);                //寫日
        write_ds1302(write_add[4],yue);                //寫月
        write_ds1302(write_add[5],nian);        //寫星期
        write_ds1302(write_add[6],week);        //寫年
}

/**********************設置ds1302時間函數(shù)**********************/
void set_ds1302time(uchar num,uchar *shi,uchar dat)         //調時
{
          if(num == 1)
    {
            *shi+=0x01;
                if((*shi & 0x0f) >= 0x0a)
                        *shi = (*shi & 0xf0) + 0x10;
                if(*shi >= dat)
                        *shi = 0;
    }
    else
    {
                if(*shi == 0x00)
                        *shi = dat;
                if((*shi & 0x0f) == 0x00)
                        *shi = (*shi | 0x0a) - 0x10;
                *shi -=0x01 ;
    }  
}

#include "menu.h"

/*********************對應菜單內的處理函數(shù)******************/
void menu_dis()
{
        if(menu_1 == 0)
        {
                if(key_can == 2)                   //清零 從新計價
                {
                        flag_time_en = 0;        
                        d_shi = 0;
                        d_fen = 0;
                        flag_ds_en = 0;
                }
                if(key_can == 4)         //時間和等待的時間的切換
                {
                        flag_time_xs ++;    //為1顯示當前時間
                        if(flag_time_xs > 2)        
                                flag_time_xs = 0;
                        if(flag_time_xs == 0)        //顯示時間
                        {
                                write_string(1,0,"    :  :    W:  ");                        
                                write_string(2,0," 20  -  -       ");        
                        }
                }
                if(flag_200ms == 1)
                {
                        if(distance <= 30)//3公里內的價格
                        {
                                if(flag_bai_hei == 0)
                                {
                                        if((d_fen == 0) && (d_miao <= 10))
                                                zong_jia = bai_3l_price;
                                        else
                                                zong_jia = bai_3l_price + (d_shi * 60*60 +  d_fen*60 + d_miao) * bai_wait_price -bai_wait_price*10;        
                                }                                
                                else
                                {
                                        if((d_fen == 0) && (d_miao <= 10))
                                                zong_jia = wan_3l_price;
                                        else
                                                zong_jia = wan_3l_price + (d_shi * 60*60 +  d_fen*60 + d_miao) * wan_wait_price -bai_wait_price*10;
                                }
                                       
                        }else                          //3公里外的價格
                        {
                                if(flag_bai_hei == 0)
                                {
                                        if((d_fen == 0) && (d_miao <= 10))
                                                zong_jia = bai_3l_price + bai_3w_price * (distance - 30) / 10 ;
                                        else
                                                zong_jia = bai_3l_price + bai_3w_price * (distance - 30) / 10 + (d_shi * 60*60 +  d_fen*60 + d_miao) *  bai_wait_price -bai_wait_price*10;
                                }
                                else
                                {
                                        if((d_fen == 0) && (d_miao <= 10))
                                                zong_jia = wan_3l_price + wan_3w_price * (distance - 30) / 10 ;        
                                        else
                                                zong_jia = wan_3l_price + wan_3w_price * (distance - 30) / 10 + (d_shi * 60*60 +  d_fen*60 + d_miao) *  wan_wait_price -bai_wait_price*10;        
                                }
                        }
                        if(flag_time_xs == 1)          //顯示當前的時間
                        {
                                write_sfm2_ds1302(2,0,shi);  //顯示時        
                                write_data(':');   
                                write_sfm2_ds1302(2,6,miao); //顯示秒
                                write_sfm4(2,10,zong_jia);
                                write_sfm2(1,1,shudu);               
                                write_sfm4(1,9,juli_z);        
                        }
                        else if(flag_time_xs == 2)            //顯示等待時間
                        {
                                write_sfm2(2,1,d_fen);  //顯示分
                                write_data(':');   
                                write_sfm2(2,4,d_miao); //顯示秒
        
                                write_sfm2(1,1,shudu);               
                                write_sfm4(1,9,juli_z);        
                        }
                        else    //顯示當前的時間
                        {
                                write_sfm2_ds1302(1,2,shi);           //顯示時
                                write_sfm2_ds1302(1,5,fen);           //顯示分
                                write_sfm2_ds1302(1,8,miao);        //顯示秒
                                write_sfm1(1,14,week);                           //顯示星期                                       
                                write_sfm2_ds1302(2,6,yue);           //顯示月
                                write_sfm2_ds1302(2,9,ri);           //顯示日
               
                        }
                }
        }
}
/*******************停車計時函數(shù) *****************/
void jishu_chashu()
{        
        if((flag_1s == 1) && (flag_time_en == 1))
        {
                if(flag_ds_en == 1)
                {
                        d_miao++;                        //秒鐘加1
                        if(d_miao >= 60)
                        {
                                d_miao = 0;
                                d_fen ++;                //分鐘加1
                                if(d_fen >= 60)
                                {
                                        d_fen = 0;
                                        d_shi++;
                                        if(d_shi >= 24)
                                        {
                                                d_shi = 0;
                                        }
                                }
                        }
                }               
        }
}

/*************定時器0初始化程序***************/
void time_init()         
{
        EA   = 1;                   //開總中斷
        TMOD = 0X11;          //定時器0、工作方式1
        ET0  = 1;                  //開定時器0中斷
        TR0  = 1;                  //允許定時器0定時
        ET1  = 1;                  //開定時器1中斷
        TR1  = 1;                  //允許定時器1定時
}

/***********外部中斷0初始化程序****************/
void init_int0()
{
        EX0=1;                          //允許外部中斷0中斷
        EA=1;                           //開總中斷
        IT0 = 1;                   //外部中斷0負跳變中斷
}
/***********計算速度函數(shù)**************/
void shudu_dis()          //計算速度函數(shù)
{
        static uchar value,value1;
        if(menu_1 == 0)
        {        
                if(flag_1s == 1)   
                {        
                        flag_1s = 0;                 
                        if(flag_en == 0)
                        {
                                value ++;
                                if(value >= 3)        //2秒
                                {        
                                        speed_km = 0;  //速度為0
                                        shudu = (uint)speed_km;        
                                        value = 0;        
                                        flag_time_en = 1;                        
                                }
                        }
                        if((flag_en == 1))
                        {        
                                value = 0;               
                                flag_en = 0;         
                                 //1s = 1 / 1000000us;          // 1m/s=0.001km除以1/3600h=3.6km/h                        
                                f_hz =(t2_num * 65536.0 + TH11 * 256 + TL11)  / 1000000;  //算出來就是秒
                                speed_m = f_hz * zhijing * 3.14  ;        //算出來的是m/s
                                juli_z = (juli_z + (uint)speed_m) ;        //總路程m        
                                speed_km = speed_m * 3.6 ;        //(帶個小數(shù)點) km/s               
                            shudu = (uint)speed_km;
                                zong_lc += speed_m;
                                distance = juli_z;
                                value1++;
                                flag_time_en = 0;
                        }               
                }
        }
}
/******************主函數(shù)*******************/
void main()
{
        P0 = P1 = P2 = P3 = 0XFF;          //讓IO口全部輸出高電平
        init_1602();                                  //初始化1602液晶
        init_1602_dis_csf();                   //初始化1602液晶顯示
        read_iic_data();                          //把保存的數(shù)據(jù)讀出來
        time_init();                                  //定時器初始化
        init_int0();
        while(1)
        {
                key();                                          //按鍵程序
                menu_dis();        
                if(key_can < 20)
                        key_with();
                shudu_dis();          //計算速度函數(shù)
                if(flag_200ms == 1)
                {
                        flag_200ms = 0;
                        if(menu_1 == 0)
                                read_time();                  //讀時間
                        if((shi >= 0x21) || (shi <= 5))
                                flag_bai_hei = 1;     //晚上模式
                        else                                                         
                                flag_bai_hei = 0;  //白天模式
                }
        }
}
/*************定時器0中斷服務程序***************/
void time0_int() interrupt 1
{        
        static uchar value;
        TH0 = 0x3c;
        TL0 = 0xb0;     // 50ms
        value ++;
        if(value % 4 == 0)
                flag_200ms = 1;
        if(value >= 20)
        {
                flag_1s = 1;
                value = 0;
                jishu_chashu();
        }
}

/*********************外部中斷0中斷服務程序************************/
void int0() interrupt 0
{
        static uchar value;
        switch(value)
        {
                case 0:
                        t1_num = 0;                 //第一次就把變量清零
                        TH1 = 0;
                        TL1 = 0;
                        break;
                case 1:
                                t2_num = t1_num;  //保存
                                TH11 = TH1;
                                TL11 = TL1;
                                flag_en = 1;
                        break;
        }               
        value ++;
        if(value >= 2)
                value =0;
}
/*************定時器1中斷服務程序***************/
void time1_int() interrupt 3
{
        t1_num++;
}

回復

使用道具 舉報

ID:405033 發(fā)表于 2019-4-15 13:59 | 顯示全部樓層
因為你只貼出來代碼,所以一些h文件里面的東西我是沒看到的,錯誤提示有函數(shù)未申明什么的,你有h文件可能就沒有這種錯誤了

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:10947 發(fā)表于 2019-4-15 13:36 | 顯示全部樓層
哪一句是72行?樓主有點懶
回復

使用道具 舉報

ID:94031 發(fā)表于 2019-4-15 13:38 | 顯示全部樓層
工程不完整,把整個工程發(fā)出來。
回復

使用道具 舉報

ID:123289 發(fā)表于 2019-4-15 15:56 | 顯示全部樓層
不長腦子,說72行,又沒有行號!
回復

使用道具 舉報

ID:1 發(fā)表于 2019-4-15 16:11 | 顯示全部樓層
您這個問題給的信息不全,估計是沒人能回答得了的,先轉移到冷門區(qū)了,自行點擊編輯按鈕補充一下吧,審核員會幫你重新轉到熱門問答區(qū)的
回復

使用道具 舉報

ID:498292 發(fā)表于 2019-4-15 16:12 | 顯示全部樓層
瘋子本人 發(fā)表于 2019-4-15 13:59
因為你只貼出來代碼,所以一些h文件里面的東西我是沒看到的,錯誤提示有函數(shù)未申明什么的,你有h文件可能就 ...

這個代碼是論壇里找到的,因為最近在學這個,c有不精通,那么這個h文件該怎么弄呢
回復

使用道具 舉報

ID:405033 發(fā)表于 2019-4-16 17:41 | 顯示全部樓層
jokermen 發(fā)表于 2019-4-15 16:12
這個代碼是論壇里找到的,因為最近在學這個,c有不精通,那么這個h文件該怎么弄呢

你在論壇找的只有只有這些代碼,沒有整個工程文件嗎,這樣的話你的h文件就比較麻煩了,因為你的h文件都是對一些變量或者函數(shù),甚至結構體的定義,沒有h文件會導致有一些東西不能用,所以你只能去找相對應的h文件,例如iic.h文件可能是通用的,在有關iic的工程文件中可能找得到,還有一些自定義的h文件這個是的靠自己去找的
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清视频在线观看 | 蜜桃精品视频在线 | 国产欧美精品一区二区色综合朱莉 | h视频免费观看 | 成人av电影在线观看 | 永久精品| 国产亚洲精品精品国产亚洲综合 | 亚洲系列第一页 | 欧美中文字幕在线观看 | 亚洲欧美在线视频 | 亚洲一区二区三区四区五区午夜 | 四虎成人精品永久免费av九九 | 日日骚网 | 99久久免费观看 | 一区二区三区在线 | 免费在线观看一区二区 | 男人天堂999 | 欧美日韩国产在线观看 | 欧美成人精品激情在线观看 | 久久高清国产视频 | 久久久99精品免费观看 | 天堂免费| 欧美日本亚洲 | 男人的天堂视频网站 | 色爱综合网 | 日韩国产欧美 | 国内精品视频 | 一级免费毛片 | 欧美日韩综合视频 | 91看片网| 免费观看一级毛片 | 精品伊人久久 | 美国a级毛片免费视频 | 国产毛片久久久久久久久春天 | 日韩在线免费看 | 国产一级在线观看 | 国产一级毛片视频 | 国产成人精品午夜视频免费 | www.788.com色淫免费 | 久久精品欧美一区二区三区麻豆 | 亚洲精品久久视频 |