Ⅰ 单片机设计制作数字电压表
3.系统板上硬件连线
a)把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
b)把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
c)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。
d)把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。
e)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。
f)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。
g)把“模数转换模块”区域中的A2A1A0端子用导线连接到“把其他形式的能转换成电能的装置叫做电源">电源模块”区域中的GND端子上。
h)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压">电压模块”区域中的VR1端子上。
i)把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。
4.程序设计内容
i.由于ADC0809在进行转换为相应的数宇量的电路">A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。
ii.由于ADC0809的参考电压VREF=VCC">CC,所以转换之后的数据要经过数据处理,在数码管">数码管上显示出电压值。实际显示的电压值(D/256*VREF)
5.汇编源程序
(略)
6.C语言源程序
#include<AT89X52.H>
unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};
unsignedchardispcount;
unsignedchargetdata;
unsignedinttemp;
unsignedchari;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
voidmain(void)
{
ST=0;
OE=0;
ET0=1;
ET1=1;
EA=1;
TMOD=0x12;
TH0=216;
TL0=216;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ST=1;
ST=0;
while(1)
{
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*235;
temp=temp/128;
i=5;
dispbuf[0]=10;
dispbuf=10;
dispbuf=10;
dispbuf=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
{
dispbuf[i]=temp%10;
temp=temp/10;
i++;
}
dispbuf[i]=temp;
ST=1;
ST=0;
}
}
}
voidt0(void)interrupt1using0
{
CLK=~CLK;
}
voidt1(void)interrupt3using0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
if(dispcount==7)
{
P1=P1|0x80;
}
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
Ⅱ 单片机秒表设计
用AT89C51设计一个2位的LED数码显示作为“秒表”,这应该是一个仿真题,可用两位一体的共阴数码管,用定时器T0定时,得到1秒计时。
Ⅲ 用51单片机产生正弦波,那个数据表怎么得到的谢谢!
这个表是预先算好的,就是将标准正弦波上移1/2幅值后模256。
三角波和锯齿波也可以按相同方法计算得到对应的数值表。
对一个周期取样256次,也就是说第0个取样点的弧度是0,第一个取样点的弧度值就是pi/128,第二个取样点的弧度为(pi/128)*2,依次类推。测峰峰值为256,所以f(x) = sin(x)*128+128,x就是上文中提到的取样点的弧度。
假设是8位的转换精度,那么2的8次方最大也就是256个级别,现在的表峰峰值就是256,已经够了,表精度再高也是白搭,如果DAC是11位的,那么表的精度可以再提高8倍,相对应的表的大小也大了8倍,在某些ROM有限的系统中就不适用了,所以要在精度与大小之间做个取舍。
(3)单片机的表扩展阅读:
可以设一个函数为 y=sin X,当 X 分别取 0、30、60、90、120、150、180 时(单位:度),Y对应的数值分别为 0、0.5、0.8660、1、0.8660、0.5、0。在坐标系中画出对应的点就可以得出正弦波的图像了。
该图像有一个特点,就是周期性变化,例如 X = 0 时,Y = 0,X = 180 时, Y = 0;若 X 取值【180~360】,则可以看到,图像正好与原来的相反(在第四象限)。这就是正弦波的图像了。
Ⅳ 如何设计一个自行车速度表
现在,很多人都把骑自行车作为一项锻炼身体的运动项目,如果在自行车上加装一个里程速度表,就可以知道自己骑车的速度和行程,从而很好地控制运动量。本文介绍一种用单片机制作的自行车里程速度表,里程和速度显示可进行切换,采用三位数码管显示;最大可显示里程为99.9km,显示最高速度可为99.9km/h。该里程速度表也可以用在电动自行车和速度不超过100km/h的摩托车上。
一、电路原理
电路如图1所示,由检测传感器、单片机电路和数码显示电路等组成。
检测传感器由永久磁铁和开关型霍尔集成电路UGN3020.组成。UGN3020由霍尔元件、放大器、整形电路及集电极开路输出电路等组成,其功能是把磁信号转换成电信号,图2a是其内部框图。霍尔元件H为磁敏元件,当垂直于霍尔元件的磁场强度随之变化时,其两端的电压就会发生变化,经放大和整形后,即可在③脚输出脉冲电信号。其工作特性如图2b所示。由于有一定的磁滞效应,可保证开关无抖动。B叩为工作点“开”的磁场强度,Brp为释放点“关”的磁场强度。永久磁铁固定在车轮的辐条上,UGN3020固定在车轮的叉架上。检测传感器的工作原理如下:车轮每转一周,磁铁经过UGN3020一次,其③脚就输出一个脉冲信号。UGN3020输出的脉冲信号作为单片机AT89C2051的外中断信号,从P3.2口输人。单片机测量脉冲信号的个数和脉冲周期。根据脉冲信号的个数计算出里程,根据脉冲信号的周期计算出速度并送数码管显示。S1用来进行里程和速度显示的切换,在初始状态下显示的是速度。
数码管DS1--DS3,VT1-VT3.R4-R13等组成显示电路,使用共阳数码管。P3.3-P3.5为数码管的动态扫描位驱动。PLO-P1.6作数码段码输出。
二、程序设计
程序用C语言编写,由主程序、外中断0服务程序,TO中断服务程序、延时子程序等模块组成。主程序主要完成程序初始化和键盘处理,外部中断朋及务程序由测量、计算、读数等部分组成,TO中断服务程序由计时、动态扫描显示、自行车停车判断等部分组成。
从P3.2口输人的脉冲信号作为外中断0的中断请求信号,采用沿触发方式。在测量速度时,由于车轮转动脉冲信号的频率很低,不适宜使用计数的方式进行测量,所以采用测脉冲周期的方法进行测量,用脉冲信号系统来控制计时信号,通过计时数计算出脉冲周期,用车轮的周长除以周期便可得到自行车的行驶速度。在测量里程时,用脉冲信号个数乘以车轮的周长便可获得行驶里程。需要说明的是:脉冲信号周期和个数是同时测量的,要做的只是用按钮开关S1切换显示。
本文的程序是针对车轮直径为26英寸的自行车编写的对于其他规格的自行车,只要改写程序spm=14904(常量1)In和spm=207(常量2)xc即可。为了避免使用浮点数,远算结果长度是以百米为单位的,数据读出时在第三位数加小数点就换算成千米了。为方便读者制作,现列出各种规格的轮径和轮周长、程序常量的对应值见附表,供参考。
定时器TO的中断定时时间为5ms,每中断一次计时变量n加1,因此n的单位为5ms。例如:自行车车轮转一周对应的n值为100,则对应的时间为0.5s,由此可得自行车的速度为14.9km/li。如果n的值达到1000,即5秒钟仍没有发生外部中断,即表示自行车没有前进,n也被清零,速度显示为0。读数采用三位显示,TO中断一次显示一位数,中断3次就可以刷新一次数据,即巧ms刷新一次数据。
三、安装与调试
传感器的安装与调试是一个关键。将它安装在前轮的位置,把一块小永久磁铁固定在车轮的辐条上,UGN3020作防潮密封后固定在前叉上,使得车轮转动时磁铁从它的前面经过,并使两者相遇时间隔尽量小。安装时,要使磁铁的S极面向UGN3020的正面。判定磁铁极性方法是:把磁铁的两个极分别靠近UGN3020的正面,当其③脚电平由高变低时即为正确的安装位置。传感器安装完成后,转动车轮,UGN3020的③脚应有脉冲信号输出,否则说明两者的间隔偏大,应缩小距离,直至转动时③脚有脉冲信号输出为止。一般间隔为5mm左右,如果向隔小于5mm仍无脉冲信号输出,说明磁铁的磁场强度偏小,应予以更换。
调试结束后,把里程速度表安装在车把手上,打开电源,骑动自行车,这时数码管显示的是速度,如果要显示里程,只要按一下S1,如果要回到显示速度,再按一下SI即可
Ⅳ 单片机各个按键值的映射表如何得到的
这里面的值是ascii码。是规范
数组的排列顺序应该是外围的矩阵键盘的电路结构决定的