/*********************************************************************************************
程序名: 占用CPU延时程序应用实例
编写人: -
编写时间:2009年9月23日
硬件支持:STC12C2052AD 12MHz
接口说明:P1接口8个LED灯
修改日志:
NO.1-
/*********************************************************************************************
说明:本程序可使单片机P1.0接口上的LED灯以1秒为周期闪烁。
/*********************************************************************************************/
#include <REG51.h>//通用89C51头文件
sbit LED = P1 ^ 0//定义闪烁LED
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?)
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i
while( a-- != 0){
for(i = 0i <600i++)
}
}
/*********************************************************************************************/
/*********************************************************************************************/
void main (void){ //主程序
while(1){
LED = ~LED //取LED相反状态
DELAY_MS(1000) //修改这里的数值看看会有什么变化
}
}
/*********************************************************************************************/
sbit HC595_SCK = P0^5 // HC595 的串行输入时钟引脚sbit HC595_RCK = P0^6 // HC595 的锁存输出时钟引脚
sbit HC595_A = P0^7 // HC595 的串行数据输入引脚
void main()
{
unsigned char i
unsigned int t,h
for(i = 0i < 16i ++) // 先输出一个16位数据,仅存入595并不显示出来
// 估计外面串接了两个595,做显示用
{
HC595_SCK = 0 // 串行输入时钟为0
if(i == 9) // 要发送的数据的0-16位中第9位为1,其他为0
HC595_A = 1 // 0000 0010 0000 0000
else
HC595_A = 0
HC595_SCK = 1 // 串行输入时钟为1,生成需要的时钟上升沿
}
while(1) // 主循环(死循环)
{
for(i = 16i > 0i ++) // 仍然继续发送相同的16位二进制数
// 通过这个循环,使输出的亮(或灭,根据共阴或共阳而不同)的一位,在两个数码管上循环移动
{
HC595_RCK = 0 // 输出锁存时钟为0
HC595_SCK = 0 // 串行输入时钟为0
if(i == 9) // 同上面的数据
HC595_A = 1
else
HC595_A = 0
HC595_SCK = 1 // 串行输入时钟为1,产生上升沿
HC595_RCK = 1 // 输出锁存时钟为1,产生上升沿
for(t = 110t > 0t --) // 软件延时
for(h = 1000h > 0 h --)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)