/****************************/
/*Head files*/
/************************/
#include"reg51.h"
#include"absacc.h"
/***********************/
#define c8279 XBYTE[0x0fff] /*8279控制字寄存器地址*/
#define d8279 XBYTE[0x0ffe] /*8279數(shù)據(jù)地址*/
#define ch0 XBYTE[0x2ff8] /*ADC地址*/
#define uchar unsigned char
#define uint unsigned int
sbit E=P3^2;
/*******************************/
uint disdat[8]; /*定義一個數(shù)組作為顯示單元*/
uchar nokey;
uint LedCode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, /*0,1,2,3,4,5,6,7,8,9*/
0x77,0x7c,0x39,0x5e,0x79,0x71,0x3d,0x76,0x40,0x00}; /*A,B,C,D,E,F,G,H,-,hide*//*段碼表*/
uchar keyval[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38, /*0,1,2,3,4,5,6,7*/
0x01,0x09,0x11,0x19,0x21,0x29,0x31,0x39}; /*7,8,9,A,B,C,D,E,F*//*鍵值表*/
/*****************************/
/*函數(shù)聲明*/
/********************/
void Init8279(void); /*8279 Init*/
void Display(void); /*display*/
uchar ReadKey(void); /*ReadKey*/
void Delay(uint); /*delay*/
/*****************************************/
/*主函數(shù)*/
/**************************************/
void main(void)
{
int v;
float v0=0.0;
Init8279();
while(1)
{
ch0=0;
Delay(128);
while(E==0);
v=ch0;
v0=(float)5*v/255;
v0=1000*v0;
disdat[0]=0x13; /*顯示單元賦值*/
disdat[1]=0x13;
disdat[2]=0x13;
disdat[3]=0x13;
disdat[4]=(int)v0/1000;
disdat[5]=(int)v0%1000/100;
disdat[6]=(int)v0%1000%100/10;
disdat[7]=(int)v0%1000%100%10;
Display();
Delay(60000);
}
}
/**************************************/
void Init8279(void)
{
c8279=0x00; /* set 8279 工作方式8x8字符顯示;左邊輸入;雙鍵互鎖 */
c8279=0x2a; /* set 8279 分頻系數(shù) */
c8279=0xd1; /* clear 8279 */
while(c8279 & 0x80);
}
/******************* 讀鍵值函數(shù) ************/
uchar ReadKey(void)
{
uchar i,j,m;
m=c8279&0x0f; /*讀取按鍵ram看是否有鍵按下*/
if(m==0)
return(nokey); /*no key is pressed*/
else
{
c8279=0x40; /* read 8279 FIFO */
i=d8279; /* i=keyval */
i&=0x3f;
for(j=0;j<16;j++)
{
if(i!=keyval[j]); /*程序查表算法*/
else return(j);
}
}
}
/*********************************************/
void Display(void)
{
uint i;
for(i=0;i<8;i++)
{
c8279=0x80+i;
d8279=LedCode[disdat[i]];
}
}
/*******************************************/
void Delay(uint t)
{
while(--t);
}
/***
請各位幫看一下有什么問題啊
問題補充:地址和顯示部分沒問題
轉(zhuǎn)換有問題
不能正確轉(zhuǎn)換
比如給0V它會轉(zhuǎn)換成1~3
給5V它轉(zhuǎn)換成3~5
中間基本也是這樣
而且每次轉(zhuǎn)換跳動很大
但出現(xiàn)的數(shù)值不多
這是第4天了
這四天沒干別的
上網(wǎng)查資料
檢查電路
要瘋了
關(guān)于用51單片機和ADC0809做電壓表的問題(51高手請進(jìn))
全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒有回復(fù)呢,說說你的想法