圣龙扬特-AVR电子
标题:
夭折了的测控系统
[打印本页]
作者:
sunany
时间:
2013-2-28 23:44
标题:
夭折了的测控系统
规划了好长时间的DIY测控系统,最初的是想用DSPIC30F-6012做MCU,系统里还包含有信号调理板、数据采集板、电机及编码器控制板、I/O板扩展、LCD显示、键盘板、电源板,打算为以后开发做准备,最终还是由于经费和精力问题妖折了,只完成了LCD显示、键盘板、电源板,可惜了。
作者:
admin
时间:
2013-2-28 23:47
呵!这么漂亮,可惜了。
PCB挺漂亮,怎么做的?热转印?
作者:
小毛驴
时间:
2013-3-1 08:36
测试啥的????壳子都有了~不做真可惜了~
作者:
铜河
时间:
2013-3-1 14:40
接着来呗,搞完它!
作者:
八斤
时间:
2013-3-1 18:44
任哥手艺不错
作者:
BG2UKY
时间:
2013-3-3 18:00
可惜,都做到这样了,为啥停滞了呢!可惜可惜!!!
作者:
社建电子
时间:
2013-3-4 16:41
既然您没时间,还需要做什么?让坛友接力继续做,做好了寄给你组装。
作者:
社建电子
时间:
2013-3-4 16:42
貌似还差变压器吧?
作者:
sunany
时间:
2013-3-4 21:50
有变压器呀,在那个电源板下面,还有24V的开关电源,接下来我把做的工作再细说说,分时间一点点,有举的朋友可以看看:
电源板:
作者:
sunany
时间:
2013-3-4 21:53
//ICC-AVR application builder :
// Target : M16
// Crystal: 8.0000Mhz
// Author: Sunany
#include <iom16v.h>
#include <macros.h>
#include <init.h>
#include <RA8835.h>
#include <ds18b20.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define xtal 8.000000
#define KEY_RST key_set[3]
#define KEY_DEL key_set[7]
#define KEY_SET key_set[11]
#define KEY_DOT key_set[12]
#define KEY_ESC key_set[14]
#define KEY_ENT key_set[15]
#define KEY_SUB key_set[16]
#define KEY_UP key_set[17]
#define KEY_CAL key_set[18]
#define KEY_MEA key_set[19]
#define KEY_LEF key_set[20]
#define KEY_DOW key_set[21]
#define KEY_RIG key_set[22]
#define BEE_ON PORTD|=BIT(3)
#define BEE_OFF PORTD&=~BIT(3)
#define FAN_ON PORTD&=~BIT(1)
#define FAN_OFF PORTD|=BIT(1)
#define LED_ON PORTD&=~BIT(4)
#define LED_OFF PORTD|=BIT(4)
unsigned char key_data;
unsigned char key_show;
unsigned char flag_timer0_10ms = 0;
unsigned char data[4]={0};
/*定义键值*/
const unsigned char key_set[]=
{
1, 2, 3,18,
4, 5, 6,19,
7, 8, 9,20,
10, 0,11,21,
12,13,14,22,
15,16,17,23
};
/*-------------------------------------------------------------------
函数名称:按键读取函数
输 出:按键值key
其 它:按键行线,五行PA5 PA4 PA3 PA2 PA1 PA0
按键列线,四列PB3 PB2 PB1 PB0
DDRA 0b 0011 1111 0x3F
DDRB 0b 0000 1111 0x0F
DDRA 0b 1100 0000 0xC0
DDRB 0b 1111 0000 0xF0
-------------------------------------------------------------------*/
unsigned char get_key(void)
{
unsigned char key_num;
switch (PINA & 0x3F) //清高两位为零PA0-PA5不变
{
case 0b00011111:
key_num=0;
break;
case 0b00101111:
key_num=4;
break;
case 0b00110111:
key_num=8;
break;
case 0b00111011:
key_num=12;
break;
case 0b00111101:
key_num=16;
break;
case 0b00111110:
key_num=20;
break;
}
DDRA |= 0x3F; //置PA0-PA5为输出口
PORTA &= 0xC0; //置PA0-PA5为低电平
DDRB &= 0xF0; //置PB0-PB3为输入口
PORTB |= 0x0F; //置PB0-PB3为带上拉输入
delay_us(1);
switch (PINB & 0x0F) //清高四位为零PB0-PB4不变
{
case 0b00000111:
key_num+=0;
break;
case 0b00001011:
key_num+=1;
break;
case 0b00001101:
key_num+=2;
break;
case 0b00001110:
key_num+=3;
break;
default :
key_num=255;
break;
}
DDRA &= 0xC0; //置PA0-PA5为输入口
PORTA |= 0x3F; //置PA0-PA5为带上拉输入?
DDRB |= 0x0F; //置PB0-PB3为输出口
PORTB &= 0xF0; //置PB0-PB3为低电平
return(key_num);
}
/******************Timer0 interrupt function******************/
#pragma interrupt_handler timer0_ovf_isr:10 //2ms溢出中断
void timer0_ovf_isr(void)
{
static unsigned char CNT0=0;
TCNT0 = 0x06; //reload counter value
CNT0++;
if(CNT0==5) //askdistance flag,every 10ms once
{
CNT0=0;
flag_timer0_10ms = 1;
//key=get_key();
}
}
void BCD_Data_to_ASCII(uint i,uchar *data)
{
data[0]=i/1000+48;
i=i%1000;
data[1]=i/100+48;
i=i%100;
data[2]=i/10+48;
i=i%10;
data[3]=i+48;
}
/******************Speaker function******************/
void speaker(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
{
BEE_ON; //开BEE
delay_ms(5);
BEE_OFF; //关BEE
}
}
/******************Fan function******************/
void fan(void)
{
static unsigned int i=0;
i++;
if(i%2)
{
FAN_OFF;
show_char(25,29, ":OFF");
}
else
{
i=0;
FAN_ON;
show_char(25,29, ":ON ");
}
}
/*-------------------------------------------------------------------
函数名称:中值滤波函数
输 出:
其 它:data 采集的数据
cnt 采集的数据的个数>3
-------------------------------------------------------------------*/
/*unsigned int Avg_data(uint *data )
{
uchar count,i,j;
uint value_buf[7];
uint sum=0,temp;
for (count=0;count<7;count++)
{
value_buf[count] =data[count];
}
for (j=0;j<6;j++)
{
for (i=0;i<6-j;i++)
{
if ( value_buf[i]>value_buf[i+1] )
{
temp = value_buf[i];
value_buf[i] = value_buf[i+1];
value_buf[i+1] = temp;
}
}
}
for(count=1;count<6;count++)
sum += value_buf[count];
return (uint)(sum/(5));
}*/
/*-------------------------------------------------------------------
函数名称:温度显示函数
输 出:温度值
其 它:
-------------------------------------------------------------------*/
void LCD_Display_TEMP(void)
{
signed int TEMP;
TEMP=readTempDS18B20();
if(TEMP>0)
{
show_char_num(6,29,"+",1);
}
else
{
show_char_num(6,29,"-",1);
TEMP=abs(TEMP);
}
BCD_Data_to_ASCII(TEMP,data);
show_char_num(7,29,data+1,3);
show_pixel(70,239,0);
}
/*-------------------------------------------------------------------
函数名称:初始化屏显示函数
输 出:
其 它:
-------------------------------------------------------------------*/
void init_display(void)
{
show_pic(8,3,192,24,tab2,0); //智能开发控制平台
show_hzg(1,223,9,0); //温
show_hzg(3,223,10,0); //度
show_hzg(11,223,11,0); //背
show_hzg(13,223,12,0); //光
show_hzg(21,223,13,0); //风
show_hzg(23,223,14,0); //扇
show_char(31,29, "KEY:");
show_char(5,29, ": C");
show_char(15,29, ":5");
show_char(25,29, ":ON");
}
/****************************main function*******************************/
void main(void)
{
init_devices();
LED_ON;
FAN_ON;
BEE_ON;
speaker(10);
delay_ms(1000);
LCD320_init();
init_display();
while(1)
{
show_pic(8,3,192,24,tab2,0); //智能开发控制平台
if(flag_timer0_10ms==1)
{
flag_timer0_10ms=0;
key_data=key_set[get_key()];
key_show=key_data+48;
if(key_show<73)
show_char_num(35,29,&key_show,1);
}
LCD_Display_TEMP();
if(key_data==KEY_ENT)
{
fan();
}
if(key_data==KEY_RST)
{
lcd_cls(0);
}
if(key_data==KEY_SET)
{//key=0;
show_hzg(4,80,1,0);
locate_xy(50,50);
//locate_xy(x, y); //光标定位
write_cmd(csrform); //光标形状设置
write_dat(0x05); //水平显示宽度6
write_dat(0x07); //线状光标显示,高度8
write_cmd(csrdirr); //光标向右方向移动
write_cmd(dispon); //显示状态开启
write_dat(0x57); //显示图像,光标1Hz闪烁
}
if(key_data==KEY_UP)
{//key=0;
show_hzg(6,80,2,0);
}
show_hzg(8,80,1,1);
show_char(10, 5, "HELLO BABY LCD");
show_char(10, 15, "Made by sunany");
/*show_pixel(0, 0,0);
show_pixel(10, 10,0);
show_pixel(20, 20,0);
show_pixel(30, 30,0);
show_pixel(40, 40,0);
show_pixel(41, 40,0);
show_pixel(39, 40,0);
delay_ms(500);
show_pixel(39, 40,1);
delay_ms(500);
show_pixel(41, 40,1);
delay_ms(500);
show_pixel(40, 40,1);
delay_ms(500);
show_line(0,0,319,239,0);
delay_ms(500);
show_line(0,0,319,239,1);
show_rectangle(25,25,60,60,0);
show_circle(100,100,10,0);
delay_ms(100);
show_rectangle(25,25,60,60,1);
show_circle(100,100,10,1);
show_pic(2,50,216,14,tab1,0);
delay_ms(1000);
show_pic(2,50,216,14,tab1,1);
show_hzg(2,80,0,1);
delay_ms(1000);
show_hzg(2,80,0,0);
delay_ms(1000);
show_hzg(4,80,1,1);
delay_ms(1000);
show_hzg(4,80,1,0);
delay_ms(1000);
show_hzg(6,80,2,1);
delay_ms(1000);
show_hzg(6,80,2,0);
delay_ms(1000);
show_hzg(8,80,3,1);
delay_ms(1000);
show_hzg(8,80,3,0);
delay_ms(1000);
show_hzg(10,80,4,1);
delay_ms(1000);
show_hzg(10,80,4,0);
delay_ms(1000);
show_hzg(12,80,5,1);
delay_ms(1000);
show_hzg(12,80,5,0);
delay_ms(1000);
show_hzg(14,80,6,1);
delay_ms(1000);
show_hzg(14,80,6,0);
delay_ms(1000);
show_hzg(16,80,7,1);
delay_ms(1000);
show_hzg(16,80,7,0);
show_char(40, 15, "Made by sunany");
//show_pic(0,100,tab2,0);
//delay_ms(1000);
//show_pic(0,100,tab2,1);
//set_line(0,0,200,200,0);
//show_pixel(150, 150,0);
//show_pixel(200, 200,0);
//show_pixel(0, 0,1);
/*
uchar temp=0;
write_cmd(mread);
delay_ms(10);
temp = read_dat();
putchar(temp);
putchar(0x0d); //Enter and return
putchar(0x0a);
delay_ms(500);*/
}
}
作者:
sunany
时间:
2013-3-4 21:54
以为上SPI的控键测试代码及点RA8535
作者:
sunany
时间:
2013-3-4 22:03
LCD底层驱动
作者:
sunany
时间:
2013-3-4 22:04
明天上传AD信号调理及数据采集相关资料
作者:
SengChuary
时间:
2013-4-10 16:54
楼主真是高人,敬佩啊!
欢迎光临 圣龙扬特-AVR电子 (http://avr.cnta.net/)
Powered by Discuz! X2.5