/****************************/
/*Head files*/
/************************/
#include"reg51.h"
#include"absacc.h"
/***********************/
#define c8279 XBYTE[0x0fff] /*8279控制字寄存器地址*/
#define d8279 XBYTE[0x0ffe] /*8279數據地址*/
#define ch0 XBYTE[0x2ff8] /*ADC地址*/
#define uchar unsigned char
#define uint unsigned int
sbit E=P3^2;
/*******************************/
uint disdat[8]; /*定義一個數組作為顯示單元*/
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*//*鍵值表*/
/*****************************/
/*函數聲明*/
/********************/
void Init8279(void); /*8279 Init*/
void Display(void); /*display*/
uchar ReadKey(void); /*ReadKey*/
void Delay(uint); /*delay*/
/*****************************************/
/*主函數*/
/**************************************/
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 分頻系數 */
c8279=0xd1; /* clear 8279 */
while(c8279 & 0x80);
}
/******************* 讀鍵值函數 ************/
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);
}
/***
請各位幫看一下有什么問題啊
問題補充:地址和顯示部分沒問題
轉換有問題
不能正確轉換
比如給0V它會轉換成1~3
給5V它轉換成3~5
中間基本也是這樣
而且每次轉換跳動很大
但出現的數值不多
這是第4天了
這四天沒干別的
上網查資料
檢查電路
要瘋了
關于用51單片機和ADC0809做電壓表的問題(51高手請進)
全部回復(0)
正序查看
倒序查看
現在還沒有回復呢,說說你的想法