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

📄 hjmcu.c

📁 很实用的单片机例程
💻 C
字号:
/**************************************************************************************************
*** 慧净电子1天入门、10天学会、1年精通单片机与C语言视频教程配套程序源码                         ***
*** 实验目的:HJ-1G 开发板   AVR配套实验程序                                                    ***
*** MCU: ATmega16          部分C源码可以直接用于项目开发、欢迎复制共享、功德无量、没有版权      ***
*** 作者:慧净免费助学会员  
*** 部分源码网上收集整理、如有伤害到你的利益、请来信,hjmcu@163.com 我们的免费助学会员会定期帮你删除掉         ***
*** 编译器:GCC                                                                                ***
*** 百度交流空间:http://hi.baidu.com/HJMCU      WWW.HJMCU.COM                                  ***
*** 论坛交流:http://bbs.hjmcu.com   欢迎来论坛一分钱不要下载配套的仿真电路                     ***
*** 配套的硬件学习板网址:http://shop37031453.taobao.com/                                       ***
*** 日期:2008.8.8                                                                              ***
*** 目标:用C语言写程序就这么简单、慧争祝你1天入门、10天学会、1年精通单片机与C语言、找个好工作  ***
***************************************************************************************************/

//慧净电子大学生课程设计专用实验板《HJ-1G》、直接支持AT89S52 STC89C52单片机
//加转接板后支持AVR ATmega16 32 系列单片机、是你学习单片机的得力助手 一板二用,学完51再学AVR

//HJ-1G 学习板加AVR转接板后,装上ATMETAM16 单片机实验
//HJ-1G 学习板AVR单片机实验,FM报警实验
//注意要把JTAGEN 仿真熔丝位设置成1 才能完成本实验,设置成1时不能用仿真口,只能用ISP下载接口下载程序
//本实验要用到电脑串口,可以用串口线接到电脑串口上,也可以用USB转串口线接到电脑USB接口上。
//请用配套的串口调试软件。
//本实验跟据网上的AVR学习笔记有我们的免费助学会员修改成。
//请用一线连接J5 第二个脚,到开发板上P0口上,可以调节AD电位器,电脑串口上拉机软件可以显示出电压值
#include <avr/io.h>        
#include <util/delay.h>
#include <avr/interrupt.h>   //中断函数头文件

//常量声明
#define BAUD 9600         //波特率设置值

//全局变量声明
unsigned int ADData;          //AD转换获得的数据

//函数声明
void Port_Init(void);   //端口初始化配置
void Usart_Init(void);  //USART寄存器设置
void AD_Init(void);    //AD初始化
void Usart_PutChar(unsigned char cTXData);  //字节发送函数
void Usart_PutString(unsigned char *pcString);  // 字符串发送数据
unsigned int AD_GetData(void);    //AD转换函数

int main(void)            
{
	unsigned char Delay3s;

	Port_Init();
	Usart_Init();
	AD_Init();
	
	Usart_PutString("AD转换测试程序");
	Usart_PutString("测得ADC0通道的电压值为:");
	
	sei();          //使能全局中断  
	
	while(1)
	{
		ADData = (int)((long)AD_GetData() * 5010 / 1024);		//将获得的AD值转换为电压值
		                                                        //单位为mv。
		
		Usart_PutChar(ADData / 1000 + 0x30);      //得到电压值的千位并发送
		Usart_PutChar('.');                          //发送小数点
		Usart_PutChar(ADData % 1000 / 100 + 0x30);   //得到电压值的百位并发送
		Usart_PutChar(ADData % 100 / 10 + 0x30);    //得到电压值的十位并发送
		Usart_PutChar(ADData % 10 + 0x30);     //得到电压值的个位并发送
		Usart_PutChar('V');                  //发送电压符号“V”
		
		Usart_PutChar(0x0d);     // 
		Usart_PutChar(0x0a);     //  AD值发送结束,回车换行
		
		for(Delay3s = 0;Delay3s < 30;Delay3s++)     //延时3S
		{
			_delay_ms(90);
		}
	}
}

//端口状态初始化设置函数
void Port_Init()
{
	PORTA = 0X00;         
	DDRA = 0x00;   //ADC通道设置为输入口,高阻态	
	
}

//USART寄存器配置函数
void Usart_Init()
{
	UCSRA = 0X00;	
	UCSRC |= (1<<URSEL) | (1 << UCSZ1) | (1 << UCSZ0);  //异步,数据格式8,N,1
	     //UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC 时, URSEL 应设置为 1。
	UBRRL = (F_CPU / BAUD / 16 - 1) % 256;    //波特率设置
	UBRRH = (F_CPU / BAUD / 16 - 1) / 256;		
	UCSRB |= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN);    //发送使能
	
}

//字节发送函数
void Usart_PutChar(unsigned char cTXData)
{
	while( !(UCSRA & (1 << UDRE)) );  //只有数据寄存器为空时才能发送数据
	UDR = cTXData;	                 //发送数据送USART I/O数据寄存器-UDR
}

//接收中断函数
ISR(USART_RXC_vect )
{
	unsigned char Rev;
	Rev = UDR;              //从USART I/O数据寄存器-UDR中读出数据
	Usart_PutChar(Rev);    //将接收到的数据发送
}


void Usart_PutString(unsigned char *pcString)
{
	while (*pcString)
	{
		Usart_PutChar(*pcString++);   
	}
	Usart_PutChar(0x0D);
	Usart_PutChar(0x0A);  //结尾发送回车换行
}

//AD转换初始化函数
void AD_Init()
{
	ADMUX |= (1 << REFS0);             //ADC参考电压为AVcc,ADC结果右对齐,选择通道ADC0
	ADCSRA |= (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);   //使能AD转换,ADC时钟64分频
}

//AD转换函数
unsigned int AD_GetData()
{
	ADCSRA |= (1 << ADSC);     //开始AD转换
	while(!(ADCSRA & (1 << ADIF)));    //等待转换完成
	ADCSRA |= (1 << ADIF);	          //清零ADC中断标志位
	
	return ADC;        //返回ADC值
}

⌨️ 快捷键说明

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