|
闲话少说,上原理图。
点击此处下载 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[key_tab_con]); //依次输出按键扫描码A-H
if(!KEY_in) key_value = key_value + KEY_TAB[key_tab_con];
if(!CN_in) cn_value = cn_value + KEY_TAB[key_tab_con];
}
//if(key_value) key_flg = 1;
//if(cn_value) cn_flg = 1;
//检测按钮结束
break;
case 1: //LED1
put_one_char(Led_show_buf[0]);
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[1]);
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[2]);
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[3]);
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[4]);
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[8]={
0x01,/*A*/
0x02,/*B*/
0x04,/*C*/
0x08,/*D*/
0x10,/*E*/
0x20,/*F*/
0x40,/*G*/
0x80 /*H*/
};
----------------------分割线下面才是我的目的----------------------------------
找人(招聘),前一段时间,有个女孩子到我们公司面试(铜山新区,润泽电气),当时你说要把目前手头的工作完成才可以~~。不巧的事,人事部门主管后来离职了,你的资料我找不到了,所以借此找找你,我的邮箱64785674在163点公司。谢谢。
招聘硬件设计工程师,要求:徐州人,有工作经验,工作经验要求硬件设计>2年(含非常爱恋电子设计的新手)。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|