//----------------------------------------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<
关键字:AVR VB通信 模拟量输入
引用地址:AVR与VB通信模拟量输入简单程序
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
上一篇: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检
[单片机]
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_
[单片机]
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。
[单片机]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
11月13日历史上的今天
厂商技术中心
随便看看