?? tlc549.c
字號:
/*******************************************************************************
* 標題: 藍海微芯LJD-SY-5200單片機開發系統演示程序 *
* 文件: TLC549.C *
* 日期: 2006-8-11 *
* 版本: 1.0 *
* 作者: 藍海微芯 *
* 網站: http://www.ljd-2008.com *
********************************************************************************
* 描述: *
* A/D TLC549轉換程序 *
* *
* *
********************************************************************************
* 【版權】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
* 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
*******************************************************************************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit CLK = P1^1; /* AD時鐘信號 */
sbit CS = P1^5; /* AD片選信號 */
sbit DOUT = P1^0; /* 數據輸出 */
sbit ch451_din = P3^5;
sbit ch451_clk = P3^4;
sbit ch451_load = P1^2;
sbit P1_4 = P1^4;
sbit P1_3 = P1^3;
/*須主程序定義的參數*/
#define CH451_DIG0 0x0800 /*數碼管位0顯示*/
#define CH451_DIG1 0x0900 /*數碼管位1顯示*/
#define CH451_DIG2 0x0a00 /*數碼管位2顯示*/
#define CH451_DIG3 0x0b00 /*數碼管位3顯示*/
#define CH451_DIG4 0x0c00 /*數碼管位4顯示*/
#define CH451_DIG5 0x0d00 /*數碼管位5顯示*/
#define CH451_DIG6 0x0e00 /*數碼管位6顯示*/
#define CH451_DIG7 0x0f00 /*數碼管位7顯示*/
void delay(uint us)
{
while(us--);
}
/* */
/********************************************************************
函 數 名:adc_549()
功 能:讀取AD輸出的10bit數據
說 明:
調 用:
入口參數:
返 回 值:
設 計:藍海微芯
***********************************************************************/
uint adc_549(void)
{
uint data_out=0;
uchar i;
CS = 1;
_nop_();
CS = 0;
for (i=0; i<8; i++) /* 讀取10位數據 */
{
CLK = 0;
data_out = (data_out<<1)|DOUT;
CLK = 1;
_nop_();
}
CLK = 0;
CS = 1;
delay(3); /* 延時21us以上 */
return(data_out);
}
/********************************************************************
函 數 名:ch451_init()
功 能:對ch451芯片進行初始化
說 明:
調 用:
入口參數:
返 回 值:
設 計:藍海微芯
***********************************************************************/
void ch451_init(void)
{
ch451_din = 0; /*先低后高,選擇4線輸入*/
ch451_din = 1;
ch451_load = 1;
ch451_clk = 1;
_nop_();
}
/********************************************************************
函 數 名:ch451_write()
功 能:把12位的指令或數據寫入ch451
說 明:12位數據或指令的寫入順序是低位
調 用:
入口參數:command
返 回 值:
設 計:藍海微芯
***********************************************************************/
void ch451_write(unsigned int command)
{
unsigned char i;
ch451_load=0; /*命令開始*/
for(i=0;i<12;i++)
{ /*送入12位數據,低位在前*/
ch451_din=command&1;
ch451_clk=0;
command>>=1;
ch451_clk=1; /*上升沿有效*/
}
ch451_load=1; /*加載數據*/
}
/********************************************************************
函 數 名:disp_ad()
功 能:把A/D轉換結果通過數碼管進行顯示
說 明:
調 用:
入口參數:command
返 回 值:
設 計:藍海微芯
***********************************************************************/
void disp_ad(uint adc_result)
{
uchar A;
uchar B;
uchar C;
uchar D;
A = adc_result/1000;
B = adc_result%1000/100;
C = adc_result%1000%100/10;
D = adc_result%1000%100%10;
ch451_write(CH451_DIG4|A);
ch451_write(CH451_DIG5|B);
ch451_write(CH451_DIG6|C);
ch451_write(CH451_DIG7|D);
delay(10000);
delay(10000);
}
/********************************************************************
函 數 名:main()
功 能:主程序
設 計:藍海微芯
***********************************************************************/
main()
{
ch451_init();
ch451_write(0x401);
ch451_write(0x580); /*以譯碼方式進行顯示*/
P1_4=1;
P1_4=0;
P1_3=1;
while(1)
{
float temp=0;
temp = adc_549();
disp_ad(temp);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -