erxun 发表于 2011-5-20 20:52:00

一款 Sauna 控制器控制器原理图

闲话少说,上原理图。
点击此处下载 ourdev_641596LVFBGS.pdf(文件大小:64K) (原文件名:STC12C5204AD???????????÷.pdf)
按钮的处理的办法很好,节约了很多IO口。

此处只给出数码管扫描、按键读取的函数,注意下某些IO口的模式变化。其它程序都是浮云~~~~
//1ms中断,用于数码管扫描、按键检测
void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0xFC;
    TL0 = 0x18;
        //add your code here!
        bit_con++; if(bit_con>6) bit_con=0;
        ms_100_con++;
        ms_1_con++;

        //关闭所有数码管,消隐
        LED1_A = 0;LED2_A = 0;LED3_A = 0;LED4_A = 0;LED5_A = 0;
        switch(bit_con)
        {
       case 0:
                   //检测按钮
                  key_value = 0; cn_value = 0;
                  for(key_tab_con=0;key_tab_con<8;key_tab_con++)
                     {
                          put_one_char(~KEY_TAB);       //依次输出按键扫描码A-H
                          if(!KEY_in) key_value = key_value + KEY_TAB;
                          if(!CN_in)cn_value=cn_value + KEY_TAB;
                      }
                       //if(key_value) key_flg = 1;       
                       //if(cn_value) cn_flg = 1;
                   //检测按钮结束
             break;
       case 1: //LED1
             put_one_char(Led_show_buf);
             LED1_A = 1;LED2_A = 0;LED3_A = 0;LED4_A = 0;LED5_A = 0;
             break;
       case 2: //LED2
             put_one_char(Led_show_buf);
                   LED1_A = 0;LED2_A = 1;LED3_A = 0;LED4_A = 0;LED5_A = 0;
             break;
       case 3: //LED3
             put_one_char(Led_show_buf);
                   LED1_A = 0;LED2_A = 0;LED3_A = 1;LED4_A = 0;LED5_A = 0;
             break;
       case 4: //LED4
             put_one_char(Led_show_buf);
                   LED1_A = 0;LED2_A = 0;LED3_A = 0;LED4_A = 1;LED5_A = 0;
             break;
       case 5: //LED5
             put_one_char(Led_show_buf);
                   LED1_A = 0;LED2_A = 0;LED3_A = 0;LED4_A = 0;LED5_A = 1;
             break;

       default:
                   break;
        }
       
}
/*******************************/
/*   *『 164写1个数码管 』 **/
/*******************************/
void put_one_char(uchar data_char)
{
uchar temp;
temp=data_char;
P3M1 = 0x00; //P1强推挽输出
P3M0 = 0xbf;
for (i=0;i<8;i++)
{
    CLK_164 = 0;//拉低74HC164时钟        
    if(temp&0x80)
      DAT_164 = 1;
    else
      DAT_164 = 0;
    temp=temp<<1;//左移一位数据,先发高位       
    CLK_164 = 1;//拉高74HC164时钟
}
DAT_164 = 1;
CLK_164 = 0;
   
P3M1 = 0x20; //P34、P35输入、其余强推挽输出
P3M0 = 0x8f;
_nop_();_nop_();_nop_();_nop_();
}

为了布线方便(仔细看图纸),数码管的接线也是不一般的,所以字符表也就不一般了。
code unsigned char SMG_1_3_5_TAB[]= {
      0xC0,/*0*/
      0xFC,/*1*/
      0x4A,/*2*/
      0x68,/*3*/
      0x74,/*4*/
      0x61,/*5*/
      0x41,/*6*/
      0xF8,/*7*/
      0x40,/*8*/
      0x60,/*9*/
      0x7f,/*-*/ //0x50,/*A*/
      0xbf,/* */ //0x45,/*b*/
      0xC3,/*C*/
      0x4C,/*d*/
      0x43,/*E*/
      0x53,/*F*/
};
code unsigned char SMG_2_4_TAB[]= {
      0x21,/*0*/
      0x6F,/*1*/
      0x34,/*2*/
      0x64,/*3*/
      0x6A,/*4*/
      0xE0,/*5*/
      0xA0,/*6*/
      0x67,/*7*/
      0x20,/*8*/
      0x60,/*9*/
      0xfe,/*-*/ //0x22,/*A*/
      0xff,/*b*/ //0xA8,/*b*/
      0xB1,/*C*/
      0x2C,/*d*/
      0xB0,/*E*/
      0xB2,/*F*/
};
//扫描按键用的
code unsigned char KEY_TAB={
      0x01,/*A*/
      0x02,/*B*/
      0x04,/*C*/
      0x08,/*D*/
      0x10,/*E*/
      0x20,/*F*/
      0x40,/*G*/
      0x80 /*H*/
                };

----------------------分割线下面才是我的目的----------------------------------
找人(招聘),前一段时间,有个女孩子到我们公司面试(铜山新区,润泽电气),当时你说要把目前手头的工作完成才可以~~。不巧的事,人事部门主管后来离职了,你的资料我找不到了,所以借此找找你,我的邮箱64785674在163点公司。谢谢。

招聘硬件设计工程师,要求:徐州人,有工作经验,工作经验要求硬件设计>2年(含非常爱恋电子设计的新手)。

erxun 发表于 2011-5-21 16:41:51

自己顶一下~~~

hu7215 发表于 2011-5-21 17:01:31

路过

binaimei2007 发表于 2011-5-21 17:06:43

回复【1楼】erxun老孟
-----------------------------------------------------------------------
帮顶,和我同姓啊。。。

erxun 发表于 2011-5-21 17:29:58

回复【3楼】binaimei2007 兵仔
-----------------------------------------------------------------------

谢谢!!
天下姓孟是一家啊~~~,我是宪字辈的。。。

lzx996 发表于 2011-5-21 18:23:32

好东西,学习学习

kinsno 发表于 2011-5-22 15:55:52

老孟同志要这样子吗?按理来说,人事主管离职,可它也不会把文档什么的都销毁吧,那么致电请帮个忙,应该是可以的吧。我现在还经常要给我上家公司接手研发的哥们答各种技术疑。

erxun 发表于 2011-5-23 13:58:10

回复【6楼】kinsno
-----------------------------------------------------------------------

人事部门资料交接时没弄好。可惜了一个人才。

hamipeter 发表于 2012-5-23 00:08:13

顶一下!

outt60777 发表于 2012-12-10 22:55:13

非常谢谢。这个说明非常详细。

有一个问题:
//关闭所有数码管,消隐
      LED1_A = 0;LED2_A = 0;LED3_A = 0;LED4_A = 0;LED5_A = 0;

你的数码管都是共阳。三极管是pnp。如果拉底,那就是vdd通电。

通电,怎么是关led呢?
·················································
是我看错了。其实是NPN,而不是pnp。9013

outt60777 发表于 2012-12-10 22:56:00

你这个资料好在,还写明了,刷新频率。

cumtguojp 发表于 2012-12-11 20:55:10

mark谢谢谢谢小星星

liuzhengyaAVR 发表于 2012-12-17 07:00:06

顶一下了,可惜是个初学者了。

52robot 发表于 2012-12-17 08:56:27

帮孟兄顶一下吧,5年不回徐州,不知道电子市场的张荣举和胡萍还在开店否,当年就这么2家能买元器件的。

powermeter 发表于 2012-12-17 09:46:11

mark{:smile:}

depv 发表于 2013-2-20 21:25:07

Thanks for sharing!

天堂之泪 发表于 2018-6-11 16:11:10


我的电路整体上跟楼主的是差不多的原理,应该也是采用类似的算法,谢谢提供思路。

gallle 发表于 2018-6-11 17:26:41

天堂之泪 发表于 2018-6-11 16:11
我的电路整体上跟楼主的是差不多的原理,应该也是采用类似的算法,谢谢提供思路。 ...

目前直接上一个tm1629A之类的驱动芯片,连按键,带LED驱动都有了,而且还可以7级亮度调节,省空间,省焊接成本

rainbow 发表于 2018-6-11 17:51:47

gallle 发表于 2018-6-11 17:26
目前直接上一个tm1629A之类的驱动芯片,连按键,带LED驱动都有了,而且还可以7级亮度调节,省空间,省焊 ...

还省MCU的资源。

天堂之泪 发表于 2018-6-11 19:33:31

gallle 发表于 2018-6-11 17:26
目前直接上一个tm1629A之类的驱动芯片,连按键,带LED驱动都有了,而且还可以7级亮度调节,省空间,省焊 ...

你那个成本比较高吧,一个595才0.2元。

gallle 发表于 2018-6-12 08:04:02

天堂之泪 发表于 2018-6-11 19:33
你那个成本比较高吧,一个595才0.2元。

没有多高,但是你这个算上限流电阻,按键二极管,焊点这些,需要多少钱?你要看整体成本啊
而且你这个只有4个8段码,可以选择适合的芯片,整体比你这个要划算的,程序也简洁的多,
当然,你是学习或研究无所谓了

天堂之泪 发表于 2018-6-12 08:58:06

gallle 发表于 2018-6-12 08:04
没有多高,但是你这个算上限流电阻,按键二极管,焊点这些,需要多少钱?你要看整体成本啊
而且你这个只 ...

也对,除了IC还有其它成本。
页: [1]
查看完整版本: 一款 Sauna 控制器控制器原理图