AVR单片机的全功能工业控制器设计
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://关PWM1端口
OCR1A=0x0000;
PWM1_IN()
break;
}
}
3 实时时钟和历史数据存储模块
很多工业控制器需要将关机前的有关数据记录下来,以便下次开机时继续使用原先设置好的参数;有些工作数据也要进行实时保存,以保证不因掉电等意外发生而受影响。采用EEPROM存储,读写速度慢而且受使用次数的限制;采用铁电存储器可以实现,但一般容量小,价格较高。
工业控制操作往往是与当前实时时钟相关联的,实时时钟在工业控制器中是很重要的一个部件。
美国Dallas公司的DS1642,将实时时钟和历史数据存储器合二为一,价格也较为适中。电路的连接方式如图3所示。
DS1642包含1个2K×8的非易挥发性的SRAM和1个实时时钟/日历,以及内嵌晶振和锂电池。 DS1642的时钟寄存器和记忆寄存器的存取方式同普通RAM的存取方式,而计时寄存器采取了双缓冲的方式,以保证在存储器存取过程中不间断计时。当电能监控电路监测到掉电时,DS1642即接通内部电源以确保时间保持和内存数据不受破坏,精度可达1 min/月。详情请见有关数据手册。
4 彩色液晶显示模块
彩色液晶显示功能的实现直接采用深圳市中天越华自动控制科技有限公司的ZTCOLOR3彩色液晶驱动模块,电路接口如图3所示。
模块的使用很简单,模块本身具有数据刷新等功能。当显示的画面没有变化时,单片机不需要对模块进行操作;要更改显示界面时,用写寄存器的方式写入数据即可。(详见生产商的使用说明书)
图3 时钟和数据存储与液晶显示模块连接电路、
5 触摸屏控制模块
触摸屏采用四线电阻式触摸屏,利用ATmega128的A/D口对通电后的触摸屏各触摸点电压值进行采样,以确定用户的触摸位置而进行相应的操作。电路如图4所示。
图4 触模屏控制模块电路
具体实现程序如下:
#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; //设置INT7为上升沿触发,清除中断
//标志,开中断
EIFR|=0x80;
EIMSK|=0x80;
TADX_IN()//把触摸屏ADC端口设置为输入
TADY_IN()
}
评论