1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
STC單片機板串口通信工程 簡單上下位機通信_C版
[打印本頁]
作者:
林仆仆
時間:
2018-9-5 13:18
標題:
STC單片機板串口通信工程 簡單上下位機通信_C版
簡單上下位機通信_C版
單片機源程序如下:
/**********************
文件名稱:uart.c
作者:甘祥
說明:串口通信例程測試
修改記錄:
***********************/
/**********************
基于STC15F2K60S2系列單片機C語言編程實現
使用如下頭文件
***********************/
#include "STC15F2K60S2.h"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Machine_Focs 11059200L //晶振頻率
#define BAUD1 9600 //波特率
#define NMAX_KEY 100 //按鍵抖動次數
sbit Key1 = P3^2 ; //啟動發送
sbit Key2 = P3^3 ; //數字減少
sbit Key3 = P1^7 ; //數字增加
sbit LED_SEL=P2^3;
uchar G_count;
uchar display; //顯示發送數據
uint Key1_count; //按鍵1計數
uint Key2_count; //按鍵2計數
uint Key3_count; //按鍵3計數
uint Key_count; //按鍵總的抖動次數
bit flg_1ms; //1ms的標志
bit Key1_C;/*key1當前的狀態*/
bit Key1_P;/*key1前一個狀態*/
bit Key2_C;/*key2當前的狀態*/
bit Key2_P;/*key2前一個狀態*/
bit Key3_C;/*key3當前的狀態*/
bit Key3_P;/*key3前一個狀態*/
/*收發顯示數據相關*/
bit Uart1_Sendbusy = 0 ;
unsigned char display,flag;
uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //顯示0-f
/**********************
函數名稱:Timer0
功能描述:定時器0的中斷響應函數 ,定時100us
***********************/
void Timer0() interrupt 1
{
TH0=(65535-1000)/256; //定時器初始值
TL0=(65535-1000)%256;
G_count++;
if(G_count==10) //中斷10次對應1ms
{
G_count=0;
flg_1ms=1;
}
flag++;
if(flag==2)
flag=0;
P0=0;
switch(flag)
{
case 0: P2=0x00;P0=duanxuan[display/16];break;
case 1: P2=0x01;P0=duanxuan[display%16];break;
}
}
/****************************************************************************
*Uart1_Init()
*初始化串口1的相關設置,設定串口的波特率等
***************************************************************/
void Uart1_Init(void)
{
AUXR=0X80; //輔助寄存器 此時定時器0的速度是傳統的12倍,不分頻
SCON|=0X50; //允許接收
TL1=(65536-(Machine_Focs/4/BAUD1));
TH1=(65536-(Machine_Focs/4/BAUD1))>>8;
AUXR|=0X40; //輔助寄存器 此時定時器1的速度是傳統的12倍,不分頻
RI=0; //接收中斷標志位
TI=0; //發送中斷標志位
TR1=1; //啟動定時器1
ES=1; //串口中斷允許位
EA=1; //總中斷允許位
PS = 1 ; //串口1中斷高優先級
}
/*****************************************************************************
*SendComData(INT8U)
*發送單個字符給UART1以發送到PC機
*如果需要奇偶校驗則此處需要修改
*入口參數:dat,需要發送的八位數據
******************************************/
void SendData(unsigned char dat)
{
while(Uart1_Sendbusy);
Uart1_Sendbusy=1;
SBUF=dat;
}
/********************************************************************************************
*Uart1()
*串口1中斷服務程序
*/
void Uart1_fun() interrupt 4 using 1
{
if(RI) //接受完數據后 RI自動制1
{
RI=0;
display=SBUF;
}
if(TI) //發送完數據后 RI自動制1
{
TI=0;
Uart1_Sendbusy=0;
}
}
/**********************
函數名稱:Init
功能描述:完成各部分功能模塊的初始化
入口參數:無
出口參數:無
備注:
***********************/
void Init()
{
/************* **系統初始化 *******************/
//推挽模式
P3M0=0x00;
P3M1=0x00;
P2M0=0xff;
P2M1=0x00;
P0M0=0xff;
P0M1=0x00;
TMOD=0x01;//定時器0,方式1
ET0=1;//開啟定時器中斷
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
TR0=1;//啟動定時器
Uart1_Init(); //外部中斷:低優先級
display = 0x00;
LED_SEL=0;
flg_1ms=0;
/*初始化所有按鍵的當前狀態、前一個狀態*/
Key1_C=1;/*key1當前的狀態*/
Key1_P=1;/*key1前一個狀態*/
Key2_C=1;/*key2當前的狀態*/
Key2_P=1;/*key2前一個狀態*/
Key3_C=1;/*key3當前的狀態*/
Key3_P=1;/*key3前一個狀態*/
Key1_count=0x80+NMAX_KEY/3*2;
Key2_count=0x80+NMAX_KEY/3*2;
Key3_count=0x80+NMAX_KEY/3*2;
Key_count=NMAX_KEY;
}
/********************************************************************/
void main()
{
Init();
while(1)
{
if(flg_1ms)
{
flg_1ms=0;
if(Key1==0)
Key1_count--;
if(Key2==0)
Key2_count--;
if(Key3==0)//按鍵是按下狀態
Key3_count--;
Key_count--;//總的次數減1
if(Key_count==0)//100次完了
{
if(Key1_count<0x80)
{
Key1_C=0;
if(Key1_P==1) //下降沿(按鍵做動作)
{
Key1_P=0;
SendData(display) ;
}
}
if(Key1_count>=0x80)
{
Key1_C=1;
if(Key1_P==0)
Key1_P=1; //上升沿(假設不做動作那就繼續)
}
if(Key2_count<0x80)
{
Key2_C=0;
if(Key2_P==1) //下降沿(按鍵做動作)
{
Key2_P=0;
display--;
}
}
if(Key2_count>=0x80)
{
Key2_C=1;
if(Key2_P==0)
Key2_P=1; //上升沿(假設不做動作那就繼續)
}
if(Key3_count<0x80)
{
Key3_C=0;
if(Key3_P==1) //下降沿(按鍵做動作)
{
Key3_P=0;
display++;
}
}
if(Key3_count>=0x80)
{
Key3_C=1;
if(Key3_P==0)
Key3_P=1; //上升沿(假設不做動作那就繼續)
}
/*新一輪的判斷*/
Key1_count=0x80+NMAX_KEY/3*2;
Key2_count=0x80+NMAX_KEY/3*2;
Key3_count=0x80+NMAX_KEY/3*2;
Key_count=NMAX_KEY;
}
}
}
}
復制代碼
所有資料51hei提供下載:
簡單上下位機通信_C版.zip
(67.55 KB, 下載次數: 7)
2018-9-5 13:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1