本文目錄一覽:
- 1、sTC單片機(jī) 用定時(shí)器定時(shí) 來控制步進(jìn)電機(jī) 驅(qū)動(dòng)器L298求 源碼 可調(diào)速
- 2、求基于51單片機(jī)光碼盤測(cè)轉(zhuǎn)速程序
- 3、用單片機(jī)怎么讀取直流電機(jī)碼盤的數(shù)據(jù)呢?
- 4、怎樣用單片機(jī)做一個(gè)測(cè)試碼盤的程序呢?
- 5、什么是STC單片機(jī)
sTC單片機(jī) 用定時(shí)器定時(shí) 來控制步進(jìn)電機(jī) 驅(qū)動(dòng)器L298求 源碼 可調(diào)速
/*-----------------------------------------------
名稱:步進(jìn)電機(jī)實(shí)驗(yàn)
編寫:shifang
日期:2013.12
修改:無
內(nèi)容:本程序用于測(cè)試兩個(gè)4相步進(jìn)電機(jī)常規(guī)驅(qū)動(dòng) 用矩陣鍵盤 調(diào)節(jié)速度
? ? ? 紅外傳感器 測(cè)速
1602液晶顯示 1-30速度等級(jí),數(shù)字越大,速度越大
------------------------------------------------*/
#include reg52.h
#include"LCD1602.h"
#include "jzhjp.h"
sbit cesu1=P3^2;
sbit cesu2=P3^3;
unsigned char code table[11]="0123456789.";// 顯示段碼值0~9
unsigned char code table1[]="A:"; ? //電機(jī)1正轉(zhuǎn)加減速等級(jí)
unsigned char code table2[]="B:"; ? //電機(jī)1反轉(zhuǎn)加減速等級(jí)
uint count=0; ? //外部中斷0計(jì)脈沖定義變量
uchar temp1=0; ? //定時(shí)器1計(jì)數(shù)定義變量
long int v1; ? //電機(jī)1的速度
void Init_Timer0(void); ? //定時(shí)器中斷初始化函數(shù)
/*------------------------------------------------
? ? ? ? ? ? ? ? ? 主函數(shù)
------------------------------------------------*/
void main()
{
unsigned char num1,num2;
Init_Timer0(); ? //定時(shí)器中斷初始化
LCD_init(); ? //LCD1602初始化
write_com(0x80); ? //顯示A:
for(num1=0;num12;num1++)
{
write_data(table1[num1]);
delay(5);
}
write_com(0x80+0x40); ? //顯示B:
for(num2=0;num22;num2++)
{
write_data(table2[num2]);
delay(5);
}
Coil_OFF //初始化全部斷電
while(1)
{
write_com(0x82); //顯示電機(jī)1正轉(zhuǎn)加速值
write_data(table[Speed/10]);
write_data(table[Speed%10]);
write_com(0x80+0x42); //顯示電機(jī)1反轉(zhuǎn)加速值
write_data(table[Speed1/10]);
write_data(table[Speed1%10]);
write_com(0x80+11); //顯示電機(jī)1速度值
write_data(table[v1/100]);
write_data(table[v1%100/10]);
write_data(table[10]);
write_data(table[v1%10]);
keyscan(); ? //矩陣鍵盤掃描
}
}
/*------------------------------------------------
? ? ? ? ? ? ? ? ? 定時(shí)器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x11; ? ? ? ? ? ?//使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 ?
//TH0=0x00; ? ? ? ? ? ?//給定初值
//TL0=0x00;
TH1=(65536-100000)/256; ? ?//給定初值50ms
TL1=(65536-100000)%256;
ET1=1; ? ? ? ? ? ? ? ? ? ? //定時(shí)器1中斷打開
PT0=1; ? ? ? ? ? ? ? ? ? ? //優(yōu)先級(jí)打開
EA=1; ? ? ? ? ? ? ? ? ? ? ?//總中斷打開
IT0=1; ? ? ? ? ? ? ? ? ? ? //1表示邊沿觸發(fā)
IT1=1; ? ? ? ? ? ? ? ? ? ? //1表示邊沿觸發(fā)
}
/*------------------------------------------------
? ? ? ? ? ? ? ?定時(shí)器0中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
static unsigned char times,i;
static unsigned char times1,j;
TH0=(65536-500)/256; ?//重新賦值 0.5ms
TL0=(65536-500)%256;
if(flag==1) ?//電機(jī)1正轉(zhuǎn)
{
if(times==(50-Speed))
{
times=0;
switch(i)
{
case 0:Coil_a1;i++;break;
case 1:Coil_ab1;i++;break;
case 2:Coil_b1;i++;break;
case 3:Coil_bc1;i++;break;
case 4:Coil_c1;i++;break;
case 5:Coil_cd1;i++;break;
case 6:Coil_d1;i++;break;
case 7:Coil_da1;i++;break;
case 8:i=0;break;
default:break;
} ?
}
else
times++;
}
if(flag1==1) //電機(jī)1反轉(zhuǎn)
{
if(times1==(50-Speed1))
{
times1=0;
switch(j)
{
case 0:Coil_da1;j++;break;
case 1:Coil_d1;j++;break;
case 2:Coil_cd1;j++;break;
case 3:Coil_c1;j++;break;
case 4:Coil_bc1;j++;break;
case 5:Coil_b1;j++;break;
case 6:Coil_ab1;j++;break;
case 7:Coil_a1;j++;break;
case 8:j=0;break;
default:break;
}
}
else
times1++;
}
}
/*------------------------------------------------
? ? ? ? ? ? ? ?定時(shí)器0中斷子程序
------------------------------------------------*/
void time1() interrupt 3
{
TH1=(65536-10000)/256; //重裝初值10ms
TL1=(65536-10000)%256;
temp1++;
if(temp1==100) ? //1s采樣1次
{
temp1=0;
v1=count*3; ? ? ?//速度單位:轉(zhuǎn)/min
count=0; ?//v=(count/20/1)*60=count*3;
}
}
/*--------------------------------------------------
外部中斷0子程序
---------------------------------------------------*/
void ISR_INT0(void) interrupt 0
{
if(cesu1==0) ?//電機(jī)1碼盤脈沖計(jì)數(shù)
{
delay(5);
if(cesu1==0)
{
count++;
}
while(!cesu1);
}
}
顯示部分你自己弄一下
求基于51單片機(jī)光碼盤測(cè)轉(zhuǎn)速程序
你好!
那就用一個(gè)普通的IO口來實(shí)現(xiàn),但是響應(yīng)速度會(huì)受到影響
用單片機(jī)怎么讀取直流電機(jī)碼盤的數(shù)據(jù)呢?
單片機(jī)測(cè)碼盤數(shù)據(jù)我實(shí)際測(cè)試了兩種方法,1種是采用計(jì)數(shù)器計(jì)數(shù)方法,
void Init_Timer0(void)
{
TMOD |= 0x01 | 0x04; //使用模式1,16位計(jì)數(shù)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
TH0=0x00; //給定初值
TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時(shí)器中斷打開
TR0=1; //定時(shí)器開關(guān)打開
}
void Timer0_isr(void) interrupt 1
{
TH0=00; //重新給定初值
TL0=00;
OVERFLOWFLAG=1; //溢出標(biāo)志
}
a=TL0+TH0*256;//讀取計(jì)數(shù)值
另一種是采用外部中斷
main()
{
P1=0x55; //P1口初始值
EA=1; //全局中斷開
EX0=1; //外部中斷0開
IT0=0; //電平觸發(fā)
while(1)
{
//在此添加其他程序
}
}
這是0電平觸發(fā),還有1電平觸發(fā),上升沿觸發(fā),下降沿觸發(fā)都類似
怎樣用單片機(jī)做一個(gè)測(cè)試碼盤的程序呢?
碼盤一般不直接拿來使用,它輸出是的兩列正交的方波信號(hào),方波數(shù)量表示位移或角度。兩列組合則可以判定方向。先用硬件電路處理一下,得到的是原使信號(hào)4倍頻的兩組信號(hào),一組是正方向運(yùn)動(dòng)時(shí)有信號(hào),另一組是反方向時(shí)有信號(hào)。后面可以用計(jì)數(shù)器,也可以不用計(jì)數(shù)器直接上單片機(jī)。
如果信號(hào)頻率較高,單片機(jī)處理怕丟波的話就上個(gè)計(jì)數(shù)器。
程序沒有什么東西,就記錄正反方向的波頭數(shù)
什么是STC單片機(jī)
STC系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī)。
它是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。
這種工藝的存儲(chǔ)器用戶可以用電的方式瞬間擦除、改寫。而且STC系列單片機(jī)支持串口程序燒寫。顯而易見,這種單片機(jī)對(duì)開發(fā)設(shè)備的要求很低,開發(fā)時(shí)間也大大縮短。寫入單片機(jī)內(nèi)的程序還可以進(jìn)行加密。
擴(kuò)展資料??
單片機(jī)技術(shù)的開發(fā)
(1)CPU開發(fā)。
開發(fā)單片機(jī)中的CPU總線寬度,能夠有效完善單片機(jī)信息處理功能緩慢的問題,提高信息處理效率與速度,開發(fā)改進(jìn)中央處理器的實(shí)際結(jié)構(gòu),能夠做到同時(shí)運(yùn)行2-3個(gè)CPU,從而大大提高單片機(jī)的整體性能。
(2)程序開發(fā)。
嵌入式系統(tǒng)的合理應(yīng)用得到了大力推廣,對(duì)程序進(jìn)行開發(fā)時(shí)要求能夠自動(dòng)執(zhí)行各種指令,這樣可以快速準(zhǔn)確地采集外部數(shù)據(jù),提高單片機(jī)的應(yīng)用效率。
(3)存儲(chǔ)器開發(fā)。
單片機(jī)的發(fā)展應(yīng)著眼于內(nèi)存,加強(qiáng)對(duì)基于傳統(tǒng)內(nèi)存讀寫功能的新內(nèi)存的探索,使其既能實(shí)現(xiàn)靜態(tài)讀寫又能實(shí)現(xiàn)動(dòng)態(tài)讀寫,從而顯著提高存儲(chǔ)性能。
(4)計(jì)算機(jī)開發(fā)。
進(jìn)一步優(yōu)化和開發(fā)單機(jī)片應(yīng)激即分析,并應(yīng)用計(jì)算機(jī)系統(tǒng),通過連接通信數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)傳遞。
參考資料來源:百度百科-STC12C5A60S2
關(guān)于stc單片機(jī)碼盤和stc單片機(jī)圖片的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。