AVR單片機的全功能工業(yè)控制器設(shè)計
c為PWM更改值
***************************/
void pwm(unsigned char b,unsigned int c){
switch(b){
case 1://改變PWM1值
if(c=0x03FF)OCR1A=c;
break;
case 2://開PWM1端口
if(c=0x03FF)OCR1A=c;
PWM1_OUT()
break;
case 3://關(guān)PWM1端口
OCR1A=0x0000;
PWM1_IN()
break;
}
}
3 實時時鐘和歷史數(shù)據(jù)存儲模塊
很多工業(yè)控制器需要將關(guān)機前的有關(guān)數(shù)據(jù)記錄下來,以便下次開機時繼續(xù)使用原先設(shè)置好的參數(shù);有些工作數(shù)據(jù)也要進行實時保存,以保證不因掉電等意外發(fā)生而受影響。采用EEPROM存儲,讀寫速度慢而且受使用次數(shù)的限制;采用鐵電存儲器可以實現(xiàn),但一般容量小,價格較高。
工業(yè)控制操作往往是與當前實時時鐘相關(guān)聯(lián)的,實時時鐘在工業(yè)控制器中是很重要的一個部件。
美國Dallas公司的DS1642,將實時時鐘和歷史數(shù)據(jù)存儲器合二為一,價格也較為適中。電路的連接方式如圖3所示。
DS1642包含1個2K×8的非易揮發(fā)性的SRAM和1個實時時鐘/日歷,以及內(nèi)嵌晶振和鋰電池。 DS1642的時鐘寄存器和記憶寄存器的存取方式同普通RAM的存取方式,而計時寄存器采取了雙緩沖的方式,以保證在存儲器存取過程中不間斷計時。當電能監(jiān)控電路監(jiān)測到掉電時,DS1642即接通內(nèi)部電源以確保時間保持和內(nèi)存數(shù)據(jù)不受破壞,精度可達1 min/月。詳情請見有關(guān)數(shù)據(jù)手冊。
4 彩色液晶顯示模塊
彩色液晶顯示功能的實現(xiàn)直接采用深圳市中天越華自動控制科技有限公司的ZTCOLOR3彩色液晶驅(qū)動模塊,電路接口如圖3所示。
模塊的使用很簡單,模塊本身具有數(shù)據(jù)刷新等功能。當顯示的畫面沒有變化時,單片機不需要對模塊進行操作;要更改顯示界面時,用寫寄存器的方式寫入數(shù)據(jù)即可。(詳見生產(chǎn)商的使用說明書)
圖3 時鐘和數(shù)據(jù)存儲與液晶顯示模塊連接電路、
5 觸摸屏控制模塊
觸摸屏采用四線電阻式觸摸屏,利用ATmega128的A/D口對通電后的觸摸屏各觸摸點電壓值進行采樣,以確定用戶的觸摸位置而進行相應的操作。電路如圖4所示。
圖4 觸模屏控制模塊電路
具體實現(xiàn)程序如下:
#define TX1_0(){PORTE.3=1;DDRE.3=1;}
#define TY1_1(){PORTE.5=0;DDRE.5=1;}
#define TY1_0(){PORTE.5=1;DDRE.5=1;}
#define TX0_1(){PORTE.4=1;DDRE.4=1;}
#define TX0_0(){PORTE.4=0;DDRE.4=1;}
#define TY0_1(){PORTE.6=1;DDRE.6=1;}
#define TY0_0(){PORTE.6=0;DDRE.6=1;}
#define TINT_IN() {DDRE.7=0;}//觸摸屏中斷口為輸入方式
#define TINT_INPUT PINE.7
#define TADX_IN(){DDRF|=1;PORTF=0xFE;delay_us(50);DDRF=0xFE;}//觸摸屏ADC端口為輸入方式#define TADY_IN(){DDRF|=2;PORTF=0xFD;delay_us(50);DDRF=0xFD;}
/******************************
觸摸屏初始化: 初始化觸摸屏四線端口、初始化觸摸屏中斷口、初始化ADC端口
******************************/
void touch_init(void){
unsigned char i;
TX1_0() //初始化四線端口
TX0_0()
TY1_1()
TY0_0()
TINT_IN() //觸摸屏中斷端口為輸入方式
EICRB|=0xC0; //設(shè)置INT7為上升沿觸發(fā),清除中斷
//標志,開中斷
EIFR|=0x80;
EIMSK|=0x80;
TADX_IN()//把觸摸屏ADC端口設(shè)置為輸入
TADY_IN()
}
評論