資源簡介
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define LED_DAT P0
sbit LED_SEG0 = P2^7;
sbit LED_SEG1 = P2^6;
sbit LED_SEG2 = P2^5;
sbit LED_SEG3 = P2^4;
#define TIME_CYLC 100 //12M晶振,定時器10ms 中斷一次 我們1秒計算一次轉速 // 1000ms/10ms = 100
#define PLUS_PER 10 //碼盤的齒數 ,這里假定碼盤上有10個齒,即傳感器檢測到10個脈沖,認為1圈
#define K 1.65 //校準系數
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar data Disbuf[4];// 顯示緩沖區
uint Tcounter = 0; //時間計數器
bit Flag_Fresh = 0; // 刷新標志
bit Flag_clac = 0; //計算轉速標志
bit Flag_Err = 0; //超量程標志
void DisplayFresh();//在數碼管上顯示一個四位數
void ClacSpeed();//計算轉速,并把結果放入數碼管緩沖區
void init_timer();//初始化定時器T0\T1
void Delay(uint ms);//延時函數
void it_timer0() interrupt 1 /* interrupt address is 0x000b */
{
TF0 = 0; //定時器 T0用于數碼管的動態刷新
TH0 = 0xC0;
TL0 = 0x00;
Flag_Fresh = 1;
Tcounter++;
if(Tcounter>TIME_CYLC)
{ Flag_clac = 1;//周期到,該重新計算轉速了
}
}
void it_timer1() interrupt 3 /* interrupt address is 0x001b */
{
TF1 = 0; //定時器T1用于單位時間內收到的脈沖數
//要速度不是很快,T1永遠不會益處
Flag_Err = 1; //如果速度很高,我們應考慮另外一種測速方法:T測速法
}
void main(void)
{
Disbuf[0] = 0; //開機時,初始化為0000
Disbuf[1] = 0;
Disbuf[2] = 0;
Disbuf[3] = 0;
init_timer();
while(1)
{
if(Flag_Fresh)
{ Flag_Fresh = 0;
DisplayFresh(); // 定時刷新數碼管顯示
}
if(Flag_clac)
{ Flag_clac = 0;
ClacSpeed(); //計算轉速,并把結果放入數碼管緩沖區
Tcounter = 0;//周期定時 清零
TH1=TL1 = 0x00;//脈沖計數清零
}
if(Flag_Err) //超量程處理
{
Disbuf[0] = 0x9e; //開機時,初始化為0000
Disbuf[1] = 0x9e;
Disbuf[2] = 0x9e;
Disbuf[3] = 0x9e;
while(1)
{ DisplayFresh();//不再測速 等待復位i
}
}
}
}
//在數碼管上顯示一個四位數
void DisplayFresh()
{
P2 |= 0xF0;
LED_SEG0 = 0;
LED_DAT = table[Disbuf[0]];
Delay(1);
P2 |= 0xF0;
LED_SEG1 = 0;
LED_DAT = table[Disbuf[1]];
Delay(1);
P2 |= 0xF0;
LED_SEG2 = 0;
LED_DAT = table[Disbuf[2]];
Delay(1);
P2 |= 0xF0;
LED_SEG3 = 0;
LED_DAT = table[Disbuf[3]];
Delay(1);
P2 |= 0xF0;
}
//計算轉速,并

代碼片段和文件信息
#include?
#define?uchar?unsigned?char?
#define?uint?unsigned?int?
#define?ulong?unsigned?long
#define?LED_DAT?P0
sbit?LED_SEG0?=?P2^7;
sbit?LED_SEG1?=?P2^6;
sbit?LED_SEG2?=?P2^5;
sbit?LED_SEG3?=?P2^4;
#define?TIME_CYLC?100?//12M晶振,定時器10ms?中斷一次?我們1秒計算一次轉速?//?1000ms/10ms?=?100
#define?PLUS_PER?10?//碼盤的齒數?,這里假定碼盤上有10個齒,即傳感器檢測到10個脈沖,認為1圈
#define?K???????1.65???//校準系數
unsigned?char?code??table[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
uchar?data?Disbuf[4];//?顯示緩沖區?
uint?Tcounter?=?0;???//時間計數器
bit?Flag_Fresh?=?0;?//?刷新標志?
bit?Flag_clac?=?0;?//計算轉速標志?
bit?Flag_Err?=?0;?//超量程標志?
void?DisplayFresh();//在數碼管上顯示一個四位數?
void?ClacSpeed();//計算轉速,并把結果放入數碼管緩沖區?
void?init_timer();//初始化定時器T0\T1
void?Delay(uint?ms);//延時函數?
void?it_timer0()?interrupt?1?/*?interrupt?address?is?0x000b?*/
{
TF0?=?0;???????//定時器?T0用于數碼管的動態刷新?
TH0?=?0xC0;????
TL0?=?0x00;?
Flag_Fresh?=?1;?
Tcounter++;?
if(Tcounter>TIME_CYLC)
{?Flag_clac?=?1;//周期到,該重新計算轉速了?
}
}
void?it_timer1()?interrupt?3?/*?interrupt?address?is?0x001b?*/
{
TF1?=?0;???//定時器T1用于單位時間內收到的脈沖數?
???????????//要速度不是很快,T1永遠不會益處
Flag_Err?=?1;???//如果速度很高,我們應考慮另外一種測速方法:T測速法
?????
}
void?main(void)
{
Disbuf[0]?=?0;?//開機時,初始化為0000
Disbuf[1]?=?0;?
Disbuf[2]?=?0;
Disbuf[3]?=?0;
init_timer();
while(1)
{??
if(Flag_Fresh)
???{?Flag_Fresh?=?0;
????DisplayFresh();????//?定時刷新數碼管顯示?
???}
???if(Flag_clac)
???{?Flag_clac?=?0;
????ClacSpeed();?//計算轉速,并把結果放入數碼管緩沖區??
????Tcounter?=?0;//周期定時?清零
????TH1=TL1?=?0x00;//脈沖計數清零?
????
???}
??if(Flag_Err)????????//超量程處理?
??{
????Disbuf[0]?=?0x9e;?//開機時,初始化為0000
????Disbuf[1]?=?0x9e;?
????Disbuf[2]?=?0x9e;
????Disbuf[3]?=?0x9e;
???while(1)
????{?DisplayFresh();//不再測速?等待復位i
????}
??}
}?
}
//在數碼管上顯示一個四位數
void?DisplayFresh()
{
P2?|=?0xF0;
LED_SEG0?=?0;
LED_DAT?=?table[Disbuf[0]];
Delay(1);
P2?|=?0xF0;
LED_SEG1?=?0;
LED_DAT?=?table[Disbuf[1]];
Delay(1);
P2?|=?0xF0;
LED_SEG2?=?0;
LED_DAT?=?table[Disbuf[2]];
Delay(1);
P2?|=?0xF0;
LED_SEG3?=?0;
LED_DAT?=?table[Disbuf[3]];
Delay(1);
P2?|=?0xF0;
}
//計算轉速,并把結果放入數碼管緩沖區
void?ClacSpeed()
{
uint?speed?;?
uint?PlusCounter;
PlusCounter?=?TH1*256?+?TL1;
speed?=6*PlusCounter/K;??????//K是校準系數,如速度不準,調節K的大小
Disbuf[3]?=?(speed/1000)%10;??
Disbuf[2]?=?(speed/100)%10;?
Disbuf[1]?=?(speed/10)%10;
Disbuf[0]?=?speed%10;
}
??????????
void?init_timer()//初始化定時器T0\T1
{
TMOD=0x51;?//定時器0工作于定時方式1定時器1工作于計數方式
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;?//TO定時時間為10000個周期即10毫秒
TH1=0x00;
TL1=0x00;
ET0=1;?????????????????????/*?enable?timer0?interrupt?*/
EA=1;????????????????/*?enable?interrupts?*/
TR0=1;???????????????/*?timer0?run?*/
ET1=1;?????????????????????/*?enable?timer1?interrupt?*/
EA=1;????????????????/*?enable?interrupts?*/
TR1=1;???
}
//延時函數?
void?Delay(uint?ms)
{
uchar?i;
while(ms--)
???for(i=0;i<100;i++);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1500??2010-07-09?14:03??測速\123
?????文件???????4149??2010-07-09?14:03??測速\123.ASM
?????文件???????4284??2010-07-09?13:30??測速\123.C
?????文件????????807??2010-07-09?14:03??測速\123.hex
?????文件?????????38??2010-07-09?14:03??測速\123.lnp
?????文件??????11269??2010-07-09?14:03??測速\123.LST
?????文件???????7484??2010-07-09?14:03??測速\123.M51
?????文件???????1455??2010-07-09?14:03??測速\123.OBJ
?????文件????????958??2010-07-09?14:04??測速\123.Opt
?????文件???????2154??2010-07-09?14:03??測速\123.plg
?????文件???????1646??2010-07-09?14:04??測速\123.Uv2
????.......???????959??2010-07-09?13:52??測速\123_Opt.Bak
????.......?????????0??2010-07-09?13:52??測速\123_Uv2.Bak
?????文件??????84780??2010-07-10?17:05??測速\Backup?of?PCB1.PCB
?????文件???????9849??2010-07-11?02:37??測速\Backup?of?直流電機測速原理圖.Sch
?????文件??????84780??2010-07-10?17:05??測速\Previous?Backup?of?PCB1.PCB
?????文件???????9849??2010-07-10?17:05??測速\Previous?Backup?of?直流電機測速原理圖.Sch
?????文件???????3250??2010-07-12?15:24??測速\Text1.c
?????文件???????6188??2010-07-12?14:31??測速\Text1.LST
?????文件???????3735??2010-07-12?14:31??測速\Text1.OBJ
?????文件???????3501??2010-07-12?14:31??測速\測速
?????文件???????2887??2010-07-12?14:31??測速\測速.hex
?????文件?????????41??2010-07-12?14:31??測速\測速.lnp
?????文件??????12218??2010-07-12?14:31??測速\測速.M51
?????文件????????859??2010-07-12?15:24??測速\測速.Opt
?????文件????????916??2010-07-12?14:31??測速\測速.plg
?????文件???????1647??2010-07-08?02:00??測速\測速.Uv2
????.......???????859??2010-07-12?01:25??測速\測速_Opt.Bak
?????文件????1191936??2010-07-12?17:18??測速\電機測速.Bkp
?????文件?????464896??2010-07-12?17:18??測速\電機測速.ddb
............此處省略26個文件信息
- 上一篇:網絡信息工程項目投標書例文
- 下一篇:信息理論與編碼實驗報告
評論
共有 條評論