久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stc8單片機轉數表原理圖與源程序
[打印本頁]
作者:
萊茵河畔
時間:
2021-9-18 14:19
標題:
stc8單片機轉數表原理圖與源程序
電路原理圖如下:
51hei圖片_20210918115138.png
(144.82 KB, 下載次數: 79)
下載附件
2021-9-18 11:57 上傳
單片機源程序如下:
#include "stc8.h"
#include "LED.h"
//#include<reg52.h> //包含頭文件
#define uchar unsigned char
#define uint unsigned int //宏定義
sbit COUNT_IN=P3^3; //定義信號輸入
uchar count,m,n; //定義計算速度變量
unsigned long RPM=0; //定義速度變量
unsigned long TT=0; //定義時間變量
unsigned long sum=0; //計算平均值的總數
unsigned char T_num=0; //平均值取值的次數
unsigned long num=0; //單次轉速
unsigned long TT1=0; //定義定時器中斷次數變量
bit flag; //定義位變量,值只能是0或者1
uchar p,sec;
void delay(uint x) //延時函數,大約延時1ms,不精確
{
uint i,j; //定義延時函數變量
for(i=0;i<x;i++) //for循環延時
for(j=0;j<110;j++);
}
//void delayms(unsigned int m)
// {
// int a, b;
// for(a=0;a<5000;a++)
// for(b=0;b<m;b++);
//
// }
unsigned char code Led_display[]={ //標準字庫 共陰數碼管字符
//// // 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
// unsigned char LedBuff[] = { 0xFF, 0xFF, 0xFF, 0xFF}; //數碼管顯示緩存區
// static
unsigned long Temp;
void LED_Init(void)
{
P1=0x3F;
P34=0;
P35=0;
P36=0;
P37=0;
}
//
void init() //定時器中斷初始化
{
// IT0=1; //INT0負跳變觸發 =1下降沿
IT1=1; //INT0負跳變觸發 =1下降沿
TMOD=0x01;//定時器工作于方式1 16位不自動重載模式 當[TH1,TL1]中的16位計數值溢出時,定時器1將從0開始計數
TH0=0;
TL0=0;
EA=1; //CPU開中斷總允許 中斷允許寄存器
ET0=1; ////使能定時器中斷
// EX0=1;//開外部INTO中斷 //使能 INT0 中斷,**********
EX1=1;//開外部INTO中斷 //使能 INT0 中斷,**********
TR0=0;//啟動定時 啟動定時器
TH1=0x3c; //定時器 1 高 8 為寄存器
TL1=0xb0; ////定時器 1 低 8 為寄存器
ET1=1; //////使能定時器中斷
TR1=1; ////開外部INT O 中斷 //使能 INT 0 中斷,**********
}
void LedScan(void) //數碼管掃描顯示
{
if (RPM<1)
{
P1 = 0x00; //顯示指示燈
P34=1;
P35=1;
P36=1;
P37=1;
delay(10);
}
else{
if (RPM>9999)
{
P1 = 0x6F; //顯示報警9999
P34=0;
P35=0;
P36=0;
P37=0;
}
else
{
static unsigned char i = 0; //動態掃描索引
unsigned char buf[4]=0;
Temp=RPM;
buf[0] = Temp%10;
buf[1] = (Temp/10)%10;
buf[2] = (Temp/100)%10;
buf[3] = (Temp/1000)%10;
P1 = 0x00; //顯示消隱
switch (i)
{
case 0: P34=1;P35=1;P36=1;P37=0; P1=Led_display[buf[i]]; i++;break;
case 1:P34=1; P35=1;P36=0;P37=1; P1=Led_display[buf[i]]; i++;break;
case 2: P34=1;P35=0;P36=1;P37=1; P1=Led_display[buf[i]]; i++;break;
case 3: P34=0;P35=1;P36=1;P37=1; P1=Led_display[buf[i]];i=0; break;
default: break;
}
}
// }
}
}
main()
{
init(); //調用初始化函數
P1M1=0;P1M0=0xFF;
// P3M1=0x00;P3M0=0x00;
P3M1=0x08;P3M0=0x08;
while(1)
{
LedScan();
}
}
//中斷服務函數
void EXINT0() interrupt 2 //外部中斷函數,霍爾元件有信號,會進入此中斷
{
if(TR0==0) //霍爾有信號輸入時,定時器沒有打開就打開定時器,準備計時
{
TH0=0;
TL0=0; //定時器清零
TT=0; //計時變量清零
TT1=0; //定時器中斷次數清零
TR0=1; //打開定時器,開始計時
p=0;sec=0;
}
else //第二次檢測到信號時
{
p=0;sec=0;
TR0=0; //關閉定時器
TT=TT1*65536+TH0*256+TL0; //計算兩次信號的時間差。中斷次數*65536+TH0*256+TL0,得到時間差
TH0=0;
TL0=0; //計算完成后,將定時器清零
num=120000000/TT; //根據時間計算1min中的速度。一分鐘是60秒,一秒是1000毫秒,1毫秒是1000us,所以是60*1000*1000/時間,TT的單位是單片機的最快速度1微秒
TT1=0; //計算完速度后,TT1清零
if(num>1000) //轉速超過1000時,取50次的平均值
{
sum=num+sum; //將數據加一起
T_num++; //次數加
if(T_num>=20) //加到50次
{
T_num=0; //次數清零
RPM=sum/20; //總數除以50得到平均值
sum=0; //計算完后總數清零
}
}
else //轉速小于1000時
{
sum=0; //總數清零
RPM=num; //數據直接賦值給轉速
num=0; //數據清零
T_num=0; //次數清零
}
}
}
void timeT0() interrupt 1 //兩次信號中間,定時器有中斷
{
TT1++; //說明達到一次65536,將TT1加1,計算時,將TT1乘以65536就是這個的時間了
TH0=0;
TL0=0; //定時器清零
}
void timeT1() interrupt 3 //兩次信號中間,定時器有中斷
{
TH1=0x3c;
TL1=0xb0; //定時器清零
// LedScan();//***
p++;
if(p>=20)
{
p=0;
sec++;
if(sec>=5)
{
sec=0;
RPM=0;
TR0=0;
}
}
}
復制代碼
Keil代碼下載:
轉速表程序.rar
(73.11 KB, 下載次數: 33)
2021-9-18 14:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色片大全在线观看
|
欧美成人黄色小说
|
成人在线一级片
|
久久伊人在
|
99国内精品久久久久久久
|
欧美中文字幕在线观看
|
毛片站
|
国产九九九
|
国产在线小视频
|
亚洲电影免费
|
国产视频中文字幕
|
成人黄色网址大全
|
欧美中国少妇xxx性高请视频
|
国产一区二区三区在线观看免费
|
国产99久久精品
|
国产第1页
|
国产精品久久久久久久久久久免费看
|
亚洲五码久久
|
国产一区久久
|
国产精品视频导航
|
欲色av
|
高清一区二区
|
黄色成人免费在线观看
|
性色av一区
|
在线第一页
|
精品久久久久久久久久久久久
|
日韩电影免费观看中文字幕
|
久久福利电影
|
久久精品视频免费观看
|
一区二区激情
|
亚洲精品短视频
|
超黄毛片
|
黄色av观看
|
国产精品视频免费
|
免费视频中文字幕
|
激情欧美一区二区三区中文字幕
|
欧美精品一区二区三区蜜桃视频
|
一区二区三区四区国产
|
超碰精品在线
|
一区二区三区视频
|
91欧美
|