欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機串口發射 接收顯示二極管,四個按鍵控制四種顯示狀態
[打印本頁]
作者:
電子發燒人
時間:
2020-6-15 22:33
標題:
單片機串口發射 接收顯示二極管,四個按鍵控制四種顯示狀態
按鍵1按下從上到下點亮
按鍵2按下從兩頭往中間點亮
按鍵3按下從中間往兩邊點亮
按鍵4按下從下面往上點亮
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(15.15 KB, 下載次數: 73)
下載附件
2020-6-16 15:26 上傳
單片機源程序如下:
#include<reg51.h>
#define ILEN 8 //接收緩沖區大小
unsigned char display_data[ILEN][8]; //顯示方式數據緩沖存儲區
unsigned char istart=0; //接收緩沖區起始索引
unsigned char iend=0; //接收緩沖區結束索引
unsigned int dat_size[ILEN]=0; //顯示方式數據長度存儲區
/******************************************************
函數功能:延時N微秒
******************************************************/
void delay_nus(unsigned int i)
{
i=i/10;
while(--i);
}
/******************************************************
函數功能:延時N毫秒
******************************************************/
void delay_nms(unsigned int n)
{
n=n+1;
while(--n)
delay_nus(900);
}
void main()
{
unsigned char j;
TMOD=0x20; //定時器T1工作方式2
SCON=0x50; //串口工作方式1
PCON=0x00; //SMOD=0,波特率不倍增
TH1=0xfd;
TL1=0xfd; //根據規定給定時器T1賦初值,即波特率為9600b/s
TR1=1; //啟動定時器T1
ES=1; //串口中斷允許
EA=1; //開啟總中斷
while(1)
{
while(iend == istart) //等待數據緩沖區出現新數據
;
for(j=0;j < dat_size[istart & (ILEN-1)];j++) //根據顯示數據長度取出數據
{
P1=display_data[istart & (ILEN-1)][j]; //送顯示數據
delay_nms(500);
}
istart++; //為下次從緩沖區取出一組顯示數據做好準備
}
}
/******************************************************
函數功能:串口中斷接收服務函數
******************************************************/
void com_isr() interrupt 4 using 1
{
unsigned char c;
static unsigned char i=0;
if(RI==1) //是否接收完成
{
c=SBUF; //從緩沖寄存器中取出數據
RI=0; //軟件清零
if(istart+ILEN !=iend ) //判斷緩沖區是否以存滿
{
if(c!=0xff) //判斷接收的數據是否是結束標志數據
{
display_data[iend & (ILEN-1)][i++]=c; //緩沖區接收數據
}
else //一組顯示數據接收完成
{
dat_size[iend & (ILEN-1)]=i; //同時存儲該組數據的長度
iend++; //為接收下組數據做好準備
i=0;
}
}
}
}
復制代碼
所有資料51hei提供下載:
串口發射 接收四種方式點亮8個二極管.rar
(78.96 KB, 下載次數: 15)
2020-6-15 22:32 上傳
點擊文件名下載附件
串口點亮LED二極管
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1