|
stc15f单片机ad和da仿真图:
STC15F单片机AD与DA转换接口设计检测5V电压
全部资料(压缩包)下载:
带仿真图 A D与D A转换接口设计检测5V电压.rar
(24.18 KB, 下载次数: 62)
下面是部分程序预览(完整版本请下载本帖附件):
- #include <STC15F2K60S2.H>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code led[]={
- //0 1 2 3 4 5 6 7 8 9
- 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //定义字形码表,共阳极
- ///////////////////////
- #define SI P00
- #define SCK P01
- #define RCK P02
- #define ADC_POWER 0x80 //ADC电源控制位
- #define ADC_FLAG 0x10 //ADC完成标志
- #define ADC_START 0x08 //ADC起始控制位
- #define ADC_SPEEDLL 0x00 //540个时钟
- /////////////////////////////////////////
- unsigned char disp[4]={0,0,0,0};
- ///////////////////////////////////////////
- void delay_ms(uint ms)
- { uint i,j;
- for(;ms>0;ms--)
- {
- for(i=0;i<7;i++)
- for(j=0;j<210;j++);
- }
- }
- /*----------------------------
- 初始化ADC
- ----------------------------*/
- void ADC_initiate()
- { P1ASF=0XFF;
- ADC_RES=0;
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
- delay_ms(1);
- }
- unsigned char ADC_STC12C5(unsigned char ch)
- { ADC_RES=0;
- ADC_CONTR|=ch;
- delay_ms(1);
- ADC_CONTR|=ADC_START;
- while(!(ADC_CONTR&ADC_FLAG));
- ADC_CONTR&=(~ADC_START);
- ADC_CONTR&=(~ADC_FLAG);
- return(ADC_RES);
- }
- void data_process(unsigned char value)
- { unsigned int temp;
- temp=value*196;
- disp[0]=temp/10000;
- disp[1]=(temp/1000)%10;
- disp[2]=(temp/100)%10;
- disp[3]=(temp/10)%10;
- }
- void sendData(unsigned char sendDat)
- { unsigned char i;
- for(i=0;i<8;i++)
- { if((sendDat&0x01)==0) SI=0;
- else SI=1; //发出最低位
- SCK=0;
- SCK=1; //上升沿,存储一位数据。
- sendDat=sendDat>>1;
- }
- }
- void seg_display(unsigned char n)
- { unsigned char c, i;
-
- for(i=0;i<n;i++)
- { c=disp[i]; //取出待显示字符
- if(i==0)
- sendData(led[c]+0x80); //送出字形码数据
- else
- sendData(led[c]);
- }
- RCK=0;
- RCK=1; //输出
- }
- void main()
- { unsigned char voltage;
- ADC_initiate(); //初始化
- delay_ms(10);
- while(1)
- {voltage=ADC_STC12C5(7);
- data_process(voltage);
- seg_display(4);
- delay_ms(10);
- }
- }
复制代码
|
评分
-
查看全部评分
|