利用定時/計數器T1產生定時時鐘,由P2口控制8個發光二極管,使8個指示燈依次一個一個閃動,閃動頻率為10次/秒(8個燈依次亮一遍為一個周期),循環。晶振頻率為12MHz。
- 利用定時/計數器T1產生定時時鐘,由P2口控制8個發光二極管,使8個指示燈依次一個一個閃動,閃動頻率為10次/秒(8個燈依次亮一遍為一個周期),循環。晶振頻率為12MHz。
- #include<reg51.h>
- #include<intrins .h> //包含有左右循環移位子函數的庫
- #define uint unsigned int
- #define uchar unsigned char
- sbit S1=P1^0 ; //定義P1.0
- uchar tt,a;
- void main()
- { TMOD=0X10 ; //設置定時器1
- TH1=(65536-50000)/256; //定時器初值
- TL1=(65536-50000)%256;
- EA=1; //開總中斷
- EX1=1 ; //開定時器1中斷
- TR1=1; //啟動定時器1
- a= 0XFE; //LED初始狀態
- while(1);
- }
- void timer0() interrupt 1// 定時器1中斷
- { TH1=(65536-50000)/256; //定時器初值
- TL1=(65536-50000)%256;
- tt++;
- if(tt==2)
- { tt=0;
- P1=a;
- a= _crol_(P1,1); //LED移動
- }
- }
- 30. 填空完成程序:在主程序中流水燈無限循環,INT0中斷時,P1口LED全亮,INT1中斷時P1口LED全滅。
- #include <reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uch unsigned char
- /* 中斷初始化*/
- void init(void)
- { EA=0 ; //中斷總開關
- ET0=1 ; //開中斷0開關。
- ET1=1 ; //開中斷1開關
- IT1=0;
- IT0=0;
- }
- void delay(uint z);
- main()
- {uch temp;
- EA=1 ; //中斷初始化
- temp = 0XFE ; //初始狀態
- while(1)
- {
- P1=temp;
- delay(500);
- temp=_crol_(P1,1) ; //左移
- }
- }
- void int_0(void)interrupt 0 //中斷服務函數
- {
- P1=0X00 ; //led全亮
- }
- void int_1(void)interrupt 1 //中斷服務函數
- {
- P1=0xfe ; //LED全滅
- }
- void delay(unsigned int z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
復制代碼
|