一款 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年(含非常爱恋电子设计的新手)。 自己顶一下~~~ 路过 回复【1楼】erxun老孟
-----------------------------------------------------------------------
帮顶,和我同姓啊。。。 回复【3楼】binaimei2007 兵仔
-----------------------------------------------------------------------
谢谢!!
天下姓孟是一家啊~~~,我是宪字辈的。。。 好东西,学习学习 老孟同志要这样子吗?按理来说,人事主管离职,可它也不会把文档什么的都销毁吧,那么致电请帮个忙,应该是可以的吧。我现在还经常要给我上家公司接手研发的哥们答各种技术疑。 回复【6楼】kinsno
-----------------------------------------------------------------------
人事部门资料交接时没弄好。可惜了一个人才。 顶一下! 非常谢谢。这个说明非常详细。
有一个问题:
//关闭所有数码管,消隐
LED1_A = 0;LED2_A = 0;LED3_A = 0;LED4_A = 0;LED5_A = 0;
你的数码管都是共阳。三极管是pnp。如果拉底,那就是vdd通电。
通电,怎么是关led呢?
·················································
是我看错了。其实是NPN,而不是pnp。9013 你这个资料好在,还写明了,刷新频率。 mark谢谢谢谢小星星 顶一下了,可惜是个初学者了。 帮孟兄顶一下吧,5年不回徐州,不知道电子市场的张荣举和胡萍还在开店否,当年就这么2家能买元器件的。 mark{:smile:} Thanks for sharing!
我的电路整体上跟楼主的是差不多的原理,应该也是采用类似的算法,谢谢提供思路。 天堂之泪 发表于 2018-6-11 16:11
我的电路整体上跟楼主的是差不多的原理,应该也是采用类似的算法,谢谢提供思路。 ...
目前直接上一个tm1629A之类的驱动芯片,连按键,带LED驱动都有了,而且还可以7级亮度调节,省空间,省焊接成本
gallle 发表于 2018-6-11 17:26
目前直接上一个tm1629A之类的驱动芯片,连按键,带LED驱动都有了,而且还可以7级亮度调节,省空间,省焊 ...
还省MCU的资源。 gallle 发表于 2018-6-11 17:26
目前直接上一个tm1629A之类的驱动芯片,连按键,带LED驱动都有了,而且还可以7级亮度调节,省空间,省焊 ...
你那个成本比较高吧,一个595才0.2元。 天堂之泪 发表于 2018-6-11 19:33
你那个成本比较高吧,一个595才0.2元。
没有多高,但是你这个算上限流电阻,按键二极管,焊点这些,需要多少钱?你要看整体成本啊
而且你这个只有4个8段码,可以选择适合的芯片,整体比你这个要划算的,程序也简洁的多,
当然,你是学习或研究无所谓了 gallle 发表于 2018-6-12 08:04
没有多高,但是你这个算上限流电阻,按键二极管,焊点这些,需要多少钱?你要看整体成本啊
而且你这个只 ...
也对,除了IC还有其它成本。
页:
[1]