|
- /*********** 2015.7 JQ--V0.1 宏晶公司STC單片機開發板 ************
- $ 程序作用:手動可調變速的流水燈的效果
- $ 程序作者: Jh
- $ 程序版本: JQ--V0.1
- $ 編制日期: 2011-07-01
- $ 編譯器:Keil C uVision2
- $ 所用芯片:STC89C52,11.0592M晶振
- $ 程序開發板:JQ--V0.1版本
- $ 程序通俗易懂 注釋詳細 結構化模塊是51單片機初學愛好者的理想選擇
- ******************** JQ--V0.1 宏晶公司STC單片機開發板 **********************/
- #include<reg52.h> //52單片機頭文件定義
- #define uchar unsigned char //數據類型uchar的宏定義
- #define uint unsigned int //數據類型uint的宏定義
- #define led P0 //P0口宏定義
- void init();
- uchar count,speed,num; //全局變量定義
- sbit key =P3^2;
- void delay(uint k);
- uchar code huayang[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x55,0x55,0x00}; //花樣跑馬燈數組定義 隨便改變數組里面的值就可以改變花樣(該數組有27個數值)
- void main(void) //主函數
- {
- uchar i;
- init();
- while(1) //while死循環
- {
- for(i=0;i<8;i++) //0-26共27次循環依次取出數組中的數(i小于多少由數組中的數決定)
- {
- led=huayang[i]; //把取出的數以總線的方式賦給led即P0口
- }
- }
- }
-
- void init() //初始化
- {
- speed=0;
- TMOD=0x01; //定時器T0的應用 后面會詳細講
- TH0=(65536-speed)/256;
- TL0=(65536-speed)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void timer0() interrupt 1 //定時器T0中斷 后面會詳細講
- {
- TH0=(65536-speed)/256;
- TL0=(65536-speed)%256;
- count++;
- if(count==5000)
- {
- count=0;
- if(key==0) //按鍵消抖
- { delay(5);
- if(key==0)
- num++;
- while(!key); //松手檢測 只要當key==1時才會退出這個while循環!
- if(num==1)
- {
- speed=50; //速度調節(也就是改變定時器的初值!)
- }
- if(num==2)
- {
- speed=100;
- }
- if(num==3)
- {
- speed=150;
- }
-
- if(num==4)
- {
- speed=200;
- }
- }
- }
- if(num==5) num=0;
-
- }
-
- void delay(uint k) //延時子函數
- {
- while(--k);
- }
- //這過程序用到了定時器 后面會跟大家詳細講解的! 謝謝大家!!!
- //對于調速函數可以進行修改,使其變得更加的簡潔,speed=num*50;if(num==6) num=0;//防止程序出錯,所以進行了限制!
復制代碼
|
|