利用定时/计数器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--);
- }
复制代码
|