开始 初始化 设置计数器 否 i=0;i++_ LED灯开始循环闪烁 计数器开始计数 否 计数完成 程序中断,i自加1,下一个LED灯开始闪烁
图4.2程序图
4.2.2程序清单:
主程序:
#include
//若要使用权sbit数据类型,则其声明方式有下列几种:
//1.先声明一个bdata存储器形式的变量,再声明属于该变量的sbit变量,例如: // char bdata scan; 声明scan为bdata存储器类型的字符 // sbit input_0=scan^0; 声明input_0为scan变量的bit 0 //2.先声明一个sfr变量,再声明属于该变量的sbit变量,例如: // sfr P0=0x80; 声明P0为0X80存储器位置,即P0
12
// sbit P0_0=P0^0; 声明P0_0为P0变量的bit0 //3.直接指定存储器位置,例如要声明P0的bit0,则 // sbit P0_0=0X80^0; 声明P0_0为0x80地址的bit0
uint i,j,k;
//------------------------------------------------------------------- //主程序
//------------------------------------------------------------------- void main() //主程序开始 {
i=j=k=0;
P2=0xff; //开始时全部关闭 TMOD=0X02; //定时/计数器工作方式寄存器 低4位
//T0定时器0工作于模式2 位数:8位计数范围:0-255 具有自动加载功能 TH0=256-200; //200us定时 TL0=256-200; IE=0X82; //中断使能寄存器IE,相当于EA=1;ET0=1; TR0=1; //定时器/计数器控制寄存器TCOD Timer0的启动开关 while(1); //无穷循环 }
//------------------------------------------------------------- //T0中断函数
//-------------------------------------------------------------- void LED_Flash_and_Scroll() interrupt 1
{ //每累计若干次定时器中断才执行一次闪烁 if(++k<35)return; //if条件语句 k=0;
switch(i) //多分支选择语句,switch语句开始 { case 0:B1=!B1; //蓝灯闪烁 break; //终止执行switch或循环语句 case 1:G1=!G1; //绿灯闪烁 break; case 2:R1=!R1; //红灯闪烁 break; case 3:Y1=!Y1; //黄灯闪烁 break; //退出switch语句 d