?? tlc549_2.c
字號:
#include<reg51.h>
//定義顯示數組d[4]以及一個變量n用于動態顯示
unsigned char d[4],n;
//定義顯示用的查找表
unsigned char code table[11]={0x3f,6,0x5b,0x4f,
0x66,0x6d,0x7d,7,0x7f,0x6f,0}; //0--9 最后再有一個空
unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};
//定義TLC549轉換接口
sbit tlc549_cs=P1^6;
sbit tlc549_clk=P1^5;
sbit tlc549_data=P1^4;
//定義可位尋址的變量adc用于存放ad轉換值,
//以及一個bit變量用于移位,它指示了ad的最最低一位
unsigned char bdata adc;
sbit adclow=adc^0;
//ad轉換函數
unsigned char adconvert()
{ unsigned char i;
tlc549_cs=1;
tlc549_cs=0;
tlc549_clk=0;
for(i=0;i<8;i++)
{ tlc549_clk=1;
adclow=tlc549_data;
tlc549_clk=0;
if(i<7) adc=adc<<1;
}
tlc549_clk=0;
tlc549_cs=1;
return(adc);
}
/******將ad轉換BCD碼值顯示出來**********/
vtobcd(unsigned int hexs)
{
d[0]=hexs/1000;
hexs=hexs % 1000;
d[1]=hexs/100;
hexs=hexs % 100;
d[2]=hexs/10;
hexs=hexs % 10;
d[3]=hexs;
}
/*******延時函數***********/
void delay(unsigned char dy)
{
while(--dy);
}
/*****定時器初始化函數********/
void Init_Timer (void)
{
TMOD=0X21;
TR0=1;
ET0=1;
EA=1;
}
/**********定時器0中斷服務函數*****************/
void timer0() interrupt 1 using 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
n=n++;
if(n>3) n=0;
P0=0;
P2=digit[n];
P0=table[d[n]];
}
/******主函數main*************/
//效果就是多次測量求平均值然后顯示測量的電壓值;
//電壓值用mv為單位,范圍 0--5000mv
//由于測量值的范圍為0--255,所以中間要乘一個系數19.6
/*****************************/
void main()
{
unsigned char ad,j;
unsigned int sum_ad=0;
Init_Timer();
//變量初始化
n=0;
while(1)
{
for(j=0;j<10;j++)
{ ad=adconvert(); //ad轉換
sum_ad=sum_ad+ad;
delay(250);
}
sum_ad=sum_ad/10;
vtobcd(sum_ad*19.6); //將ad轉換BCD碼
for(j=0;j<200;j++) delay(250);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -