main.c

来自「本源码是实现1602的液晶驱动,实验平台是AVR单片机」· C语言 代码 · 共 90 行

C
90
字号
#include <iom16v.h>
#include <macros.h>
#include <string.h>
#include "port.h" // 位变量定义及串口初死化
#include "1602.h"  //用的傻孩子的1602显示文件,其中显示数字的我改了一下.
unsigned int adczs; //ADC三次平均数
unsigned int re;    //串口接收到的数据,
void main(void)
{   
DDRC = 0b11111111;
PORTC = 0b00000000;
DDRB = 0b11111111;
PORTB = 0b00000000;
PORTDefine();
LCDInit();
PORTA=0;
DDRA=0;
   Locate(1,1)
   Print("[ADCL")
   Locate(11,1)
   Print("ADC16")
   Locate(1,0)
   Print("[ADCH")
   Locate(16,1)
   Print("]")
   Locate(16,0)
   Print("]")

ADMUX=0b01000000;  //ADC0,
ADCSR=0B10001110;  //
ADCSR|=0B01000000; //启动一次转换
delay_nms(1);
while(ADCSR&0b00010000)   //这个可能没有起做用,我还不熟
{
unsigned int n;     
unsigned int adcl;
unsigned int adch;
unsigned int adc;
unsigned int adcpjt;  

ADCSR|=0B00000000; //清转换完成标志位,也不知道是不是M16已经硬件清除了.
  adcl=0;
  adch=0;
  adc=0;
  n++;
  adcl=ADCL;
  adch=ADCH;
  PORTC=~adch;
  adc=ADC;
  adczs+=adc; //ADC转换三次的总数,
	
	adcl=((adc<<8)>>8); //好像也是多余的
	adch=((adc>>8)<<8); //前面已经读过了
	ADCSR|=0B01000000;
	Locate(7,1)	
	LCDDisplayNum(adcl); 
	Locate(7,0)
	LCDDisplayNum(re); 
	Locate(11,0)
	LCDDisplayNum(adcpj);
	if (n>2)
	{
	adcpj=(adczs/3); ADC转换三次的平均数
	adcpzs=0;
	n=0;
	}
	
        UDR=(adcl);
	while(UCSRA&=TXC)
	{
	;
	}
	
        UCSRA|=0B01000000;
	
        UDR=(adc>>8);
	while(UCSRA&=TXC)
	{
	;
	}
	while((UCSRA&=RXC))
	{
	;
	}
	re=UDR;
	delay_nms(200);
}
}
   

⌨️ 快捷键说明

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