定时器控制4只LED滚动闪烁

发布时间 : 星期六 文章定时器控制4只LED滚动闪烁更新完毕开始阅读

//----------------------------------------------------------------- //名称:定时器控制4只LED滚动闪烁 //网站:www.taobai.cc

//说明:4只LED在定时器中断例程下控制不断滚动闪烁 //-----------------------------------------------------------------

//================================================================= //声明

//================================================================= //“头文件”或称为包含文件(*.h),这是一种预先定义好的基本数据。 #include //定义8051寄存器的头文件

//宏定义

#define uchar unsigned char //定义无符号字符型(0——255) #define uint unsigned int //定义无符号整型(0——65535) //字符与整型分为有符号(signed)与无符号(unsigned)两类

//通常sbit数据类型是用于存取内部可位寻址的数据存储器 sbit B1=P2^0; //声明B1为P1.0端口 sbit G1=P2^1; sbit R1=P2^2; sbit Y1=P2^3;

//若要使用权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 // 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语句 default:i=0; } if(++j<150) //每次LED持续闪烁一段时间 return; //从函数返回语句 j=0; P2=0xff; //关闭显示 i++; //切换到下一LED

//符号:++ ,功能: 加1 ,范例:i++ ,说明:执行运算后再将X变量的值加1 //符号:-- ,功能: 减1 ,范例:i-- ,说明:执行运算后再将X变量的值减1 }

//在选择C51中循环语句中,要注意以下几个问题; //1.定义C51循环变量时,尽量采用无符号字符型变量 //2.在for循环语句中,尽量采用变量减减来做循环

//3.在do...while、while语句中,循环内变量也采用减减方法

U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RSTD1D2D3D4293031PSENALEEALED-BIBYLED-BIBYLED-BIBYLED-BIBYR1R2R3220RR4220R220R220R12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51

联系合同范文客服:xxxxx#qq.com(#替换为@)