给你一个E2PROM下,控制LED显示时间的程序希望对你的学习有帮助。
#include<reg52.h>。
#define uchar unsigned char。
#define uint unsigned int。
sbit sda=P2^0;
sbit scl=P2^1;
sbit dula=P2^6;。
sbit wela=P2^7;。
uchar flag,sec;。
uint num;
uchar code table[]={。
0x3f,0x06,0x5b,0x4f,。
0x66,0x6d,0x7d,0x07,。
0x7f,0x6f,//0x77,0x7c,。
//0x39,0x5e,0x79,0x71 。
};
void delay()
void start() //开始信号。
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
void stop() //停止。
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
void respons() //应答。
uchar i=0;
scl=1;
delay();
while((sda==1)&&(i<250))i++;。
scl=0;
delay();
void init()
sda=1;
delay();
scl=1;
delay();
void write_byte(uchar date)。
uchar i,temp;
temp=date;
scl=0;
for(i=0;i<8;i++)。
{
temp=temp<<1;。
delay();
sda=CY;
delay();
scl=1;
delay();
scl=0;
delay();。
}
sda=1;
delay();
uchar read_byte()。
uchar i,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)。
{
scl=1;
delay();
k=(k<<1)|sda;。
scl=0;
delay();
}
return k;
void delayms(uchar x)。
uchar a,b;
for(a=x;a>0;a--)。
for(b=110;b>0;b--);。
void write_add(uchar address,uchar date)。
start();
write_byte(0xa0);。
respons();
write_byte(address);。
respons();
write_byte(date);。
respons();
stop();
uchar read_add(uchar address)。
uchar date;
start();
write_byte(0xa0);。
respons();
write_byte(address);。
respons();
start();
write_byte(0xa1);。
respons();
date=read_byte();。
stop();
return date;
void display(uchar shi,uchar ge)。
{
dula=1;
P0=table[shi];。
dula=0;
P0=0xff;
wela=1;
P0=0xfe;//01111111。
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
void main()
init();
num=0;
sec=read_add(1);。
if(sec>=100)。
sec=0;
TMOD=0x01;
TH0=(65536-45872)/256;。
TL0=(65536-45872)%256;。
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(sec/10,sec%10);。
if(flag==1)。
{
flag=0;
write_add(1,sec);。
}
}
void T0_time() interrupt 1。
TH0=(65536-45872)/256;。
TL0=(65536-45872)%256;。
num++;
if(num==20)
{
num=0;
sec++;
flag=1;
if(sec==100)。
{
sec=0;
}
}
void main()
int i;
char str[] = "what are you fucking doing ?";。
int len = sizeof(str)/sizeof(char);。
for(i=0; i<len; i++)。
{
if(str[i]!=' '&& str[i]!='\0')。
{
delay(10000);//此处是有延时的效果,但是不是我想要的每输出一个字符就延时。
而是一组后延时,请问这个库函数的用法及实现。
}
printf("%c",str[i]);。
}
getch();
定义一个延时xms毫秒的延时函数。
void delay(unsigned int xms) // xms代表需要延时的毫秒数。
unsigned int x,y;。
for(x=xms;x》0;x--)
for(y=110;y》0;y--);。
使用:
void Delay10us(uchar Ms)
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);。
i=[(延时值-1.75)*12/Ms-15]/4。
扩展资料
1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。
2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
delay是延时的意思,delay(n)是延时n个时间单位,至于一个时间单位是多少,这需要你的delay函数决定的,
C语言delay函数延时计算源代码如下:
#include "stdlib.h"。
void delay()
time_t start,end;。
start=time(null);。
unchar i;
while(z--)
for(i=0;i<121;i++);。
end=time(null);。
printf("%f",difftime(end,start));。
扩展资料
1、对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。
对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。
原文地址:http://www.qianchusai.com/c%E8%AF%AD%E8%A8%80delay%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8.html