/********************************
---------------------------------
实验名称:流水灯实验
实验内容:
1.运用芯片74hc595控制
2.延时函数
3.定时器扫描使用
4.定时器中断使用
5.花式流水灯
---------------------------------
********************************/
#include<reg51.h>
#include <intrins.h>
#define NOP() _nop_()
#define uchar unsigned char
//运用芯片74hc595//
/*
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;
void HC595SendData(uchar BT0);
void delay1s(void);
void main()
{
unsigned char LED;
unsigned char i;
LED=0x01;
while(1)
{
HC595SendData(LED);
LED=LED<<1;
i++;
if(i>7)
{
i=0;
LED=0x01;
}
delay1s();
}
}
void HC595SendData(uchar BT0)
{
uchar i;
for(i=0;i<8;i++)
{
MOSIO = BT0 >> 7;
BT0 <<= 1;
S_CLK = 0;
S_CLK = 1;
}
R_CLK = 0; //set dataline low
R_CLK = 1;
R_CLK = 0; //set dataline low
}
void delay1s(void) //误差 0us
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_();
}
*/
//延时函数控制间隔//
/*
void delay1s(void);//声明延时1秒函数
void main()
{
unsigned char LED1;
LED1 = 0x01; //0xfe = 1111 1110 二极管共阴极
while (1)
{
P0 = LED1;
delay1s();
LED1 = LED1 << 1;//高电平左移一位
if (P0 == 0x00)
{
LED1 = 0x01;
}
}
}
void delay1s(void)
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_();
}
*/
//定时器扫描使用//
/*
void main()
{
unsigned char cnt = 0;
unsigned char LED2;
LED2 = 0x01;
P0 = LED2 ;
TMOD = 0x01;
TH0 = 0xB8;
TL0 = 0x00;
TR0 = 1; //初始化定时器
while (1)
{
P0 = LED2 ;
if (TF0 == 1)
{
TF0 = 0;
TH0 = 0xB8;
TL0 = 0x00;
cnt++;
if (cnt >= 50)
{
cnt = 0;
LED2 = LED2 << 1;
if (P0 == 0x00)
{
LED2 = 0x01;
}
}
}
}
}
*/
//定时器中断//
unsigned char cnt ;
unsigned char LED3;
void InitTimer0(void);//声明中断初始化函数
void main(void)
{
InitTimer0();
LED3=0x01;
while(1)
{
P0 = LED3 ;
if (cnt >= 50)
{
cnt = 0;
LED3 = LED3 << 1;
if (P0 == 0x00)
{
LED3 = 0x01;
}
}
}
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0B8;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1 //定时器中断函数
{
TH0 = 0xB8;
TL0 = 0x00;
cnt++;
}
//花式流水灯//
|