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

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

QQ登錄

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

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

各位大神,論壇搜的基于霍爾傳感器測(cè)電機(jī)轉(zhuǎn)速的程序有錯(cuò)嗎,總仿真不了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. /*端口命名*/
  6. sbit rs=P3^5;                           //LCD的數(shù)據(jù)/命令選擇端
  7. sbit rw=P3^6;                           //LCD的讀寫(xiě)選擇端
  8. sbit lcdcs=P3^4;                   //LCD的使能信號(hào)端
  9. /*定義參數(shù)*/
  10. uint i,z,count,zhuan,msec;                                //定義參數(shù)
  11. uchar display[]={" speed=       r/min"};        //定義顯示參數(shù)
  12. /*毫秒延時(shí)*/
  13. void delay(uint ms)
  14. {
  15.    uint i,j;
  16.    for(j=0;j<ms;j++)
  17.         for(i=0;i<120;i++);
  18. }
  19. /*向LCD1602寫(xiě)命令*/
  20. void write_command(uchar command)
  21. {
  22.   rs=0;            //選擇寫(xiě)命令
  23.   P0=command;           //向        LCD寫(xiě)命令
  24.   delay(5);                   //稍作延遲,代替檢測(cè)忙狀態(tài)
  25.   lcdcs=1;                   //信號(hào)使能端高電平
  26.   delay(5);
  27.   lcdcs=0;                   //信號(hào)使能端低電平
  28. }
  29. void write_data(uchar data0)
  30. {
  31. rs=1;                           //選擇寫(xiě)數(shù)據(jù)
  32. P0=data0;                   //向LCD寫(xiě)數(shù)據(jù)
  33. delay(5);
  34. lcdcs=1;                   //信號(hào)使能端高電平
  35. delay(5);
  36. lcdcs=0;                   //信號(hào)使能端低電平
  37. }
  38. /*外部中斷0計(jì)數(shù)程序*/
  39. void counter(void)interrupt 0
  40. {
  41.         EX0=0;                                  //關(guān)外部中斷0
  42.         count++;
  43.         if(count==2)
  44.         {
  45.           count=0;          //初始化計(jì)數(shù)
  46.           z++;                  //轉(zhuǎn)圈計(jì)數(shù)加1
  47.         }
  48.         EX0=1;                   //開(kāi)外部中斷0
  49.         return;
  50.         }
  51. /*LCD顯示*/
  52. void displaytolcd()
  53. {
  54.         write_command(0x80);                  //向LCD1602寫(xiě)命令80H(顯示第一行)
  55.         for(i=0;i<sizeof(display)-1;i++)        //循環(huán)要傳輸?shù)淖址麄(gè)數(shù)次,每一次傳輸一個(gè)字符
  56.         {
  57.            write_data(display[i]);
  58.            delay(5);
  59.         }
  60. }
  61. /*內(nèi)部中斷0計(jì)時(shí)計(jì)數(shù)程序*/
  62. void Timer_0(void)interrupt 1
  63. {
  64.         TH0=0x3c;                 //50ms定時(shí)
  65.     TL0=0xb0;
  66.         msec++;
  67.         if(msec==20)         //50*20=1s
  68.         {
  69.                 msec=0;
  70.                 zhuan=60*z;
  71.                 displaytolcd();
  72.                 count=0;
  73.                 z=0;
  74.         }
  75. }
  76. /*端口初始化*/
  77. void int_all()
  78. {
  79.         z=0;                                  //初始化z的值
  80.         count=0;                          //初始化count的值
  81.         zhuan=0;                          //初始化轉(zhuǎn)的值
  82.         rw=0;                                  //選擇LCD寫(xiě)數(shù)據(jù)指令
  83.         delay(15);                          //延時(shí)15ms
  84.         write_command(0x38);  //向LCD1602寫(xiě)命令38H
  85.         delay(5);                          //延時(shí)5ms
  86.         write_command(0x0e);  //向LCD1602寫(xiě)命令0EH
  87.         delay(5);                          //延時(shí)5ms
  88.         write_command(0x06);  //向LCD1602寫(xiě)命令06H
  89.         TMOD=0x01;                          //內(nèi)部中斷定時(shí)器選擇
  90.         TH0=0x3c;                          //50ms定時(shí)
  91.     TL0=0xb0;
  92.     EA=1;                                  //開(kāi)中斷總開(kāi)關(guān)
  93.         ET0=1;                                  //開(kāi)內(nèi)部中斷0
  94.         TR0=1;                                  //計(jì)時(shí)器開(kāi)始工作
  95.         IT0=1;                                  //外部中斷0為下降沿觸發(fā)
  96.         EX0=1;                                  //開(kāi)外部中斷0
  97. }
  98. /*數(shù)據(jù)處理*/
  99. void disp_count()
  100. {        
  101.         display[9]=(zhuan/1000+'0');                  //轉(zhuǎn)換轉(zhuǎn)速的千位
  102.         display[10]=(zhuan/100%10+'0');                  //轉(zhuǎn)換轉(zhuǎn)速的百位
  103.         display[11]=(zhuan/10%10+'0');
  104.         display[12]=(zhuan%10+'0');
  105. }
  106. /*主函數(shù)*/
  107. void main()
  108. {
  109.         int_all();           //全局初始化
  110.         while(1);
  111.         {
  112.                 disp_count();                          //數(shù)據(jù)處理
  113. //                warning_speed();    //轉(zhuǎn)速警告
  114.                 displaytolcd();                          //LCD顯示
  115.         }
  116. }
  117.                              
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +4 收起 理由
cxzycmj + 4 很給力!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:61876 發(fā)表于 2017-7-15 13:09 | 只看該作者
原理圖看不太清楚,應(yīng)該先檢測(cè)一下光耦的輸出波形。我覺(jué)著光耦的限流電阻太大了,應(yīng)該根據(jù)光耦的參數(shù)計(jì)算一下重新取值。
回復(fù)

使用道具 舉報(bào)

板凳
ID:34643 發(fā)表于 2017-7-15 20:47 | 只看該作者
從程序與你的仿真圖來(lái)看,是你的電路沒(méi)連接對(duì),程序是這樣寫(xiě)的:
sbit rs=P3^5;                           //LCD的數(shù)據(jù)/命令選擇端
sbit rw=P3^6;                           //LCD的讀寫(xiě)選擇端
sbit lcdcs=P3^4;                   //LCD的使能信號(hào)端

你檢查一下你連接的電路,相關(guān)電路連接到了P2端口了。你要修改一下程序,或是電路,讓程序與電路對(duì)應(yīng)起來(lái)。
回復(fù)

使用道具 舉報(bào)

地板
ID:219769 發(fā)表于 2017-7-18 10:11 | 只看該作者
改了端口,加了個(gè)示波器也有顯示出輸入信號(hào)源方波是有的,但是還是沒(méi)有顯示出轉(zhuǎn)速???
各位大神,還有什么問(wèn)題的嗎??
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
/*端口命名*/
sbit rs=P2^7;                           //LCD的數(shù)據(jù)/命令選擇端
sbit rw=P2^6;                           //LCD的讀寫(xiě)選擇端
sbit lcdcs=P2^5;                   //LCD的使能信號(hào)端
/*定義參數(shù)*/
uint i,z,count,zhuan,msec;                                //定義參數(shù)
uchar display[]={" speed=       r/min"};        //定義顯示參數(shù)
/*毫秒延時(shí)*/
void delay(uint ms)
{
   uint i,j;
   for(j=0;j<ms;j++)
        for(i=0;i<114;i++);
}
/*向LCD1602寫(xiě)命令*/
void write_command(uchar command)
{
  rs=0;            //選擇寫(xiě)命令
  P0=command;           //向        LCD寫(xiě)命令
  delay(5);                   //稍作延遲,代替檢測(cè)忙狀態(tài)
  lcdcs=1;                   //信號(hào)使能端高電平
  delay(5);
  lcdcs=0;                   //信號(hào)使能端低電平
}
void write_data(uchar data0)
{
rs=1;                           //選擇寫(xiě)數(shù)據(jù)
P0=data0;                   //向LCD寫(xiě)數(shù)據(jù)
delay(5);
lcdcs=1;                   //信號(hào)使能端高電平
delay(5);
lcdcs=0;                   //信號(hào)使能端低電平
}
/*外部中斷0計(jì)數(shù)程序*/
void counter(void)interrupt 0
{
        count++;
        if(count==2)
        {
          count=0;          //初始化計(jì)數(shù)
          z++;                  //轉(zhuǎn)圈計(jì)數(shù)加1
        }
        return;
        }
/*LCD顯示*/
void displaytolcd()
{
        write_command(0x80);                  //向LCD1602寫(xiě)命令80H(顯示第一行)
        for(i=0;i<sizeof(display)-1;i++)        //循環(huán)要傳輸?shù)淖址麄(gè)數(shù)次,每一次傳輸一個(gè)字符
        {
           write_data(display);
           delay(5);
        }
}
/*內(nèi)部中斷0計(jì)時(shí)計(jì)數(shù)程序*/
void Timer_0(void)interrupt 1
{
        TH0=0x4b;                 //50ms定時(shí)
    TL0=0xfd;
        msec++;
        if(msec==20)         //50*20=1s
        {
                msec=0;
                zhuan=60*z;
                displaytolcd();

                count=0;
                z=0;
        }
}
/*端口初始化*/
void int_all()
{
        z=0;                                  //初始化z的值
        count=0;                          //初始化count的值
        zhuan=0;                          //初始化轉(zhuǎn)的值
        rw=0;                                  //選擇LCD寫(xiě)數(shù)據(jù)指令
        delay(15);                          //延時(shí)15ms
        write_command(0x38);  //向LCD1602寫(xiě)命令38H
        delay(5);                          //延時(shí)5ms
        write_command(0x0e);  //向LCD1602寫(xiě)命令0EH
        delay(5);                          //延時(shí)5ms
        write_command(0x06);  //向LCD1602寫(xiě)命令06H
        TMOD=0x01;                          //內(nèi)部中斷定時(shí)器選擇
        TH0=0x4b;                          //50ms定時(shí)
    TL0=0xfd;
    EA=1;                                  //開(kāi)中斷總開(kāi)關(guān)
        ET0=1;                                  //開(kāi)內(nèi)部中斷0
        TR0=1;                                  //計(jì)時(shí)器開(kāi)始工作
        IT0=1;                                  //外部中斷0為下降沿觸發(fā)
        EX0=1;                                  //開(kāi)外部中斷0
}
/*數(shù)據(jù)處理*/
void disp_count()
{       
        display[9]=(zhuan/1000+'0');                  //轉(zhuǎn)換轉(zhuǎn)速的千位
        display[10]=(zhuan/100%10+'0');                  //轉(zhuǎn)換轉(zhuǎn)速的百位
        display[11]=(zhuan/10%10+'0');
        display[12]=(zhuan%10+'0');
}
/*主函數(shù)*/
void main()
{
        int_all();           //全局初始化
        while(1);
        {
                disp_count();                          //數(shù)據(jù)處理

                displaytolcd();                          //LCD顯示
        }
}
                                                               
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在视频一区二区三区吞精 | 一区二区精品 | 婷婷色婷婷| 综合精品在线 | 欧美精品在线一区二区三区 | 在线综合视频 | 国产一二三视频在线观看 | 国产成人精品久久二区二区91 | 日韩免费视频一区二区 | 国产欧美一区二区精品久导航 | 日本精品久久 | 国产日韩欧美精品 | 午夜精品一区二区三区免费视频 | 自拍第一页 | 国产精品日韩欧美一区二区三区 | 成人片免费看 | 欧美视频一级 | 欧美综合精品 | 91视频在线看 | 亚洲成人av在线播放 | 在线亚洲精品 | 国产成人精品一区二区三区在线 | 一区二区不卡视频 | 伊人中文字幕 | 久久一日本道色综合久久 | 国产一二区在线 | 中文字幕二区 | 91亚洲国产成人精品一区二三 | 色伊人网| 伊人久久在线观看 | 久久成人一区 | 91pao对白在线播放 | 精品视频一区二区三区在线观看 | 亚洲一区二区免费视频 | 天天曰夜夜 | 黄色欧美| www.中文字幕.com | 国产一区2区 | 国产精品久久久亚洲 | 午夜欧美 | 亚洲黄色av |