#include "reg52.h"
#include "intrins.h"
#define ad_con P2 //转换控制
#define addata P0 // 数据
#define disdata P1 // 显示
#define uchar unsigned char
#define uint unsigned int
uchar number=0x00
sbit ALE=P2^3
sbit START=P2^4
sbit OE=P2^5
sbit EOC=P3^7
sbit KEY1=P3^5//单路-循环
sbit KEY2=P3^6//通道选择
sbit DISX=disdata^7
sbit FLAG=PSW^5
uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}
uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}
uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
uint data dis[5]={0x00,0x00,0x00,0x00,0x00}
////////////////////////////////////////////////////////////
delay1ms(uint t)//延时
{
uint i,j
for (i=0i<ti++)
for(j=0j<120j++)
}
/////////////////////////////////////////////////////////////////
keytest()//按键处理
{
if (KEY1==0)
{
FLAG=!FLAG//标志翻转
while (KEY1==0)
}
if (FLAG==1) //单路
{
if (KEY2==0)
{
number++ //通道选择
if (number==8) {number=0}
while (KEY2==0)
}
}
}
////////////////////////////////////////////////////////////////
scan()//扫描显示
{
uchar k,n
int h
if (FLAG==0) //循环
{
dis[3]=0x00 //显示通道 0
for (n=0n<8n++)
{
dis[2]=ad_data[n]/51 //百位 /51与转换值有关,调试时看实际值
dis[4]=ad_data[n]%51
dis[4]=dis[4]*10
dis[1]=dis[4]/51//十位
dis[4]=dis[4]%51
dis[4]=dis[4]*10
dis[0]=dis[4]/51//个位
for (h=0h<500h++)
{
for (k=0k<4k++)
{
disdata=dis_7[dis[k]]
if (k==2){DISX=0}
P3=scan_con[k]delay1ms(1)P3=0xff
}
}
dis[3]++ //通道显示+1
keytest()
}
}
if (FLAG==1)//单路
{
dis[3]=number //通道选择
dis[2]=ad_data[n]/51 //百位
dis[4]=ad_data[n]%51
dis[4]=dis[4]*10
dis[1]=dis[4]/51 //十位
dis[4]=dis[4]%51
dis[4]=dis[4]*10
dis[0]=dis[4]/51 //个位
for (k=0k<4k++)
{
disdata=dis_7[dis[k]]
if (k==2) {DISX=0}
P3=scan_con[k]delay1ms(1)P3=0xff
}
keytest()
}
}
/////////////////////////////////////////////////////////
test()//AD转换
{
uchar m
uchar s=0x00
ad_con=s
for (m=0m<8m++)
{
ALE=1_nop_()_nop_()ALE=0
START=1_nop_()_nop_()START=0
_nop_()_nop_()_nop_()_nop_()
while (EOC==0)
OE=1ad_data[m]=addataOE=0
s++ad_con=s
}
ad_con=0x00
}
///////////////////////////////////////////////////////
main()
{
P0=0xff
P2=0x00
P1=0xff
P3=0xff
while (1)
{
test()//AD转换
scan()//显示
}
}
temp=getdata*235temp=temp/128
应该是修正数值所用的, x = x*235/128 = x * 1.8359375
如果AD的参考电压为 1.089V (2V/(235/128))的话,
那乘上的因子可以使得
x 电压值
0 -- 0V
255 -- 2V
dispbuf[0]=10等内容对应的是显示缓存数据的初始化,相应的值必须结合硬件连接电路图才可以确定是初始化为什么样的显示字形...
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)