欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
MMA7361角度傳感器STC源程序 LCD1602顯示
[打印本頁]
作者:
xyzzyxping
時間:
2020-7-7 15:08
標題:
MMA7361角度傳感器STC源程序 LCD1602顯示
51內(nèi)核 STC 單片機角度傳感器源程序,有需要的朋友拿走
單片機源程序如下:
/************* MMA7361 *************
************** 三軸電壓采集 三軸電壓采集點 分別為P0.0 P0.1 P0.2 如遇到問題請先仔細看資料 *************
//////////////////////// /***********************************************************************
/* LCD1602
LCD1602顯示 rs P3^5 rw P3^6 ep P3^7 P0口 為數(shù)據(jù)輸出口
***********************************************************************///////////////////////
//************** STC12 ADC電壓采集測試程序 *************/
#include "stc8.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar Vo,Vx,Vy; //A/D轉(zhuǎn)換后換算的電壓值
int v=0,g;
int i,e,h;
sbit rw=P3^6; //1602 IO口定義 這里用的數(shù)據(jù)口是P2口
sbit rs=P3^5;
sbit ep=P3^7;
uchar code asc[] = "0123456789";
unsigned char code d[] = {"MMA7361 X: . V"};
unsigned char code b[]= {"Y: . V Z: . V"};
/**************************** 延時函數(shù) ***********************************/
void delay(unsigned int a)
{
while(a--);
}
/*----------------------------
Get ADC result
----------------------------*/
uchar GetADCResult(uchar ch)
{
ADC_CONTR = ADC_POWER | ADC_START | ch ;//0x00|0x00|ch|0x08:選擇A/D輸入通道,開始A/D轉(zhuǎn)換
// 這么用語句的主要原因就是不能位尋址
// 通道選擇在后3位所以直接用一個整數(shù)表示ch
//例如ch=6 那么對應(yīng)的后三位就是110
_nop_(); //Must wait before inquiry ,
_nop_(); //設(shè)置ADC_CONTR寄存器后需加4個CPU時鐘周期的延時,才能保證值被寫入ADC_CONTR寄存器
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
ADC_CONTR &= ~ADC_FLAG; //Close ADC 將標志位清零等待下次硬件置1
//也可以寫成 ADC_CONTR= ADC_CONTR & ( ~ADC_FLAG)
Vo=ADC_RES*4.7*100/256; //Return ADC result(為顯示整數(shù),這里將電壓值擴大了十倍)
return Vo;
// return ADC_RES;
}
/*************************************************************************************/
/*************************************************************************************/
/***************************** 1602 *******************************************/
bit lcd_busy() //查忙 這部很重要 否則有的顯示容易出現(xiàn)亂碼
{
bit result;
rs = 0;
rw = 1;
ep = 1;
delay(50);
result = (bit)(P0&0x80);
ep = 0;
return result; //返回值
}
void lcd_com(unsigned char com)// 地址
{
while(lcd_busy());
rs=0;
ep=0;
rw=0;
P0=com;
delay(50);
ep=1;
delay(50);
ep=0;
}
void lcd_date(unsigned char date)//采集輸出數(shù)據(jù)
{
while(lcd_busy());
rs=1; //1是些數(shù)據(jù) 0是寫指令
rw=0; // 1是讀 0是寫
ep=0; //E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令
P0=date;
delay(5);
ep=1;
delay(5);
ep=0;
}
void lcd_pos(unsigned char pos)
{
lcd_com(pos|0x80); //數(shù)據(jù)指針=80+地址變量
}
void init()//1602初始化
{
lcd_com(0x38);
delay(50);
lcd_com(0x38);
delay(50);
lcd_com(0x38);
delay(50);
lcd_com(0x0c);
delay(50);
lcd_com(0x06);
delay(50);
lcd_com(0x01);
}
/************************************************************************/
void main(void)
{
//三個采集通道 P10 P11 P12配置為高阻狀態(tài)
P1M0=0X00;
P1M1=0X03;
TMOD=0x01; //選擇定時器T0 在工作方式1上 即16位定時器
TH0=(65536-50000)/256; //11.592M晶振的一個機器周期接近1us 這里5W就是0.05s
TL0=(65536-50000)%256;
EA=1; //開啟總中斷
ET0=1; //開啟定時器T0
TR0=1; // 啟動定時器 使其開始計算
init(); //1602初始化
lcd_pos(0x00); //顯示字母
i=0;
while(d[i]!='\0')
{
lcd_date(d[i]);
i++;
}
lcd_pos(0x40);
i=0;
while(b[i]!='\0')
{
lcd_date(b[i]);
i++;
}
while(1)
{
if(v==1)
{
lcd_pos(0x0B);
lcd_date(asc[Vo/100]);
lcd_pos(0x0D);
lcd_date(asc[Vo%100/10]);
lcd_date(asc[Vo%100%10]);
delay(1000);
}
if(v==2)
{
lcd_pos(0x42);
lcd_date(asc[Vo/100]);
lcd_pos(0x44);
lcd_date(asc[Vo%100/10]);
lcd_date(asc[Vo%100%10]);
delay(1000);
}
if(v==3)
{
lcd_pos(0x4b);
lcd_date(asc[Vo/100]);
lcd_pos(0x4d);
lcd_date(asc[Vo%100/10]);
lcd_date(asc[Vo%100%10]);
delay(1000);
}
}
}
void ADCt0() interrupt 1 using 0
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
e++;
if(e==6)
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有程序51hei提供下載:
MMA7361角度傳感器.rar
(49.7 KB, 下載次數(shù): 38)
2020-7-7 15:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
鼬先生
時間:
2021-3-28 23:32
有沒有proteus的原理圖?
作者:
shenyuqiu
時間:
2021-3-29 11:26
以前沒接觸過角度傳感器,好資料
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1