TLC549仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
TLC549单片机源程序如下:- #include<reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar a1,a2,a3,tmp,BB;
- sbit clock=P3^4;//时钟线
- sbit dout=P3^5;//数据输出端
- sbit cs=P3^3;//片选(低电平有效)
- sbit aa=P1^1;//数码管位选;
- sbit bb=P1^0;//数码管位选;
- sbit cc=P1^2;//数码管位选;
- uchar code tab[]=//显示0~9;
- {
- 0x3f,0x06,0x5b,
- 0x4f,0x66,0x6d,
- 0x7d,0x07,0x7f,
- 0x6f
- /*0xc0,0xf9,0xa4,
- 0xb0,0x99,0x92,
- 0x82,0xf8,0x80,
- 0x90 */
- };
- void delay(uint xms) //延时函数
- {
- uint j,i;
- for(j=xms;j>0;j--)
- for(i=115;i>0;i--)
- ;
- }
- uchar tlc549_adc() //ADC数据采集
- {
- uchar i,j,tmp1;
- cs=1; //置高,片选无效
- clock=0; // 外部时钟信号拉低
- cs=0; //置低,片选有效
- _nop_(); //延时2微秒
- _nop_();
- for(i=0;i<8;i++)//串行数据移位输入
- {
- tmp1<<=1;
- tmp1|=dout;
- clock=1; //时钟信号
- _nop_();
- clock=0; //时钟信号
- }
- cs=1;
- for(j=17;j!=0;j--)//延时大约17微秒
- _nop_();
- return tmp1;//
- }
- void shuju()//数据转换
- {
- uint dat,ads;
- dat=tlc549_adc();
- ads=5.0/255*dat*1000;//放大一千倍
- a1=ads/1000; //百位
- a2=ads/100%10; //十位
- a3=ads/10%10; //个位
- }
- void xianshi() //输出显示(动态扫描)
- {
- P1=0X00;
- shuju();
- aa=0;
- bb=1;
- cc=0;
- P2=tab[a1]+0x80;//a1+0x80(0x80为小数点显示)
- delay(1);
- bb=0;
- aa=1;
- cc=0;
- P2=tab[a2];
- delay(1);
- bb=0;
- aa=0;
- cc=1;
- P2=tab[a3];
- delay(1);
- }
- void main()
- {
-
- while(1)
- {
- tlc549_adc();
- xianshi();
- }
- }
复制代码
仿真程序下载:
TLC549.7z
(456.55 KB, 下载次数: 0)
|