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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

希望大神給一個霍爾測速 1602顯示速度和里程的51程序 求幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:328660 發表于 2018-5-22 15:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣

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

使用道具 舉報

沙發
ID:419294 發表于 2018-11-2 09:26 | 只看該作者
#include<reg52.h>
#include<intrins.h>  //包含_nop_();函數定義的頭文件
void timer0_int();
sbit LED=P3^7;
sbit E=P3^2;  //1602使能引腳
sbit RW=P3^1;  //1602讀寫引腳  
sbit RS=P3^0;  //1602數據/命令選擇引腳
unsigned char hour,minute,second;
unsigned char n,count;
unsigned long lengthbuf,lengthvalue;
unsigned char code
Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   
//0~9的共陰極七段管代碼
unsigned char code
Table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};   
//0~9的共陰極七段管代碼帶小數點
void Delay0(int Times);
void Display(unsigned int x);
void delay()  //延時5US
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
bit Busy(void)     //讀狀態函數判斷液晶模塊的忙碌狀態
{
bit busy_flag = 0;
RS = 0;
RW = 1;
E = 1;
delay();
busy_flag = (bit)(P0 & 0x80);
E = 0;
return busy_flag;
}
void wcmd(unsigned char del)  //將模式設置指令或顯示地址寫入液晶模
{
while(Busy());
RS = 0;
RW = 0;
E = 0;
delay();
P0 = del;
delay();
E = 1;
delay();
E = 0;
}
void wdata(unsigned char del)   
///將數據字符ASCII碼寫入液晶
{
while(Busy());
RS = 1;
RW = 0;
E = 0;
delay();
P0 = del;
delay();
E = 1;
delay();
E = 0;
}
void L1602_init(void)   //初始化液晶模塊
{
wcmd(0x38);  //功能設置8位字長2行5*7點陣
wcmd(0x0c);  //顯示設置顯示屏右移
wcmd(0x06);  //顯示設置光標右移字符不移
wcmd(0x01);     //清屏命令
}

void L1602_string(unsigned char hang,unsigned char lie,unsigned char p)   
//將數據寫入液晶模塊
{
unsigned char a;
if(hang == 1) a = 0x80;      //顯示在第一行
if(hang == 2) a = 0xc0;      //顯示在第一行
a = a + lie -1;
wcmd(a);
wdata(p);
}
void timer0_int() interrupt 1 using 3     //中斷用于構成時鐘
{
n++;
if(n==100)
{
n=0;
  count++;
  second++;
  if(second>=60)
      {  
        second=0;
         minute++;
       if(minute>=60)
      {
     minute=0;
      hour++;
      if(hour>=24) hour=0;
    }
   }
  }
   if(count==5)
     {   
       count=0;
    lengthvalue=(TL1+TH1*256)*215-lengthbuf;
    lengthbuf=(TL1+TH1*256)*215;
     }
   TH0=0xd8;
   TL0=0xf0;
    }  

int timer()             //以秒為單位計算運行總時間
{
   unsigned char a=100;
   unsigned char b;
   b=second+minute*60+hour*60*60;
return b;
}
void Delay0(int Time)                      //延時子程序
{
int i;
unsigned char j;
   for(i=0;i<Time;i++)
      {
       for(j=0;j<150;j++)  
         {
          }
       }
}
void Display(unsigned int x)       //在LED七段管中顯示最高速度
{
unsigned  char slc;  
unsigned char a,b,c,d;
slc=0xef;           //LED七段管選通
a= x/1000;
b=( x-a*1000)/100;
c=( x-a*1000-b*100)/10;
d= x%10;
  {  
     P2=slc;           //分別將最大速度的各個位掃描顯示
  slc=slc<<1;
  P1=Table[a];
  Delay0(10);
  P2=slc;
  slc=slc<<1;
  P1=Table1[b];
  Delay0(10);
  P2=slc;
  slc=slc<<1;
  P1=Table[c];
  Delay0(10);
  P2=slc;

  slc=slc<<1;
  P1=Table[d];
  Delay0(10);
  }
return;
}
void main()
{
unsigned char i=0 ;
unsigned int v=0;      //運行速度
unsigned int vnow;      //當前速度
unsigned int a,b,c,d;     //分別顯示速度的十位個位十分位 百分位 
unsigned long quanshu;     //定義車輪轉動圈數
unsigned long
length,length1,length2,length3,length4,length5,length6;  
unsigned int second1,second2,minute1,minute2,hour1,hour2;
L1602_init();
TMOD=0x51;    //定時器T0計數器T1允許外部中斷T1工作方式01
    TH1=0x00;    //計數器T1高位裝初值
    TL1=0x00;    //計數器T1低位裝初值
    ET1=1;     //計數器0開中斷
    TR1=1;     //計數器0開始工作        
TH0=0XD8;    //T0設置時間常數
TL0=0XF0;
ET0=1;
EA=1;
TR0=1;
IT1=1;     //外部中斷1請求觸發方式
EX1=1;
P1=0X00;     //P1、P2口裝初值用于LED七段管顯示用
P2=0xff;
while(1)
{
quanshu=TL1+TH1*256;  //計算車輪旋轉圈數
length=quanshu*215;  //騎行距離
                  //計算里程各個進位
length1=length/100000;
length2=(length-length1*100000)/10000;
length3=(length-length1*100000-length2*10000)/1000;
length4=(length-length1*100000-length2*10000-length3*1000)/100;
length5=(length-length1*100000-length2*10000-length3*1000-length4
*100)/10;
length6=length%10;
if(timer()>0)
v=length/timer();       //計算速度
    vnow=lengthvalue/5;       //計算當前速度5秒內
if(vnow>=695) LED=0;else LED=1;    //速度超過6.95m/s(即
Display(vnow);        //在LED七段管上顯示當前速度5秒內速度
Delay0(20);
a=(v/1000);               //計算速度的各個進位
b=(v-a*1000)/100;
c=(v-a*1000-b*100)/10;
d=v%10;
second1=second/10;       //計算分秒時的十位與個位
second2=second%10;
minute1=minute/10;
minute2=minute%10;
hour1=hour/10;
hour2=hour%10;
L1602_string(1,1,'s');         //在LCD相應位置顯示變量或者常量
L1602_string(1,2,'p');
L1602_string(1,3,'e');
L1602_string(1,4,'e');
L1602_string(1,5,'d');
L1602_string(1,6,' ');
L1602_string(1,7,'L');
L1602_string(1,8,'=');
L1602_string(1,9,length1+48);
L1602_string(1,10,length2+48);
L1602_string(1,11,length3+48);
L1602_string(1,12,length4+48);
L1602_string(1,13,'.');
L1602_string(1,14,length5+48);
L1602_string(1,15,length6+48);
L1602_string(1,16,'m');
L1602_string(2,1,a+48);      
L1602_string(2,2,b+48);
L1602_string(2,3,'.');
L1602_string(2,4,c+48);
L1602_string(2,5,d+48);
L1602_string(2,6,'m');
L1602_string(2,7,'/');
L1602_string(2,8,'s');
L1602_string(2,9,hour1+48);
L1602_string(2,10,hour2+48);
L1602_string(2,11,':');
L1602_string(2,12,minute1+48);
L1602_string(2,13,minute2+48);
L1602_string(2,14,':');
L1602_string(2,15,second1+48);
L1602_string(2,16,second2+48);
while(i<2)           //LCD顯示延遲
{delay();
i++; }
i=0;
}
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品网站| 午夜男人的天堂 | 二区在线观看 | 插插宗合网 | 欧美日韩视频在线播放 | 在线播放国产视频 | 久久久久久国 | 韩日一区二区三区 | 成人午夜精品 | 国产精品日韩 | 成人精品视频在线观看 | 国产精品久久久久久模特 | 日日做夜夜爽毛片麻豆 | 日韩视频在线免费观看 | 精品亚洲一区二区三区 | 国产伦精品一区二区三区照片91 | 亚洲一区av | 欧美精品综合 | 日韩在线免费视频 | 久久久久无码国产精品一区 | 国产最新精品视频 | 一区二区av | 九九热在线精品视频 | 91精品国产综合久久福利软件 | 欧美日韩18 | 一区二区三区视频在线观看 | 国产视频一视频二 | 亚洲欧美综合精品久久成人 | 国产一级免费在线观看 | 日韩欧美国产一区二区三区 | 亚洲在线一区二区 | 97久久精品午夜一区二区 | 天堂资源最新在线 | 91大神xh98xh系列全部 | 午夜精品视频 | 欧美日韩亚洲系列 | 国产在线精品一区 | 天天干天天玩天天操 | 日本成人区 | 午夜免费视频 | 欧美成人精品激情在线观看 |