第一次和同学协作的校园课题:ADC0809电压表,以什物失利,仿真成功告终。信任今后回头看,会发现许多当地十分的不专业,特发此博文,今后当笑话看。不过由于是第一次触摸AD相关常识,也学到了挺多。
体系软件设计要求:
(1) 键盘管理程序(包含键扫描、键处理程序)。
(2) LED动态显现程序,包含:
(3) 各通道轮番显现,共显现2个通道,每通道显现1s;
(4) 单通道显现,仅显现指定通道电压,并坚持到其他功用键按下。
(1) 键盘管理程序(包含键扫描、键处理程序)。
(2) LED动态显现程序,包含:
(3) 各通道轮番显现,共显现2个通道,每通道显现1s;
(4) 单通道显现,仅显现指定通道电压,并坚持到其他功用键按下。
先上原理图:
原理图连线比较乱,首要是为了满意尽量少外围元件的要求,有一个显着古怪的当地便是38译码器输出口没用完,可是单片机口接得满满的,由于其时想用38译码器的其间三个输出口来操控ADC0809的ABC,成果发现38译码器输出口一次只能有一个低电,然后导致ADC的选址ABC两个以上低电的状况无法完成,丈量电压输进口切换的功用也无法完成。这个原理图的过错直到编程时才发现,成果只能斗胆参阅网络言辞,把ADC0809的STARTALE共接,OEEOC共接,尽管总感觉会带来潜在问题,还好,仿真成功了。
看到网上一些仿真图,有模有样,比方红绿交通灯,还真画出红绿灯外形,还有马路斑马线等等,而不是只用LED灯,真敬服,不过觉得把心思都用在外表的东西,还不如优化一下计划和程序。(留意:如参阅此程序AD0809和C52的两个OUT网络标号高低位次序是相反的)
提到程序,原本是本着dont share your code的准则(来自最近刚看了斯坦福的揭露课,真是注重常识产权),不计划揭露,不过想想,自己编得这么天真初级,就作为沟通和今后学习吧:
///12MHZ/////
//////头文件及宏界说////////
#include
#define uint unsigned int
#define uchar unsigned char
///////相关变量界说///////
static uchar keynum;
bit shift;
float temp;
uchar val_int;
uchar val_decimal;
///////I/O口界说/////////
sbit STA_ALE = P3^0;
sbit OE_EOC = P3^1;
sbit CLK = P3^2;
sbit ADD_A = P3^3;
sbit ADD_B = P3^4;
sbit ADD_C = P3^5;
sbit ADC_B = P3^6;
sbit ADC_A = P3^7;
////////带小数点数码管显现编码///////////
uchar data numtable_DE[] =
{
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef
};
////////不带小数点数码管显现编码///////////
uchar data numtable[] =
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};
///////数码管动态显现函数声明///////
void disp();
///////延时函数///////
void delay(uint x)
{
uint a,b;
for ( a = x; a > 0; a–)
for ( b = 125; b > 0; b–);
}
///////矩阵键盘扫描及赋值函数///////(这个部分自己改造得比较喜爱,想记下来,作为自己的风格)
int keyscan()
{
uchar temp1,temp2,keycod;
P1 = 0xf0;
if ( (P1 & 0xf0) != 0xf0 )
{
temp1 = P1;
}
P1 = 0x0f;
temp2 = P1;
keycod = temp1 | temp2;
switch(keycod)
{
case 0x7e:
keynum = 1;
break;
case 0xbe:
keynum = 2;
break;
case 0xde:
keynum = 3;
break;
default :
keynum = keynum;
break;
}
}
///////数码管动态显现函数///////
void disp()
{
ADD_A = 1;
ADD_B = 0;
ADD_C = 0;
P0 = numtable_DE[val_int];
delay(1);
ADD_A = 0;
ADD_B = 1;
ADD_C = 0;
P0 = numtable[(val_decimal/10)];
delay(1);
ADD_A = 1;
ADD_B = 1;
ADD_C = 0;
P0 = numtable[(val_decimal)];
delay(1);
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/256768.html