百度知道 - 信息提示
51单片机c语言编写流水灯程序?
51单片机的定时器估计是所有MCU里面最简单的定时器了,所涉及到的寄存器不多,就那么几个,如TMOD(模式寄存器),TCON(控制寄存器),具体内容你可以去查看51的DATA SHEET。
在使用的时候,先设置定时器模式,再设置控制寄存器,这些设置都是按照自己的需要来定。
例如你这个功能,4S的定时,你可以这么设置。
/**********************************************************
定时器初始化函数,50mS定时,为什么是50mS不是4S?因为定时器为16位定时模式,最大定时时间为65.535mS,以50mS方便计算
***********************************************************/
void Timer_Init( void )
{
TMOD = 0x01;//定时器0 ,工作方式1,十六位定时模式
TH0 = ( 65536 - 50000 ) / 256; //高八位数据
TL0 = ( 65536 - 50000 ) % 256;//低八位数据 定时时间大概为50mS,具体视晶振频率而定
EA = 1;//因为你要用到中断,所以打开总中断
ET0 = 1;//运行定时器0的中断
TR0 = 1;//定时器0开始计数,当你需要让它停止计数的时候让它等于0就可以了
}
void main()
{
Timer_Init();//调用定时器初始化函数
while(1)
{
//你的程序
}
}
//再写个中断服务函数
void Timer0( void ) interrupt 1
{
static unsigned char count = 0;//该变量用来计50mS的个数,当count = 8时,为4S
TH0 = ( 65536 - 50000 ) / 256; //再给定时器赋初值,否则将改变为复位值
TL0 = ( 65536 - 50000 ) % 256;//
count++;
if( count == 8 )
{
count = 0;
//4S到了,该干嘛干嘛去
}
}
很简的51单片机C语言流水灯程序
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:
#include //51单片机头文件#include //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义sbit beep=P2^3;void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{ //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }void main() //主函数{ uchar a,i,j; while(1) //大循环 { a=0xfe; //赋初值 for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次 { P1=a; //点亮小灯 beep=0; //开启蜂鸣器 delay(50); //延时50毫秒 beep=1; //关闭蜂鸣器 delay(50); //再延时50毫秒 a=_crol_(a,1); //将a变量循环左移一位 } a=0x7f; for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次 { P1=a; //点亮小灯 beep=0; //开启蜂鸣器 delay(50); //延时50毫秒 beep=1; //关闭蜂鸣器 delay(50); //再延时50毫秒 a=_cror_(a,1); //将a变量循环右移一位 } }}2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。