AVR与VB通信模拟量输入简单程序

发布者:大树下的大白菜y最新更新时间:2015-06-23 来源: 51hei关键字:AVR  VB通信  模拟量输入 手机看文章 扫描二维码
随时随地手机看文章
 

 
//----------------------------------------AVR代码------------------------
#include
#include

 
#define uchar unsigned char
#define uint unsigned int

 
uchar seg[10]={0x3f,0x06,0x5b, //共阴极数码管0~9的字形码
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar tab[4]={0xfe,0xfd,0xfb,0xf7};//4位共阴极数码管的位选码

 
#define UDRE 5
#define RXC 7

 
uchar datt;  //接受到的数据比较变量
uchar adc_val;  //模拟量转换值

 
void delay(uint k)
{
 while(k--); 
}

 
void port_init()
{
PORTA=0x7f;    // 通道7作为模拟量输入
DDRA=0x7f;
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0xff;  
}

 
void adc_init()  //模拟量初始化
{
  ADCSRA=0xe3;
  ADMUX=0xc7; 
}

 
uint adc_vert()
{
 uint temp1,temp2;
 temp1=(uint)ADCL;
 temp2=(uint)ADCH;
 temp2=(temp2<<8)+temp1;
 return temp2; 
}

 

 
void time0_init()  //定时器0初始化
{
  TCNT0=0x83;
  TCCR0=0x03;
  TIMSK=0x01;  //定时器0溢出中断 
}

 
#pragma vector = 0x24
__interrupt void time0_vef()
{
 static uchar i;
  TCNT0=0x83;
  i++;
  if(i>3)i=0;
  switch(i)
  {
  case 0:PORTA=seg[adc_val%10];PORTC=tab[0];break;
  case 1:PORTA=seg[adc_val%100/10];PORTC=tab[1];break;
  case 2:PORTA=seg[adc_val%1000/100];PORTC=tab[2];break;
  case 3:PORTA=seg[adc_val/1000];PORTC=tab[3];break;
  default:break; 
  } 
}

[page]

 
void uart_init()
{
  UCSRB=0x00;     //串口不使能
  UCSRA=0x02;    //串口倍速模式
  UCSRC=0x06;    //数据长度设置为8位
  UBRRL=0x67;    //串口设置为9600波特率
  UBRRH=0x00;
  UCSRB=0x98;    //串口接受和发送使能,接受中断使能
}

 
void uart_send(uchar k)  //串口发送函数
{
  while(!(UCSRA&(1<
        UDR=k;
  
}

 
uchar uart_receive()
{
 while(!(UCSRA&(1<
 return UDR;
  
}

 
void send_number(uint k)
{
uart_send((uchar)(k>>8));
uart_send((uchar)(k));
}

 
#pragma vector = 0x2c
__interrupt void uart_rxc()
{
 datt=UDR;
 if(datt=='a')PORTB=0xff;
 else PORTB=0x00; 
 
}
     

 

 
void main()
{
 
 port_init();
 uart_init(); 
 time0_init();
 adc_init();
 SREG=0x80;
 while(1)
 {
  adc_val=adc_vert();
  delay(50000);
  delay(50000);
  delay(50000);
  send_number(adc_val);  
 }  
}

 
//----------------------VB代码----------------------------
Private Sub Command1_Click()
MSComm1.CommPort = 4
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeBinary

 
MSComm1.InputLen = 0

 
Private Sub MSComm1_OnComm()
Dim bytereceive() As Byte  '定义字节数组
Dim strbuf As String     '定义字符串变量
Select Case MSComm1.CommEvent
Case comEvReceive   '接受事件发生
Text2 = MSComm1.InBufferCount   '显示接受缓冲区字节数
strbuf = MSComm1.Input   '从输入缓冲区读取字符
bytereceive() = strbuf   '字符串赋值给字符数组,低字节在前,高字节在后
Dim i As Integer
For i = 0 To UBound(bytereceive)  'UBound返回数组可用的最大长度
If Len(Hex(bytereceive(i))) = 1 Then
strdata = strdata & "0" & Hex(bytereceive(i))
Else
strdata = strdata & Hex(bytereceive(i))
End If
Next
Text1.Text = strdata   '十六进制显示

 
Text3.Text = Val("&H" & strdata)  '十进制显示
strdata = ""

 
End Select

 
End Sub

关键字:AVR  VB通信  模拟量输入 引用地址:AVR与VB通信模拟量输入简单程序

上一篇:1602自定义字符显示摄氏度符号
下一篇:AVR 单片机学习笔记–LCD1602模块

推荐阅读最新更新时间:2024-03-16 14:04

AVR 单片机与GCC 编程使用方法
WINAVR 是一个ATMEL AVR 系列单片机的开发工具集,它包含GNU C 和C++编译器GCC。 1.1 一个简单的例子 为了先有一个感性的认识,我们首先看一下如下一段程序和它的编译、链接过程。 文件demo1.c : #include int main( void ) { unsigned char i, j, k,led=0; DDRB=0xff; while (1) { if(led) PORTB|=0X01; else PORTB&=0XFE; led=!led; //延时 for (i=0; i 255; i++) for(j=0; j 255;j++) k++; } }
[单片机]
AVR 外部中断程序
系统功能 使用AVR外部中断INT1检测按键,并使用LED作出简单指示! 硬件设计 AVR主控电路原理图 LED控制电路原理图 软件设计 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! //目标系统: 基于AVR单片机 //应用软件: ICC AVR /*10101010101010101010101010101010101010101010101010101010101010101010 ---------------------------------------------------------------------- 实验内容: 使用AVR的外部中断INT1检
[单片机]
<font color='red'>AVR</font> 外部中断程序
AVR单片机的RTOS-AVRX应用
摘 要:详细介绍AVR系列单片机的专用实时嵌入式操作系统AVRX的特点,并以ATmega16单片机为平台,结合AVR单片机应用实例分析AVRX的内核代码及移植方法,并对系统的相关性能进行测试。采用AVRX可以大大简化程序设计,满足实时要求,降低编程难度,提高系统可靠性。本文为在AVR单片机上进行嵌入式系统开发提供了参考。 关键词: RTOS AVRX AVR单片机移植 系统测试 引 言 随着技术的发展,嵌入式系统的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式。在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入
[单片机]
AVR开发 Arduino方法(六) 内存子系统
  Arduino UNO R3主处理器ATMega328P的芯片内部拥有3种存储器:数据存储器,程序存储器和电可擦写可编程存储器;它们各自有不同的用途。 1. 数据存储器   数据存储器是一块2KB大小的静态随机存储器(SRAM)。其中一部分空间分配给了通用寄存器和I/O寄存器,其余部分一般用于存储全局变量,堆栈数据和支持动态内存分配。它的存取速度快,但掉电后数据会丢失。 2. 程序存储器   程序存储器是一块32KB大小的闪存(Flash),其中0.5KB用于引导程序。它可以多次擦写,掉电后数据不会丢失,一般用于存储程序。 3. 电可擦可编程只读存储器   电可擦写可编程只读存储器(EEPROM)是一块1KB大小的
[单片机]
AVR PS/2 软件查询控制程序
/********************************************************************* 目 的: 建立PS/2的SimpleSoft测试程序(软件查询读取PS/2接收到的数据) 目标系统: 基于AVR单片机 应用软件: ICCAVR 版 本: Version 1.0 *******************************************************************
[单片机]
AVR单片机键盘程序设计
#i nclude《90s8515.h》 #define uchar unsigned char #asm equ __LCD_port=0x18 ;PORTB #endasm #i nclude #i nclude /************按键功能说明:0--9为数字键 ********/ #define cEnter 16 //确认键 #define cFuntion 15       //功能菜单键 #define cDown 14        //上,下选择键 #define cUp 13 #define cRn_Stop 12 //运行/停止切切实实换键 #define cDel 11 //删除 uchar lcd_
[单片机]
<font color='red'>AVR</font>单片机键盘程序设计
AVR单片机定时器1 CTC模式A实验程序
/*AVR定时器1CTC模式A实验*/ #include iom16v.h #define uchar unsigned char #define uint unsigned int #define set_bit(a,b) a|=(1 b) #define clr_bit(a,b) a&=(1 b) #define get_bit(a,b) a&(1 b) uint i; #pragma interrupt_handler time1ctc_a_isr:7 void time1ctc_a_isr()//定时计数器1CTC中断A通道 { PORTC^=0x20;//输出方波T=8*2=16毫秒 } #pragma inter
[单片机]
基于AVR微处理器XMEGAl28单片机的电解质分析仪
  这里提出一款采用ATMEL公司推出的高性能XMEGAl28单片机为核心器件设计的由电池供电的便携式电解质分析仪,可以满足野外使用需求。   1 XMEGA简介   XMEGA是8位AVR微处理器的强劲性能升级版本。XMEGA采用第二代picoPower技术,是唯一真正使用1.6 V工作电压的闪存微控制器。该器件功耗超低,并具有快速12位模拟功能、1个DMA控制器、1个创新的事件系统,以及1个AES加密引擎,全部都无需占用CPU资源,能够最大限度减少功耗和提高系统性能。XMEGAl28微控制器的闪存容量为128 Kb,采用100引脚的贴片封装,工作电压为1.6~3.6 V,32 MHz频率下处理性能可达到32 MI/s。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved