单片机源程序如下:
- #define TLC2543_GLOBAL
- #include "TLC2543.h"
- uint read_TLC2543(uchar channel)
- {
- register uchar i;
- uint tempAD = 0;
- while(!TLC2543GetEoc()); //等待 TLC2543 空闲
- _delay_us(3);
- channel <<= 4;
- TLC2543Clk(TLC2543_CLR);
- TLC2543_Cs(TLC2543_SET);
- TLC2543_Cs(TLC2543_CLR); //_CS TLC2543 选取
- _delay_us(3);
- for( i = 0; i < 12; i ++ )
- {
- tempAD <<= 1;
- if( TLC2543GetDo() ) //读取数据
- {
- tempAD |= 0x01;
- }
- if( channel&0x80 )
- {
- TLC2543Di(TLC2543_SET);
- }
- else
- {
- TLC2543Di(TLC2543_CLR);
- }
- channel <<= 1;
- TLC2543Clk(TLC2543_SET);
- nop();
- TLC2543Clk(TLC2543_CLR);
- }
- TLC2543_Cs(TLC2543_SET); //TLC2543 close
- _delay_us(1);
- return tempAD; //取走转换结果
- }
- void _delay_us(uint us) //延时子函数
- {
- uchar delayi;
- while(--us)
- {
- for(delayi=0;delayi<10;delayi++);
- }
- }
复制代码- #include "led.h"
- #include "TLC2543.h"
- const uchar code displayMode=0x0f; //后四位分别对应缓冲区中每位的数据类型,
- //1为任意字符显示,0为数字显示
- uchar displayBuff[4]={0x7e,0x7e,0x7e,0x7e}; //数码管显示缓冲区,千,百,十,个
- const uchar code digitalNumber[10]={0x7e,0x06,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x73};
- sbit key=P1^2; //数码管显示数据
- void main() //主函数
- {
- uint voltageReadTemp;
- uint voltageRead;
- uchar temp;
- uchar i,j;
- init_led();
- while(1)
- {if(key){
- ledSweepDisplay(displayBuff,displayMode,4); //循环在数码管上显示缓冲区中的数据
- voltageRead=read_TLC2543(0x05);
- voltageRead=voltageRead*0x05;
- for(i=4;i>0;i--)
- {
- temp=(uchar)(voltageRead/0x0fff);
- if(i==4)
- displayBuff[i-1]=digitalNumber[temp]|0x80; //计算个位,放在缓冲区第3位
- else //计算十位,放在缓冲区第2位
- displayBuff[i-1]=digitalNumber[temp]; //计算百位,放在缓冲区第1位
- voltageRead=voltageRead%0x0fff; //计算千位,放在缓冲区第0位
- voltageReadTemp=voltageRead<<1; //每次缓存的读数左移一位
- voltageRead=0x0000;
- for(j=0;j<5;j++)
- voltageRead+=voltageReadTemp;//voltageRead=voltageRead*10
-
- }
- }
- else //切换量程 以下与上面相同
- {
- ledSweepDisplay(displayBuff,displayMode,4); //循环在数码管上显示缓冲区中的数据
- voltageRead=read_TLC2543(0x06);
- voltageRead=voltageRead*0x02;
- for(i=4;i>0;i--)
- {
- temp=(uchar)(voltageRead/0x0fff);
- if(i==4)
- displayBuff[i-1]=digitalNumber[temp]|0x80;
- else
- displayBuff[i-1]=digitalNumber[temp];
- voltageRead=voltageRead%0x0fff;
- voltageReadTemp=voltageRead<<1;
- voltageRead=0x0000;
- for(j=0;j<2;j++)
- voltageRead+=voltageReadTemp;//voltageRead=voltageRead*10
- }
-
- }
- }
- }
复制代码
所有资料51hei提供下载:
数字电压表.rar
(183.32 KB, 下载次数: 63)
|