|

楼主 |
发表于 2024-3-4 11:13:27
|
显示全部楼层
代码如下:
ADC部分:
- #include <stc8h.h>
- #include "intrins.h" //_nop_
- #include "delayms.h"
- typedef unsigned char u8;
- typedef unsigned int u16;
- u16 voltage;
- void adc_init()
- {
- ADCTIM=0x3f; //0011 1111
- //cssetup ADC通道选择时间0 1个时钟
- //cshold ADC通道选择保持01 2个时钟
- //smspduty ADC模拟信号采样时间11111 32个时钟
- ADCCFG= 0x2f; //0010 1111
- //resfmt 转换结果右对齐,B5为1
- //speed ADC工作时钟1111 sysclk/2/16
- ADC_CONTR=0x80; //1000 0000
- //adc_power 打开ADC电源B7为1
- delayms(10);
- }
- u16 get_adc12bitresult(u8 channel)
- {
- ADC_RES=0; //
- ADC_RESL=0; //
- ADC_CONTR=(ADC_CONTR & 0xf0) | 0x40 | channel; //启动ADC
- //adc_start ADC转换启动0x40 B6为1
- //adc_chs 模拟通道选择
- _nop_();_nop_();_nop_();_nop_();
- while((ADC_CONTR & 0x20)==0); //等待ADC结束
- //adc_flag 0x20 ADC转换标志B5为1
- ADC_CONTR &= ~0x20; //标志归0
- return (((u16)ADC_RES<<8) | ADC_RESL); //高8位左移8位再或上低8位
- }
- void adc_convert(u8 chn)
- {
- u16 j;
- u8 k;
- get_adc12bitresult(chn); //查询方式做一次ADC,丢弃
- get_adc12bitresult(chn); //查询方式做一次ADC,丢弃
- for (k=0;k<16;k++)
- j=j+get_adc12bitresult(chn);
- j=j/16;
- voltage=j*0.12207; //(5/4096)*100
- }
复制代码 端口设置部分:
- #include <stc8h.h>
- void gpio_init()
- {
- P_SW2 |= 0x80; //扩展寄存器XFR访问使能 1000 0000或等于 B7要为1
- P0M1=0x00; P0M0=0x00; //P0口设置为准双向口 接数码管段选
- P1M1=0x10; P1M0=0x00; //P1口设置为准双向口 数码管位选P1.4 ADC4
- P5M1=0x00; P5M0=0x00; //P5口设置为准双向口 P5.2数码管位选
- }
复制代码
显示部分:
- #include <stc8h.h>
- #include "delayms.h"
- #include "adc.h"
- sbit led_a = P1^0; //
- sbit led_b = P1^1; //
- sbit led_c = P5^2; //
- sbit led_d = P1^3; //
- //数码管接在P0口
- unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
- void display() //显示函数
- {
- P0=table[voltage%10]; //送出段选信号
- led_a=0; //打开个位位选
- delayms(5);
- led_a=1;
- P0=table[voltage/10%10]; //送出段选信号
- led_b=0; //打开十位位选
- delayms(5);
- led_b=1;
- P0=table[voltage/100%10]&table[10];
- led_c=0;
- delayms(5);
- led_c=1;
- P0=table[voltage/1000%10];
- led_d=0;
- delayms(5);
- led_d=1;
- }
复制代码
主函数部分:
- #include <stc8h.h> //头文件
- #include "display.h"
- #include "adc.h"
- #include "delayms.h"
- #include "gpio.h"
- void main () //主函数
- {
- gpio_init(); //初始化
- adc_init(); //初始化
- while(1)
- {
- adc_convert(4); //ADC4 P1.4
- display(); //调用显示函数
- }
- }
复制代码
|
|