資源簡介
直流電機PWM調速系統的要求
(1)可輸入0~1范圍的占空比,占空比可用電位器輸入、撥碼開關輸入或鍵盤輸入。
(2)設計電機驅動電路,根據輸入的占空比控制電機轉速。
(3)檢測電機轉速,并用LED或LCD顯示。
(4)在PROTUES下仿真。
全套包論文

代碼片段和文件信息
?#include
#include
#include
#include
#include???
#define?uchar?unsigned?char
#define?uint??unsigned?int
#define?ulong?unsigned?long
#define?LCD_DB???????P0
????????sbit?????????LCD_RS=P2^0;
????????sbit?????????LCD_RW=P2^1;
????????sbit?????????LCD_E?=P2^2;
void?delayms(unsigned?char?ms);
void?LCD_init(void);//初始化函數???
void?LCD_write_command(uchar?command);//寫指令函數?
void?LCD_write_data(uchar?dat);//寫數據函數 ?
void?LCD_disp_char(uchar?xuchar?yuchar?dat);
void?delay_n40us(uint?n);//延時函數?
unsigned?char?code?self_table1[]={
0x080x0f0x120x0f0x0a0x1f0x020x02//年
0x0f0x090x0f0x090x0f0x090x110x00//月
0x0f0x090x090x0f0x090x090x0f0x00//日
0x010x0c0x170x140x170x0c0x010x00//鬧鐘標志
0x100x180x1c0x1e0x1f0x1c0x180x10 };//三角形符號
//================================LCD子函數?============================== ??
//*******初始化函數***************
void?LCD_init(void)
{
delayms(400);
LCD_write_command(0x38);//設置8位格式,2行,5x7
delayms(10);
LCD_write_command(0x38);
delayms(10);
LCD_write_command(0x38);
LCD_write_command(0x0c);//整體顯示,關光標,不閃爍
LCD_write_command(0x06);//設定輸入方式,增量不移位
LCD_write_command(0x01);//清除屏幕顯示?
delay_n40us(100);//實踐證明,我的LCD1602上,用for循環200次就能可靠完成清屏指令。
}
//********************************
//********寫指令函數************
void?LCD_write_command(uchar?dat)
{
LCD_DB=dat;
LCD_RS=0;//指令?
LCD_RW=0;//寫入?
LCD_E=1;//允許?
LCD_E=0;
delay_n40us(1);//實踐證明,我的LCD1602上,用for循環1次就能完成普通寫指令。
}
//*******************************
//********寫數據函數*************
void?LCD_write_data(uchar?dat)
{
LCD_DB=dat;
LCD_RS=1;//數據?
LCD_RW=0;//寫入?
LCD_E=1;//允許?
LCD_E=0;
delay_n40us(1);
}
//******************************
//********光標閃爍*************
void?cursor_flash(uchar?auchar?b)
{
// LCD_write_command(0x80+a*0x40+b);
// LCD_write_command(0x14);
LCD_write_command(0x0f);
LCD_write_command(0x80+a*0x40+b);
}
//********************************
//*******顯示一個字符函數*********
void?LCD_disp_char(uchar?xuchar?yuchar?dat)
{
uchar?address;
if(y==1)
?????????address=0x80+x;
else
?????????address=0xc0+x;
LCD_write_command(address);
LCD_write_data(dat);
}
/********************************************************
函數名稱:按指定位置顯示一個字符串
功能描述:按指定位置顯示一個字符串
全局變量:無
參數說明:X行??Y列??S顯示字符串
返回說明:無
說????明:
********************************************************/
void?DisplayChar(uchar?xuchar?yuchar?*s)
{
???uchar?addressilengh;
???if(y==1)
?????????address=0x80+x;
???else
?????????address=0xc0+x;
?????LCD_write_command(address);
?????lengh=strlen(s);
?for(i=0;i ?{??
?????LCD_write_data(*s);
??????s++;
?}
}
/********************************
/*******檢查忙函數*************
void?LCD_check_busy()??????//實踐證明,在我的LCD1602上,檢查忙指令通過率極低,以
{??????????????????????????????????????????//至于不能正常使用LCD。因此我沒有再用檢查忙函數。而使
do???????????????????????????????????????//用了延時的方法,延時還是非常好用的。我試了一下,用
????????{?LCD_E=0
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????16282??2011-12-19?11:52??PWM調試程序
?????文件???????4685??2011-12-19?11:52??PWM調試程序.hex
?????文件?????????48??2011-12-19?11:52??PWM調試程序.lnp
?????文件??????19566??2011-12-19?11:52??PWM調試程序.M51
?????文件????????986??2011-12-19?11:52??PWM調試程序.Opt
?????文件????????220??2011-12-19?11:52??PWM調試程序.plg
?????文件???????2149??2011-12-19?11:52??PWM調試程序.Uv2
?????文件????????984??2011-12-19?11:52??PWM調試程序_Opt.Bak
?????文件???????2149??2011-12-19?11:52??PWM調試程序_Uv2.Bak
?????文件???????7600??2011-12-19?11:52??Text1.c
?????文件??????14285??2011-12-19?11:52??Text1.LST
?????文件??????18489??2011-12-19?11:52??Text1.OBJ
?????文件?????148369??2011-12-19?11:52??直流電機PWM調速系統.DSN
?????文件????????792??2011-12-19?12:26??直流電機PWM調速系統.PWI
-----------?---------??----------?-----??----
???????????????236604????????????????????14
- 上一篇:翻紙牌匹配游戲
- 下一篇:Webrequests模擬登錄
評論
共有 條評論