?? chengxu.c
字號:
/********************************************************************
匯誠科技
實現功能:AD_UART程序,數碼管顯示模擬量值
使用芯片:STC12C5204AD
晶振:11.0592MHZ
編譯環境:Keil
硬件環境:四位數顯兩路輸入三按鍵
作者:yang
QQ:790244909
網站:www.ourhc.cn
物聯網測試網站:http://hualongelectron.eicp.net/
日期:2013-04-02
淘寶店:
華龍電子直銷:http://hlelectrony.taobao.com
電子開發直銷:http://shop63233873.taobao.com
匯誠科技網路購物:http://shop36330473.taobao.com
【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!
********************************************************************/
/********************************************************************
程序說明:
1、P1口八路AD數據轉換。
2、將轉換的數據通過串口發送出去。
3、發送數據的格式是:(通道口-數據)
注意:通道口必須有模擬量輸入數據才有效。
********************************************************************/
#include<STC12C5A60S2.H> //庫文件
#include <intrins.h>
#include"SMG.H"
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int //宏定義無符號整型
#define FOSC 11059200L
#define BAUD 9600
#define ADC_POWER 0x80 //ADC 電源控制位
#define ADC_FLAG 0x10 //ADC 轉換結束標志位
#define ADC_START 0x08 //ADC 開始轉換控制位
#define ADC_SPEEDLL 0x00 //420個時鐘周期轉換一次
#define ADC_SPEEDL 0x20 //280 個時鐘周期轉換一次
#define ADC_SPEEDH 0x40 //140個時鐘周期轉換一次
#define ADC_SPEEDHH 0x60 //70個時鐘周期轉換一次
void delay(uint x);
extern void t_to_dis(void);
extern void display(void); //顯示函數
/********************************************************************
延時函數
*********************************************************************/
void delay(uint x)//延時程序 0.1秒
{
uchar m,n,s;
for(m=x;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
功能:串口初始化,波特率9600,方式1
*********************************************************************/
void Init_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/********************************************************************
AD轉換初始化程序
*********************************************************************/
void InitADC()
{
P1ASF|=0x10; //設置P1口為開漏模式,使用AD功能
ADC_RES=0; //AD數據寄存器清空
ADC_CONTR=ADC_POWER|ADC_SPEEDL|ADC_START;//打開AD電源,轉換周期XX
delay(10); //延時
}
/********************************************************************
AD轉換控制程序
*********************************************************************/
uchar GetADCResult(uchar px) //轉換輸出的數據 (PX為通道口)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//開始轉換
_nop_(); //延時一個機器周期
_nop_(); //延時一個機器周期
_nop_(); //延時一個機器周期
_nop_(); //延時一個機器周期
while (!(ADC_CONTR & ADC_FLAG));//等待轉換結束
ADC_CONTR &= ~ADC_FLAG; //關閉AD轉換
return ADC_RES; //返回數據
}
/********************************************************************
串口數據發送
*********************************************************************/
void SendData(uchar dat)
{
SBUF = dat; //發送數據
while (!TI); //等待數據
TI = 0; //清零標志位
}
/********************************************************************
編輯數據函數
*********************************************************************/
void show(uchar ch)
{
SendData(ch); //發送顯示通道
SendData(GetADCResult(ch)); //發送對應通道的數據
}
/********************************************************************
/********************************************************************
主函數
*********************************************************************/
void main()
{
P2M1=0;
P2M0=0xff;
P1M1=0;
P1M0=0x0f;
P3M1&=0x7f;
P3M0|=0x80;
Init_Com();//串口初始化
InitADC(); //AD轉換初始化
while(1)
{
// show(0); //顯示第一通道的數值
// show(1); //顯示第二通道的數值
// show(2); //顯示第三通道的數值
// show(3); //顯示第四通道的數值
show(4); //顯示第五通道的數值
// show(5); //顯示第六通道的數值
// show(6); //顯示第七通道的數值
// show(7); //顯示第八通道的數值
t_to_dis();
display();
}
}
/********************************************************************
結束
*********************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -