历史上的今天
今天是:2024年10月24日(星期四)
2019年10月24日 | 基于使用PIC16F87X单片机ADC制作的照度计
2019-10-24 来源:51hei
单片机程序源码如下:
#include __CONFIG(HS&WDTDIS&LVPDIS); #define U5A RB0 #define U5B RB1 #define U5C RB2 unsigned char temp1; unsigned char temp2; const unsigned char LED[28]= { 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/ 0x77,/*A*/ 0x7C,/*b*/ 0x39,/*C*/ 0x58,/*c*/ 0x5E,/*d*/ 0x79,/*E*/ 0x71,/*F*/ 0x76,/*H*/ 0x74,/*h*/ 0x38,/*L*/ 0x54,/*n*/ 0x37,/*N*/ 0x5C,/*o*/ 0x73,/*P*/ 0x50,/*r*/ 0x78,/*t*/ 0x3E,/*U*/ 0x40,/*-*/ }; unsigned int ADbuf; unsigned int adcbuf[16]; void main(void) { unsigned char buf; unsigned char USARTbuf; unsigned char c=0; unsigned char e=0; unsigned char i; unsigned char b; unsigned char d=0; TRISA=0B11111111; TRISB=0B11111000; TRISD=0B00000000; PORTA=0B00000000; PORTB=0B00000000; PORTD=0B00000000; ADCON1=0B10001111; ADIE=0; //禁止A/D中断 SPBRG=25; //设置波特率为9600,误差0.16% BRGH=1; //设置高速波特率 SYNC=0; //SYNC=0为异步模式,SYNC=1为同步模式 SPEN=1; //允许串口操作 CREN=1; //CREN=0禁止连续接收,CREN=1允许连续接收 TXIE=0; //禁止发送中断 RCIE=0; //禁止接收中断 TX9=0; //TX9=0为8位发送,TX9=1为9位发送 RX9=0; //RX9=0为8位接收,RX9=1为9位接收 TXEN=1; //TXEN=0为禁止发送,TXEN=1为允许发送 while(1) //死循环,单片机初始化后,将一直运行这1个死循环 { for(i=0;i<16;i++) //连续采样16次,然后取平均数 { asm("NOP"); //略做延时 asm("NOP"); //略做延时 asm("NOP"); //略做延时 asm("NOP"); //略做延时 ADGO=1; //开始进行A/D转换 while(ADGO) continue; //等待A/D转换结束 adcbuf[i]=ADRESH*256+ADRESL; //********************* } ADbuf=0; for(i=0;i<16;i++) { ADbuf+=adcbuf[i]; } ADbuf=ADbuf/16; ADbuf=(int)(((float)ADbuf/1023)*1000); temp1=ADbuf/100; temp2=ADbuf%100; if(ADbuf<999) { PORTD=0; if(++d>3) d=0; if(d==0) { U5A=0; U5B=0; U5C=0; PORTD=LED[(ADbuf%10000)/1000]; } else if(d==1) { U5A=1; U5B=0; U5C=0; PORTD=LED[(ADbuf%1000)/100]; } else if(d==2) { U5A=0; U5B=1; U5C=0; PORTD=LED[(ADbuf%100)/10]; } else if(d==3) { U5A=1; U5B=1; U5C=0; PORTD=LED[ADbuf%10]; } } if(ADbuf>999) { PORTD=0; if(++d>3) d=0; if(d==0) { U5A=0; U5B=0; U5C=0; PORTD=LED[15]; } else if(d==1) { U5A=1; U5B=0; U5C=0; PORTD=LED[15]; } else if(d==2) { U5A=0; U5B=1; U5C=0; PORTD=LED[0]; } else if(d==3) { U5A=1; U5B=1; U5C=0; PORTD=LED[10]; } } if(RCIF==1) { USARTbuf=RCREG; if(OERR==1); { CREN=0; CREN=1; } if(USARTbuf==0x89) { TXREG=0X90; while(TRMT==0); TXREG=temp1; while(TRMT==0); TXREG=temp2; while(TRMT==0); } } } }
史海拾趣
|
300名市民首日换卡尝鲜 换张RFID-SIM卡几秒就能搞定 本报讯 (记者蒋偲 通讯员周玉兰)刷手机坐公车、刷手机用餐、刷手机看电影、刷手机超市结账……昨日是手机深圳通正式推出的第一天,第一位体验的市民张晓东向记者表示,11路是自己每日上 ...… 查看全部问答> |
|
写了一个驱动,要在收到协议的第一个字节后,开始启动超时定时器,如果超时就复位接受缓存。 不懂在驱动中该如何使用定时器,就学着用WaitForSingleObject()实现,但是在使用中如何能实现“收到第一个字节启动,收到最后一个停止”??? 实现过 ...… 查看全部问答> |
|
欢迎大家讨论嵌入式TCP/IP技术 RTL8019 ENC28J60 CP2200 cs8900 DM9000... uIP LwIP ZlIP TinyTcp 。。。 qq 群:28221007… 查看全部问答> |
|
我最近正在使用IAR 编写atmega128的ucos系统 不过在isr.r90文件中,有一句汇编语句 小弟不太懂 希望高人指教。 RSEG CODE:CODE:NOROOT(0) 这条语句中的0代表什么意思? 在写中断汇编的时候, ...… 查看全部问答> |
|
各位工控朋友你们好 我现在遇到一个很棘手的问题,恳求高手指点!我所在的公司是一家啤酒酿造企业,前一段时间酿造车间引进一套发酵自动温控系统,用的是西门子的S7 412-2的PLC ,上位机组态软件是WINCC5.0。因生产工艺的要求,每个发酵罐要用几个 ...… 查看全部问答> |
|
最近在调试过程中,一直发现结构体中数据错位现象,但是仿真器查看,又都正确..无意中数了数缓存前面的变量,是奇数字节.改称偶数字节后,一切正常.. 例如: 奇数字节unsigned char Flag = 0;unsigned char U0RxBuf[512+32];//--------------------- ...… 查看全部问答> |
|
本帖最后由 科技猎人 于 2016-6-16 18:17 编辑 [MsgOS]发个自己写的cortex-m单片机专用的操作系统 https://bbs.eeworld.com.cn/forum ... 2496&fromuid=703533 (出处: 电子工程世界-论坛) [MsgOS]让系统跑起来 https://bbs.eeworld.com.c ...… 查看全部问答> |




