資源簡介
//DMAVR-L型開發(fā)板RS485通信實(shí)驗(yàn),程序具有收發(fā)一體的功能 //RS485之間通過雙絞線連接,如果距離近,可以不使用120歐電阻匹配 //將2個DMAVR-L板子通過導(dǎo)線(雙絞線、杜邦線等)連接,連接方式為A-A,B-B //將該程序分別下載到2個板子中,按任意一個板子的4個按鍵,都會將鍵值顯示到另外一個板子的LED燈上 //顯示LED為二進(jìn)制形式,比如1,顯示的是D1滅,其他的都亮 //發(fā)送端按下按鍵時,8個LED燈會同時滅掉 //也可以將485接口與485轉(zhuǎn)232模塊連接通信,通信操作方式一樣,按4個按鍵發(fā)送不同的鍵值 //電腦端發(fā)送的話一定要16進(jìn)制,單字節(jié)發(fā)送 //硬件相關(guān)的配置文件在Config.h里,自己建立項(xiàng)目時,需要復(fù)制到項(xiàng)目文件夾下 //編譯環(huán)境 AVR Studio 4.17/AVR GCC 優(yōu)化度-00 //系統(tǒng)時鐘16MHZ,設(shè)置熔絲位為外部高頻石英晶體振蕩,啟動時間4.1ms
//***********************************************************************
// 包含文件//***********************************************************************
#include <string.h>
#include <stdio.h>
#define F_CPU 16000000 // 單片機(jī)主頻為16MHz,用于延時子程序,熔絲位必須設(shè)置到外部高頻晶振才行
#include <util/delay.h>
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/interrupt.h> //中斷信號頭文件
#include <avr/pgmspace.h> //須增加的頭文件,用來將數(shù)據(jù)存放在flash中
#include "Config.h" //配置頭文件,與硬件相關(guān)的配置在這里更改
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; //設(shè)置IO口方向?yàn)檩敵?br />
LED = 0xFF; //PE口初始設(shè)置為FF
KEYDDR = 0x00; //設(shè)置為輸入,并且要打開上拉電阻
KEYDDR = 0x00 | (1<<RS485_CTR_RDE);
KEYPort |= ((1 << PD1) |(1 << PD5)|(1 << PD6)|(1 << PD7)); //四位獨(dú)立按鍵連接在PD1/PD5/PD6/PD7上
}
//**********************************************************************
// 鍵盤掃描子程序,采用逐鍵掃描的方式
//**********************************************************************
uchar keyboardscan(void)
{
key_checkin=KEYRead; //讀取IO口狀態(tài),判斷是否有鍵按下
key_checkin=KEYRead; //讀取IO口狀態(tài),判斷是否有鍵按下
key_checkin&= 0xE2; //讀取IO口狀態(tài),判斷是否有鍵按下
if(key_checkin!=0xE2) //IO口值發(fā)生變化則表示有鍵按下
{
delay_ms(20); //鍵盤消抖,延時20MS
key_checkin=KEYRead;
key_checkin&= 0xE2;
if(key_checkin!=0xE2) //再次讀取狀態(tài),判斷是否有按鍵按下
{
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; //接收中斷允許,發(fā)送結(jié)束和寄存器空中斷關(guān)閉,采用查詢發(fā)送模式
UCSR1C=(1<<UCSZ11)|(1<<UCSZ10); //寫UCSRC寄存器,異步通信無校驗(yàn),8位數(shù)據(jù)1位停止位
UBRR1H=baud_h; //寫波特率的值
UBRR1L=baud_l;
}
//*************************************************************************
// 串口1發(fā)送數(shù)據(jù)函數(shù)
//*************************************************************************
void Send_Byte(uchar usart_tx_data)
{
RS485_CTR1;
while(!(UCSR1A&(1<<UDRE1))); //等待發(fā)送寄存器空
UDR1=usart_tx_data; //寫入發(fā)送數(shù)據(jù)
while(!(UCSR1A&(1<<TXC1))); //等待發(fā)送完畢
UCSR1A|=(1<<TXC1);
delay_ms(5); //切換之前先有個小延時
RS485_CTR0;
}
代碼片段和文件信息
//********************************************************************
//DMAVR-L型開發(fā)板RS485通信實(shí)驗(yàn),程序具有收發(fā)一體的功能
//RS485之間通過雙絞線連接,如果距離近,可以不使用120歐電阻匹配
//將2個DMAVR-L板子通過導(dǎo)線(雙絞線、杜邦線等)連接,連接方式為A-AB-B
//將該程序分別下載到2個板子中,按任意一個板子的4個按鍵,都會將鍵值顯示到另外一個板子的LED燈上
//顯示LED為二進(jìn)制形式,比如1,顯示的是D1滅,其他的都亮
//發(fā)送端按下按鍵時,8個LED燈會同時滅掉
//也可以將485接口與485轉(zhuǎn)232模塊連接通信,通信操作方式一樣,按4個按鍵發(fā)送不同的鍵值
//電腦端發(fā)送的話一定要16進(jìn)制,單字節(jié)發(fā)送
//硬件相關(guān)的配置文件在Config.h里,自己建立項(xiàng)目時,需要復(fù)制到項(xiàng)目文件夾下
//編譯環(huán)境?AVR?Studio?4.17/AVR?GCC?優(yōu)化度-00
//系統(tǒng)時鐘16MHZ,設(shè)置熔絲位為外部高頻石英晶體振蕩,啟動時間4.1ms
//作者:www.avrgcc.com
//日期:2014.07.8
//***********************************************************************
// 包含文件
//***********************************************************************
#include?
#include?
#define ?F_CPU 16000000 //?單片機(jī)主頻為16MHz用于延時子程序,熔絲位必須設(shè)置到外部高頻晶振才行
#include?
#include?
#include?
#include???? //中斷信號頭文件
#include???? //須增加的頭文件,用來將數(shù)據(jù)存放在flash中
#include?“Config.h“????????????????? //配置頭文件,與硬件相關(guān)的配置在這里更改
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;??????????????????????//設(shè)置IO口方向?yàn)檩敵?br/>
??LED?=?0xFF;??????????????????????????//PE口初始設(shè)置為FF
??KEYDDR??=?0x00; ???//設(shè)置為輸入,并且要打開上拉電阻
??
??KEYDDR?=?0x00?|?(1<
??KEYPort?|=?((1?<
??
}
//**********************************************************************
// 鍵盤掃描子程序,采用逐鍵掃描的方式
//**********************************************************************
uchar?keyboardscan(void)?
{
??key_checkin=KEYRead;?????????? //讀取IO口狀態(tài),判斷是否有鍵按下
??key_checkin=KEYRead;?????????? //讀取IO口狀態(tài),判斷是否有鍵按下
??key_checkin&=?0xE2;?????????? //讀取IO口狀態(tài),判斷是否有鍵按下
??if(key_checkin!=0xE2)???????????? //IO口值發(fā)生變化則表示有鍵按下
?? {
???? delay_ms(20);?????????????????? //鍵盤消抖,延時20MS
???? key_checkin=KEYRead;
key_checkin&=?0xE2;
???? if(key_checkin!=0xE2) //再次讀取狀態(tài),判斷是否有按鍵按下
???? {?????
????? 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
?
評論
共有 條評論
相關(guān)資源
- vc_串口通訊
- c++編寫的串口通訊程序
- 多線程串口通訊
- AppGameKit安裝包
- 使用C++超級瑪麗制作-100%源碼公開-不
- C++ 游戲瘋狂的賽車
- 學(xué)習(xí) FPGA 書籍分享
- C++編寫ATM機(jī)模擬程序
- 利用C語言實(shí)現(xiàn)的ATM機(jī)
- C++商品管理系統(tǒng)50頁報告+源碼。代碼
- C++課程設(shè)計五子棋基于Qt4
- C++ MFC ATM系統(tǒng)
- C++寫的模擬ATM機(jī)程序
- c++ATM取款
- VC++ 與PLC串口通訊
- 基于C++的虛擬串口通訊
- ATM完全功能很全,C++寫的
- 使用API函數(shù)實(shí)現(xiàn)的串口通訊DLL含源碼
- 遺傳算法代碼NSGA-II
- 初步實(shí)現(xiàn)ATM機(jī)MFC
- 簡單的基于MFC的ATM系統(tǒng)含源代碼
- c++與Qt串口通訊
- Getting Started with C++ Audio Programming for
- ATM源代碼用c++文件讀寫.zip
- C語言編寫雙人剪刀石頭布聯(lián)機(jī)游戲代
- HLS:C語言轉(zhuǎn)換FPGA教程ug871
- VS2010之MFC串口通信的編寫教程
- 基于xilinx FPGA設(shè)計的DDS多種波形信號發(fā)
- Mastering C++ Game Development.pdf
- C語言鏈表應(yīng)用的完整版ATM提款機(jī)