|
按鍵1按下從上到下點(diǎn)亮
按鍵2按下從兩頭往中間點(diǎn)亮
按鍵3按下從中間往兩邊點(diǎn)亮
按鍵4按下從下面往上點(diǎn)亮
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (15.15 KB, 下載次數(shù): 73)
下載附件
2020-6-16 15:26 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #define ILEN 8 //接收緩沖區(qū)大小
- unsigned char display_data[ILEN][8]; //顯示方式數(shù)據(jù)緩沖存儲(chǔ)區(qū)
- unsigned char istart=0; //接收緩沖區(qū)起始索引
- unsigned char iend=0; //接收緩沖區(qū)結(jié)束索引
- unsigned int dat_size[ILEN]=0; //顯示方式數(shù)據(jù)長(zhǎng)度存儲(chǔ)區(qū)
- /******************************************************
- 函數(shù)功能:延時(shí)N微秒
- ******************************************************/
- void delay_nus(unsigned int i)
- {
- i=i/10;
- while(--i);
- }
- /******************************************************
- 函數(shù)功能:延時(shí)N毫秒
- ******************************************************/
- void delay_nms(unsigned int n)
- {
- n=n+1;
- while(--n)
- delay_nus(900);
- }
- void main()
- {
- unsigned char j;
- TMOD=0x20; //定時(shí)器T1工作方式2
- SCON=0x50; //串口工作方式1
- PCON=0x00; //SMOD=0,波特率不倍增
- TH1=0xfd;
- TL1=0xfd; //根據(jù)規(guī)定給定時(shí)器T1賦初值,即波特率為9600b/s
- TR1=1; //啟動(dòng)定時(shí)器T1
- ES=1; //串口中斷允許
- EA=1; //開(kāi)啟總中斷
- while(1)
- {
- while(iend == istart) //等待數(shù)據(jù)緩沖區(qū)出現(xiàn)新數(shù)據(jù)
- ;
- for(j=0;j < dat_size[istart & (ILEN-1)];j++) //根據(jù)顯示數(shù)據(jù)長(zhǎng)度取出數(shù)據(jù)
- {
- P1=display_data[istart & (ILEN-1)][j]; //送顯示數(shù)據(jù)
- delay_nms(500);
- }
- istart++; //為下次從緩沖區(qū)取出一組顯示數(shù)據(jù)做好準(zhǔn)備
- }
- }
- /******************************************************
- 函數(shù)功能:串口中斷接收服務(wù)函數(shù)
- ******************************************************/
- void com_isr() interrupt 4 using 1
- {
- unsigned char c;
- static unsigned char i=0;
- if(RI==1) //是否接收完成
- {
- c=SBUF; //從緩沖寄存器中取出數(shù)據(jù)
- RI=0; //軟件清零
- if(istart+ILEN !=iend ) //判斷緩沖區(qū)是否以存滿
- {
- if(c!=0xff) //判斷接收的數(shù)據(jù)是否是結(jié)束標(biāo)志數(shù)據(jù)
- {
- display_data[iend & (ILEN-1)][i++]=c; //緩沖區(qū)接收數(shù)據(jù)
- }
- else //一組顯示數(shù)據(jù)接收完成
- {
- dat_size[iend & (ILEN-1)]=i; //同時(shí)存儲(chǔ)該組數(shù)據(jù)的長(zhǎng)度
- iend++; //為接收下組數(shù)據(jù)做好準(zhǔn)備
- i=0;
- }
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
串口發(fā)射 接收四種方式點(diǎn)亮8個(gè)二極管.rar
(78.96 KB, 下載次數(shù): 15)
2020-6-15 22:32 上傳
點(diǎn)擊文件名下載附件
串口點(diǎn)亮LED二極管 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|