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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

電位器控制電機轉速測量速度單片機程序,AD,PWM,測速,1602液晶

  [復制鏈接]
跳轉到指定樓層
樓主
ID:91350 發表于 2015-10-1 00:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>//51單片機頭文件

#define uchar unsigned char//宏定義
#define uint unsigned int
//uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//數碼管段碼
//uchar code smg_we[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1f};//數碼管位碼
uchar code digit[]={"0123456789"};//定義字符數組數字
uchar disp[8];//存儲拆開的數
uint cnt;//中斷次數
uchar v;//電機0速度
uchar date,num,CYCLE,PWM_ON;
sbit sda=P2^0;
sbit scl=P2^1;
uchar flag;        //計滿1秒鐘標志位
uint i;
char j,k=5;
/////////
sbit PWM=P1^0; //pwm輸出口
sbit rs=P2^6;//數據命令選擇
sbit rw=P2^5;//讀寫控制信號
sbit e=P2^7;//使能信號
///////////////
void delay1()                //微秒延時
{;;}
/////
void start()                //I2C開始信號
{
  sda=1;
     delay1();
   scl=1;
     delay1();
   sda=0;
        delay1();  
}
void stop()              //I2C停止信號
{
  sda=0;
     delay1();
   scl=1;
     delay1();
   sda=1;
     delay1();
}
void respons()                //I2C應答信號
{
        uchar i;
        scl=1;
        delay1();
        while((sda==1)&&(i<250))i++;
        scl=0;
        delay1();
}
void writebyte(uchar date)                //I2C寫信號
{
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
                delay1();
                sda=CY;
                delay1();
                scl=1;
                delay1();       
        }
        scl=0;
        delay1();
        sda=1;
        delay1();
}
uchar readbyte()                //I2C讀信號
{
        uchar i,k;
        scl=0;
        delay1();
        sda=1;
        for(i=0;i<8;i++)
        {
                scl=1;
                delay1();
                k=(k<<1)|sda;               
                scl=0;
                delay1();
        }

        return k;
}
void init1()                        //初始化
{
        scl=1;
        delay1();
        sda=1;
        delay1();
}
uchar read_ad(uchar channel)                //讀取ad轉換結果
{
        uchar num;
        start();
        writebyte(0x90);
        respons();
        writebyte(0x40|channel);
        respons();
        start();
        writebyte(0x91);
        respons();
        num=readbyte();
        stop();       
        return num;
}

/////

void delay_50us(uint t)//50us延時函數
{
uchar j;
for(;t>0;t--)
    for(j=19;j>0;j--);
}
void write_com(uchar com)//寫地址
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(10);
e=0;
}
///////
void write_data(uchar dat)// 寫數據
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(10);
e=0;
}
//////
void init(void)//液晶初始化
{
  delay_50us(300);
  write_com(0x38);
  delay_50us(100);
  write_com(0x38);
  delay_50us(100);
  write_com(0x38);
  write_com(0x38);
  write_com(0x08);
  write_com(0x01);
  write_com(0x06);
  write_com(0x0c);
}
/////////////
void writeaddress(uchar x)//指定字符的實際地址
{

  write_com(x|0x80);//顯示位置的確定方法規定為“80h+地址碼x“
}
//////////
void display_sym(void)//顯示速度提示符
{
writeaddress(0x00);//寫顯示地址第一行第一列
write_data('v');//寫數據v
write_data('=');//寫數據=
}
//////
void dispose()//
{
disp[0]=v/1000;
disp[1]=(v%1000)/100;
disp[2]=(v/100)/10;
disp[3]=v%10;
}
/////////////
void display_val(void)
{
writeaddress(0x02);//寫顯示地址,第一行第三列
  write_data(digit[disp[0]]);//千
  write_data(digit[disp[1]]);//百
  write_data(digit[disp[2]]);//時
  write_data(digit[disp[3]]);//個
}   
////////
void display_uint(void)//顯示速度單位
{
  writeaddress(0x06);//第1行第7列
  write_data('r');//千
  write_data('/');//百
  write_data('m');//時
  write_data('i');//個
  write_data('n');//個
}
void initial()//初始化
{
TMOD=0x51; //定時器T1工作與計數器模式1,定時器T0工作于計數器模式1
RCAP2H=(65536-50000)/256;
RCAP2L=(65536-50000)%256;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
TR0=1;
ET2=1;
TR2=1;
EA=1;

}
///////
void main()
{

init();
init1();
v=0;
CYCLE = 100;
initial();
cnt=0;
display_sym();
display_uint();
while(1)
{
num=num=read_ad(0);
PWM_ON=num;
TR1=1;
TH1=0;
TL1=0;
flag=0;        // 時間還未滿1分鐘
while(flag==0);        // 時間未滿等待
v=(TH1*256+TL1)*60/20;        // 計算速度,每周產生20個脈沖
dispose();
display_val();
}
}
//////
void time2() interrupt 5//定時器T2中斷服務程序
{
TF2=0;
cnt++;
if(cnt==20)
{
flag=1;
cnt=0;
}
}
//////
void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定時1mS

if (count==PWM_ON)
    {
     PWM = 1; //燈滅
    }
  count++;
if(count == CYCLE)
    {
    count=0;
        if(PWM_ON!=0) //如果左右時間是0 保持原來狀態
           PWM = 0;//燈亮

    }
        }


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

使用道具 舉報

沙發
ID:90625 發表于 2015-10-1 22:12 | 只看該作者
什么東東呀?想看看
回復

使用道具 舉報

板凳
ID:79544 發表于 2015-10-3 12:16 | 只看該作者
有圖和資料嗎?分享出來,好東西就要分享。
回復

使用道具 舉報

地板
ID:88707 發表于 2015-10-5 15:11 | 只看該作者
沒圖看著很吃力啊
回復

使用道具 舉報

5#
ID:83018 發表于 2015-10-9 15:33 | 只看該作者
有圖嗎
回復

使用道具 舉報

6#
ID:92134 發表于 2015-10-12 11:57 | 只看該作者
感謝樓主
回復

使用道具 舉報

7#
ID:79544 發表于 2015-11-18 17:27 | 只看該作者
樓主是用什么AD芯片
回復

使用道具 舉報

8#
ID:76408 發表于 2015-11-18 18:15 | 只看該作者
樓主辛苦了,我正需要,最好再發個圖好嗎?
回復

使用道具 舉報

9#
ID:96218 發表于 2015-11-18 19:10 | 只看該作者
最好上個圖  大家一起學習一下
回復

使用道具 舉報

10#
ID:183120 發表于 2017-6-20 15:27 | 只看該作者
學習了,但是沒圖,就懵逼了
回復

使用道具 舉報

11#
ID:248805 發表于 2017-11-13 09:25 | 只看該作者
沒看懂。。。。。
回復

使用道具 舉報

12#
ID:281525 發表于 2018-2-1 18:01 | 只看該作者
v=(TH1*256+TL1)*60/20;     這個怎么理解啊    我看了半天也看不懂呢    好心人教了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色婷婷影院 | 亚洲一区| 欧美日韩中文字幕在线 | 国产精品a久久久久 | 久久久精品一区二区三区四季av | 亚洲天天 | 最新91在线 | 国产欧美一区二区三区在线看蜜臀 | 国产精品影视在线观看 | 欧美久久视频 | 国产午夜在线 | 国产一区三区视频 | 精品视频一二区 | 久久尤物免费一区二区三区 | 天天操天天射天天 | 鲁一鲁资源影视 | 中文字幕在线免费观看 | 成年人在线视频 | 国产美女一区二区 | 91大神在线资源观看无广告 | 精品久久一区二区 | 超碰在线播 | 久久天天躁狠狠躁夜夜躁2014 | 久久中文字幕av | 国产日韩欧美激情 | 一级毛片视频免费观看 | 日日操夜夜操天天操 | 免费的网站www | 欧美精品一区二区在线观看 | 在线日韩视频 | av午夜激情 | 亚洲视频精品在线 | 在线观看中文字幕一区二区 | 精品久久久久久久 | 99精品一区| 欧美高清视频一区 | 久久精品国产一区二区电影 | 精品中文字幕一区二区三区 | 欧美美乳 | 精品99在线 | 久久久久国产一区二区三区 |