圣龙扬特-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