|
原理圖
新工程 - Proteus 8 Professional - 原理圖繪制 2020_6_22 16_10_09.png (235.99 KB, 下載次數(shù): 54)
下載附件
2020-6-22 16:12 上傳
- include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
- #include<intrins.h>
- typedef unsigned int u16; //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
- typedef unsigned char u8;
- #define left 0
- #define right 1
- void switch_direction(u8 x);
- sbit k1=P3^2; //定義按鍵K1
- sbit k2=P3^3; //定義按鍵K2
- sbit k3=P3^5; //定義按鍵K2
- u8 xianshi[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- char i;
- u16 j,m,flag_led,s_key;
- #define LED P2
- void delay(u16 i)
- {
- while(i--);
- }
- void Int_Init() //中斷配置 外部中斷
- {
- //設(shè)置INT0
- IT0=1;//跳變沿出發(fā)方式(下降沿)
- EX0=1;//打開(kāi)INT0的中斷允許。
-
- //設(shè)置INT1
- IT1=1;//跳變沿出發(fā)方式(下降沿)
- EX1=1;//打開(kāi)INT1的中斷允許。
-
-
- EA=1;//打開(kāi)總中斷
- }
- //定時(shí)器0中斷
- void Timer0Init()
- {
- TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開(kāi)啟動(dòng)。
- TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
- TL0=0X18;
- ET0=1;//打開(kāi)定時(shí)器0中斷允許
- EA=1;//打開(kāi)總中斷
- TR0=1;//打開(kāi)定時(shí)器
- }
- void TIM1init(void)
- {
- TMOD=0x21; //設(shè)置定時(shí)器1為工作方式2
- TH1=0xff; //裝入初值
- TL1=0xff;
- EA=1; //開(kāi)總中斷
- ET1=1; //開(kāi)定時(shí)器中斷
- TR1=1; //啟動(dòng)定時(shí)器1
- }
- void main()
- {
- LED = 0XFF;
- flag_led = 0;
- s_key = right;
- Int_Init(); // 設(shè)置外部中斷1
- Timer0Init();
- TIM1init();
- while(1)
- {
- if(flag_led == 0)
- {
- LED = xianshi[i];
- }
- else
- {
- LED = 0xff;
- }
- }
- }
- void Int0() interrupt 0 //外部中斷0的中斷函數(shù)
- {
- delay(1000); //延時(shí)消抖
- if(k1==0)
- {
- s_key = left;
- }
- }
- void Timer0() interrupt 1 //定時(shí)器1中斷服務(wù)函數(shù)
- {
- static u16 j;
- TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
- TL0=0X18;
- j++;
- if(j==1000)
- {
- j=0;
- switch_direction(s_key);
- }
- }
- void Int1() interrupt 2 //外部中斷1的中斷函數(shù)
- {
- delay(1000); //延時(shí)消抖
- if(k2==0)
- {
- s_key = right;
- }
- }
- void Timer1() interrupt 3 //定時(shí)器1中斷服務(wù)函數(shù)
- {
- TH1=0xff;
- TL1=0xff;
- if(k3==0)
- {
- delay(1000);
- if(k3==0)
- {
- EX0 = ~EX0;
- EX1 = ~EX1;
- TR0 = ~TR0;
- flag_led = ~flag_led;
- }
- }
-
-
- }
- void switch_direction(u8 x)
- {
- if(x == 0)
- {
- i--;
- }
- else
- {
- i++;
- }
- if(i==8)
- {
- i = 0;
- }
- if(i == -1)
- {
- i = 7;
- }
- }
復(fù)制代碼
|
|