|
一直卡在ADC轉(zhuǎn)換等待那里,屏沒顯示。把ADC_IN();注示掉就可以顯示000.這個(gè)中斷程序是抄stc規(guī)格書里的.應(yīng)該不會(huì)錯(cuò)呀。下面是原理圖
芯片和基準(zhǔn)電壓供電
氣壓力傳感器
單片機(jī)源程序如下:
//ADC基本操作(中斷方式)
#include "ADC.H"
unsigned int AD_Dat;
void ADC_IN()
{
P1M1 = 0x01; P1M0 = 0x00; //設(shè)置 P1.0 為 ADC 輸入口
P_SW2|=0X80; //打開特殊功能寄存器
ADCTIM=0X3F; //設(shè)置ADC內(nèi)部時(shí)序
P_SW2&=0X7F; //關(guān)閉特殊功能寄存器
ADCCFG=0X0F; //設(shè)置ADC結(jié)果左對(duì)齊+ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16
ADC_CONTR=0X80; //使能ADC模塊(ADC電源打開并選擇ADC通道P1.0/ADC0)
EADC=1; //使能ADC中斷 (ADC中斷打開)
EA=1; //總開關(guān)打開
ADC_CONTR|=0X40; //啟動(dòng)AD轉(zhuǎn)換
while(1);
}
void ADC_ISR()interrupt 5
{
ADC_CONTR&=~0X20; //清中斷標(biāo)志
AD_Dat=(ADC_RES<<8)|ADC_RESL; //讀取ADC結(jié)果
ADC_CONTR|=0X40; //繼續(xù)AD轉(zhuǎn)換
}
上面是.C文件 ,下面是.H文件
#ifndef __ADC_H__
#define __ADC_H__
#include "stc8hxx.h"
sbit a2=P1^1;
sbit a3=P1^7;
void ADC_IN();
extern unsigned int AD_Dat;
#endif
main程序
//頭文件
#include "stc8hxx.h" //包含此頭文件后,里面聲明的寄存器不需要再手動(dòng)輸入,避免重復(fù)定義
#include "delay.h"
#include "display.h"
#include "key.h"
#include "ADC.H"
#define MAIN_Fosc 12000000L //定義主時(shí)鐘
/*******************************************************************************
* 文件名: 重定義
* 描 述:
* 功 能:
* 作 者:
* 版本號(hào):1.0.1(2017.05.23)
*******************************************************************************/
//typedef unsigned char u8;
//typedef unsigned int u16;
//typedef unsigned long u32;
/*******************************************************************************
* 文件名:全局變量定義區(qū)域
* 描 述:
* 功 能:
* 作 者:
* 版本號(hào):1.0.1(2015.03.03)
*******************************************************************************/
unsigned char wnd=0; //窗口變量,初始為P1 0可以改變默認(rèn)窗口
unsigned char parm1=0; //窗口P1 對(duì)應(yīng)的變量
unsigned char parm2=0; //窗口P2 對(duì)應(yīng)的變量
unsigned char parm3=0; //窗口P3 對(duì)應(yīng)的變量
unsigned char parm4=0; //窗口P4 對(duì)應(yīng)的變量
/*******************************************************************************
* 文件名:函數(shù)前置聲明
* 描 述:
* 功 能:
* 作 者:
* 版本號(hào):1.0.1(2017.05.23)
*******************************************************************************/
void dis_Service(); //顯示的功能函數(shù)
void key_Service(); //按鍵的功能函數(shù)
/*******************************************************************************
* 文件名:主函數(shù)
* 描 述: 完成程序模塊的調(diào)用
* 功 能:
* 參 數(shù):無(wú)
* 版本號(hào):1.0.1(2017.05.23)
*******************************************************************************/
void main()
{
P0M1 = 0x00; P0M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P2M1 = 0x00; P2M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P3M1 = 0x00; P3M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P5M1 = 0x00; P5M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
//P1M1 = 0x01; P1M0 = 0x00; //設(shè)置 P1.0 為 ADC 輸入口
// led1=0; md1=0; fmq=0;
a2=0; a3=0;
while(1)
{
//開機(jī)界面
// unsigned int i;
//
// for(i=0;i<5000;i++)
// {
// Display();
// }
ADC_IN();
dis_Service();
Display();
}
}
void dis_Service()
{
LEDBuf[0]=AD_Dat/100;
LEDBuf[1]=AD_Dat%100/10;
LEDBuf[2]=AD_Dat%10;
LEDBuf[3]=wnd;
}
還有個(gè)顯示子程序
#include "display.h"
//共陽(yáng)數(shù)碼管編碼表
unsigned char code leddata[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,0x91};
//共陰數(shù)碼管編碼表
//unsigned char code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
// 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
//數(shù)據(jù)顯示緩沖區(qū)
unsigned char LEDBuf[]= {16,13,2,8};
//位選信號(hào)
unsigned char code PLACE_CODE[] ={0xfe,0xfd,0xfb,0xf7};
//單位段碼
unsigned char code unit[] ={0xfe,0xfd,0xf7,0xfb};
void Display()
{
unsigned char i;
//1.送段碼
//2.送位選
//3.延時(shí) 1ms 全部數(shù)碼管顯示時(shí)間<10ms
//4.消隱
switch(i)
{
case 0:
duan=leddata[LEDBuf[0]];
wei=PLACE_CODE[0];
DelayXms(1);
duan=0xff;
i++;
break;
case 1:
duan=leddata[LEDBuf[1]];
wei=PLACE_CODE[1];
DelayXms(1);
duan=0xff;
i++;
break;
case 2:
duan=leddata[LEDBuf[2]];
wei=PLACE_CODE[2];
DelayXms(1);
duan=0xff;
i++;
break;
case 3:
duan=unit[LEDBuf[3]];
wei=PLACE_CODE[3];
DelayXms(1);
duan=0xff;
i=0;
break;
default:break;
}
}
|
|