c源碼:注釋很詳細,我就不解釋了,如果延時不合適,可以修改參數
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (17.7 KB, 下載次數: 24)
下載附件
2018-9-28 01:01 上傳
0.png (39.61 KB, 下載次數: 22)
下載附件
2018-9-28 01:01 上傳
單片機源碼:
- #include<reg51.h> //包含51單片機寄存器定義的頭文件
- #include<intrins.h> //包含函數_nop_()定義的頭文件
- unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水燈控制碼,該數組被定義為全局變量
- sbit P17=P1^7;
- /**************************************************************
- 函數功能:延時約150ms
- **************************************************************/
- void delay(void)
- {
- unsigned char m,n;
- for(m=0;m<200;m++)
- for(n=0;n<250;n++)
- ;
- }
- /**************************************************************
- 函數功能:發送一個字節的數據
- **************************************************************/
- void Send(unsigned char dat)
- {
- P17=0; //P1.7引腳輸出清0信號,對74LS164清0
- _nop_(); //延時一個機器周期
- _nop_(); //延時一個機器周期,保證清0完成
- P17=1; //結束對74LS164的清0
- SBUF=dat; //將數據寫入發送緩沖器,啟動發送
- while(TI==0) //若沒有發送完畢,等待
- ;
- TI=0; //發送完畢,TI被置“1”,需將其清0
- }
- /*******************************************
- 函數功能:主函數
- ******************************************/
- void main(void)
- {
- unsigned char i;
- SCON=0x00; //SCON=0000 0000B,使串行口工作于方式0
- while(1)
- {
- for(i=0;i<8;i++)
- {
- Send(Tab[i]); //發送數據
- delay(); //延時
- }
- }
- }
復制代碼
附件有仿真文件和c源碼,需要的可以下載
321-方式0控制流水燈循環點亮.zip
(28.74 KB, 下載次數: 13)
2018-9-27 23:56 上傳
點擊文件名下載附件
內含有仿真文件,c代碼 下載積分: 黑幣 -5
|