⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v__.c

📁 利用mega16自带的AD进行电压测量.测量范围0~5V.
💻 C
字号:
#include <mega16.h>
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x40
	.EQU __sm_mask=0xB0
	.EQU __sm_powerdown=0x20
	.EQU __sm_powersave=0x30
	.EQU __sm_standby=0xA0
	.EQU __sm_ext_standby=0xB0
	.EQU __sm_adc_noise_red=0x10
	.SET power_ctrl_reg=mcucr
	#endif
#include <delay.h>
#define data PORTA.0
#define clk PORTA.1
flash unsigned char led[]={0x28,0xeb,0x19,0x89,0xca,0x8c,0x0c,0xe9,0x08,0x88,0xff};

unsigned char dis_buff[4];

void sendbyte(unsigned char byte)
{
 unsigned char num,c;
 num=led[byte];
 for(c=0;c<8;c++)
 {
  clk=0;
  data=num&0x01; //(0x80即十进制的128, 二进制的10000000 按位发送)
  clk=1;
  num>>=1;
 }
}

// ADC电压值送显示缓冲区函数
void display(unsigned int adc)
{
 unsigned char i;
 sendbyte(10);
 sendbyte(10);
 sendbyte(10);
 sendbyte(10);
 for (i=0;i<=3;i++)
 {
  dis_buff[i]=adc%10;
  sendbyte(dis_buff[i]);
  adc /= 10;
 }
}

void init()
{
  DDRA=0X7f;
  ADMUX=0x47;
  ADCSRA=0xCd;
}

void main()
{
  init();
  delay_ms(500);//点亮测试
  #asm("sei");
  while(1);
}

interrupt [15] void adc_is()
{
    float adc_data;
    int adc_v;
    #asm("cli");
    adc_data=ADCW;
    adc_v=adc_data*5050/1024;
    display(adc_v);
    ADCSRA=0xCE;
    #asm("sei");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -