|
proteus內(nèi)容如圖:
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit CS = P1^0;
- sbit CLK = P1^1;
- sbit DO = P1^2;
- uchar code tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x40,0x3e,0x00};
- uchar code du[] = {0xfe,0xfd,0xfb,0xf7};
- uint huancun[] = {0,0,0,0};
- void delay();
- void display();
- uchar Read_ADC0831();
- void main(){
- uint i;
- long adc_data;
- while(1){
- i++;
- if(i == 100){
- i = 0;
- adc_data = Read_ADC0831() * 100;
- adc_data = adc_data / 51;
-
- if(adc_data > 461 && adc_data <= 494)
- {
- adc_data = adc_data * (-3.1818);
- adc_data = adc_data + 1576.35;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 438 && adc_data <= 461)
- {
- adc_data = adc_data * (-3.6364);
- adc_data = adc_data + 1782.74;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 401 && adc_data <= 438)
- {
- adc_data = adc_data * (-4.8571);
- adc_data = adc_data + 2319.98;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 373 && adc_data <= 401)
- {
- adc_data = adc_data * (-6);
- adc_data = adc_data + 2782;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 341 && adc_data <= 373)
- {
- adc_data = adc_data * (-8);
- adc_data = adc_data + 3528;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 300 && adc_data <= 341)
- {
- adc_data = adc_data * (-9.375);
- adc_data = adc_data + 3990.63;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 263 && adc_data <= 300)
- {
- adc_data = adc_data * (-12.5);
- adc_data = adc_data + 4950;
- adc_data = adc_data/10;
- }
- else if(adc_data > 222 && adc_data <= 263)
- {
- adc_data = adc_data *(-19.512);
- adc_data = adc_data + 6831.66;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 137 && adc_data <= 222)
- {
- adc_data = adc_data * (-41.1765);
- adc_data = adc_data + 11641.18;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 91 && adc_data <= 137)
- {
- adc_data = adc_data * (-100);
- adc_data = adc_data + 19700;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 66 && adc_data <= 91)
- {
- adc_data = adc_data * (-235.2941);
- adc_data = adc_data + 32294.12;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 50 && adc_data <= 66)
- {
- adc_data = adc_data * (-454.5455);
- adc_data = adc_data + 47000;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 39 && adc_data <= 50)
- {
- adc_data = adc_data * (-727.2727);
- adc_data = adc_data + 62000;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 33 && adc_data <= 39)
- {
- adc_data = adc_data * (-1000);
- adc_data = adc_data + 74000;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 25 && adc_data <= 33)
- {
- adc_data = adc_data * (-2166.6667);
- adc_data = adc_data + 111500;
- adc_data = adc_data / 10;
- }
- else if(adc_data > 17 && adc_data <= 25)
- {
- adc_data = adc_data * (-4848.4211);
- adc_data = adc_data / 10;
- adc_data = adc_data + 17736.253;
- }
- else if(adc_data >= 14 && adc_data <= 17){
- adc_data = adc_data * (-3846.1538);
- adc_data = adc_data / 10;
- adc_data = adc_data + 15692.308;
-
- }
- huancun[0] = adc_data / 1000;
- huancun[1] = adc_data % 1000 / 100;
- huancun[2] = adc_data % 100 / 10;
- huancun[2] += 10;
- huancun[3] = adc_data % 10;
- }
- display();
- }
- }
- void delay(){
- uchar i;
- for(i = 0;i < 180;i++);
- }
- void display(){
- uchar i;
- for(i = 0;i < 4;i++){
- P3 = du[i];
- P2 = tab[huancun[i]];
- delay();
- }
- }
- uchar Read_ADC0831(){
- uchar i,temp;
- DO = 1;
- _nop_();
- _nop_();
- CS = 0;
- _nop_();
- _nop_();
- CLK = 0;
- _nop_();
- _nop_();
- CLK = 1;
- _nop_();
- _nop_();
- CLK = 0;
- _nop_();
- _nop_();
- CLK = 1;
- _nop_();
- _nop_();
- CLK = 0;
- _nop_();
- _nop_();
- for(i = 0;i < 8;i++){
- CLK = 1;
- _nop_();
- _nop_();
- temp <<= 1;
-
- if(DO){
- temp++;
- }
-
- CLK = 0;
- _nop_();
- _nop_();
- }
- CS = 1;
- _nop_();
- _nop_();
-
- return(temp);
- }
復(fù)制代碼 此為如題所示C源程序和proteus仿真51hei下載:
light_sensor.zip
(90.03 KB, 下載次數(shù): 97)
2021-6-23 08:35 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|