资源简介
//DMAVR-L型开发板RS485通信实验,程序具有收发一体的功能 //RS485之间通过双绞线连接,如果距离近,可以不使用120欧电阻匹配 //将2个DMAVR-L板子通过导线(双绞线、杜邦线等)连接,连接方式为A-A,B-B //将该程序分别下载到2个板子中,按任意一个板子的4个按键,都会将键值显示到另外一个板子的LED灯上 //显示LED为二进制形式,比如1,显示的是D1灭,其他的都亮 //发送端按下按键时,8个LED灯会同时灭掉 //也可以将485接口与485转232模块连接通信,通信操作方式一样,按4个按键发送不同的键值 //电脑端发送的话一定要16进制,单字节发送 //硬件相关的配置文件在Config.h里,自己建立项目时,需要复制到项目文件夹下 //编译环境 AVR Studio 4.17/AVR GCC 优化度-00 //系统时钟16MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms
//***********************************************************************
// 包含文件//***********************************************************************
#include <string.h>
#include <stdio.h>
#define F_CPU 16000000 // 单片机主频为16MHz,用于延时子程序,熔丝位必须设置到外部高频晶振才行
#include <util/delay.h>
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/interrupt.h> //中断信号头文件
#include <avr/pgmspace.h> //须增加的头文件,用来将数据存放在flash中
#include "Config.h" //配置头文件,与硬件相关的配置在这里更改
uchar key=0xFF;
uint tx_count=200,tx_flag=0xff;
static uchar A1,A2,A3;
uchar usart_rx_data=0xff;
volatile uchar key_check;
volatile uchar key_checkin;
uchar aa;
//***********************************************************************
// MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
LEDDDR = 0xFF; //设置IO口方向为输出
LED = 0xFF; //PE口初始设置为FF
KEYDDR = 0x00; //设置为输入,并且要打开上拉电阻
KEYDDR = 0x00 | (1<<RS485_CTR_RDE);
KEYPort |= ((1 << PD1) |(1 << PD5)|(1 << PD6)|(1 << PD7)); //四位独立按键连接在PD1/PD5/PD6/PD7上
}
//**********************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************
uchar keyboardscan(void)
{
key_checkin=KEYRead; //读取IO口状态,判断是否有键按下
key_checkin=KEYRead; //读取IO口状态,判断是否有键按下
key_checkin&= 0xE2; //读取IO口状态,判断是否有键按下
if(key_checkin!=0xE2) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
key_checkin=KEYRead;
key_checkin&= 0xE2;
if(key_checkin!=0xE2) //再次读取状态,判断是否有按键按下
{
key_check=KEYRead;
switch (key_check & 0xE2)
{
case 0xE0:key=1;break; //S1按下
case 0xC2:key=2;break; //S2按下
case 0xA2:key=3;break; //S3按下
case 0x62:key=4;break; //S4按下
}
}
}
else
{
return(key);
}
}
//*************************************************************************
// MSP430串口1初始化
//*************************************************************************
void UART1_Init()
{
// DDRD |= (1<<PD3);
//DDRD &= ~(1<<PD2);
UCSR1A=0x00; //单倍速模式
UCSR1B=0x98; //接收中断允许,发送结束和寄存器空中断关闭,采用查询发送模式
UCSR1C=(1<<UCSZ11)|(1<<UCSZ10); //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
UBRR1H=baud_h; //写波特率的值
UBRR1L=baud_l;
}
//*************************************************************************
// 串口1发送数据函数
//*************************************************************************
void Send_Byte(uchar usart_tx_data)
{
RS485_CTR1;
while(!(UCSR1A&(1<<UDRE1))); //等待发送寄存器空
UDR1=usart_tx_data; //写入发送数据
while(!(UCSR1A&(1<<TXC1))); //等待发送完毕
UCSR1A|=(1<<TXC1);
delay_ms(5); //切换之前先有个小延时
RS485_CTR0;
}
代码片段和文件信息
//********************************************************************
//DMAVR-L型开发板RS485通信实验,程序具有收发一体的功能
//RS485之间通过双绞线连接,如果距离近,可以不使用120欧电阻匹配
//将2个DMAVR-L板子通过导线(双绞线、杜邦线等)连接,连接方式为A-AB-B
//将该程序分别下载到2个板子中,按任意一个板子的4个按键,都会将键值显示到另外一个板子的LED灯上
//显示LED为二进制形式,比如1,显示的是D1灭,其他的都亮
//发送端按下按键时,8个LED灯会同时灭掉
//也可以将485接口与485转232模块连接通信,通信操作方式一样,按4个按键发送不同的键值
//电脑端发送的话一定要16进制,单字节发送
//硬件相关的配置文件在Config.h里,自己建立项目时,需要复制到项目文件夹下
//编译环境 AVR Studio 4.17/AVR GCC 优化度-00
//系统时钟16MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms
//作者:www.avrgcc.com
//日期:2014.07.8
//***********************************************************************
// 包含文件
//***********************************************************************
#include
#include
#define F_CPU 16000000 // 单片机主频为16MHz用于延时子程序,熔丝位必须设置到外部高频晶振才行
#include
#include
#include
#include //中断信号头文件
#include //须增加的头文件,用来将数据存放在flash中
#include “Config.h“ //配置头文件,与硬件相关的配置在这里更改
uchar key=0xFF;
uint tx_count=200tx_flag=0xff;
static uchar A1A2A3;
uchar usart_rx_data=0xff;
volatile uchar key_check;
volatile uchar key_checkin;
uchar aa;
//***********************************************************************
// MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
LEDDDR = 0xFF; //设置IO口方向为输出
LED = 0xFF; //PE口初始设置为FF
KEYDDR = 0x00; //设置为输入,并且要打开上拉电阻
KEYDDR = 0x00 | (1<
KEYPort |= ((1 << PD1) |(1 << PD5)|(1 << PD6)|(1 << PD7)); //四位独立按键连接在PD1/PD5/PD6/PD7上
}
//**********************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************
uchar keyboardscan(void)
{
key_checkin=KEYRead; //读取IO口状态,判断是否有键按下
key_checkin=KEYRead; //读取IO口状态,判断是否有键按下
key_checkin&= 0xE2; //读取IO口状态,判断是否有键按下
if(key_checkin!=0xE2) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
key_checkin=KEYRead;
key_checkin&= 0xE2;
if(key_checkin!=0xE2) //再次读取状态,判断是否有按键按下
{
key_check=KEYRead;
switch (key_check & 0xE2)
{
case 0xE0:key=1;break; //S1按下
case 0xC2:key=2;break; //S2按下
case 0xA2:key=3;break; //S3按下
case 0x62:key=4;break; //S4按下
}
}
}
else
- 上一篇:超声波水表源代码
- 下一篇:51单片机数码管四层电梯模拟系统
相关资源
- vc_串口通讯
- c++编写的串口通讯程序
- 多线程串口通讯
- AppGameKit安装包
- 使用C++超级玛丽制作-100%源码公开-不
- C++ 游戏疯狂的赛车
- 学习 FPGA 书籍分享
- C++编写ATM机模拟程序
- 利用C语言实现的ATM机
- C++商品管理系统50页报告+源码。代码
- C++课程设计五子棋基于Qt4
- C++ MFC ATM系统
- C++写的模拟ATM机程序
- c++ATM取款
- VC++ 与PLC串口通讯
- 基于C++的虚拟串口通讯
- ATM完全功能很全,C++写的
- 使用API函数实现的串口通讯DLL含源码
- 遗传算法代码NSGA-II
- 初步实现ATM机MFC
- 简单的基于MFC的ATM系统含源代码
- c++与Qt串口通讯
- Getting Started with C++ Audio Programming for
- ATM源代码用c++文件读写.zip
- C语言编写双人剪刀石头布联机游戏代
- HLS:C语言转换FPGA教程ug871
- VS2010之MFC串口通信的编写教程
- 基于xilinx FPGA设计的DDS多种波形信号发
- Mastering C++ Game Development.pdf
- C语言链表应用的完整版ATM提款机
评论
共有 条评论