当前位置:首页 > 购物技巧 > 正文内容

c语言程序带注释50个(C语言程序注释)

hacker2年前 (2022-06-26)购物技巧54

本文目录一览:

求30行以上简单的C语言程序,要每行都有注释,明天用

C语言程序设计(第7章结构体与共用体)

插入的节点可以在表头、表中或表尾。假定我们按照以学号为顺序建立链表,则插入的

节点依次与表中节点相比较,找到插入位置。由于插入的节点可能在链表的头,会对链表的

头指针造成修改,所以定义插入节点的函数的返回值定义为返回结构体类型的指针。节点的

插入函数如下:

struct

node

*insert(head,pstr,n)

/*插入学号为n、姓名为pstr的节点*/

struct

node

*head;

/*链表的头指针*/

char

*pstr;

int

n;

{

struct

node

*p1,*p2,*p3;

p1=(struct

node*)malloc(sizeof(struct

node));/*

分配一个新节点*

/

strcpy(p1-str,pstr);

/*

写入节点的姓名字串*/

p1-num=n;

/*

学号*/

p2=head;

if(head==NULL)

/*

空表*/

{

head=p1;

p1-next=NULL;/*新节点插入表头*/

}

else

{

/*非空表*

/

while(np2-nump2-next!=NULL)

/

*输入的学号小于节点的学号,并且未到表尾*

/

{

p3=p2;

p2=p2-next;

/*

跟踪链表增长*/

}

if(n=p2-num)

/*找到插入位置*/

if

(head==p2)

/

*

插入位置在表头*

/

{

head=p1;

p1-next=p2;

}

else

{

/*插入位置在表中*/

p3-next=p1;

p1-next=p2;

}

else

{

/*插入位置在表尾*/

p2-next=p1;

p1-next=NULL;

}

}

return(head);/*

返回链表的头指针*/

}

求c语言程序,500行左右,要有详细注释。

#include stdio.h

#include windows.h

#include stdlib.h

typedef struct JOB

{

int hour;//用于存储输入的时

int min;//用于存储输入的分

int ID;//记录此作业的号

int requesttime;//存储作业所估计运行时间

int runtime;//作业周转时间

int cometime;//作业进入时间

int finishtime;//作业结束时间

int starttime;//作业开始时间

float runtime2;//带权周转时间

int prior;//响应比

}JOB;

float counttime1=0;//用于存储总的周转时间

float counttime2=0;//用于存储总的带权周转时间

int nowtime;

int flat=0;

int sign=0;

void insert(JOB [],JOB);

void FCFS();

void SJF();

void HRN();

void getprior(JOB a,int b);

int getmin(int i);

int gethour(int i);

int trans(int i,int j);

#define N 100

JOB job[N];

JOB wait[N];//用于SJF中存储等待的作业的时间

JOB job2[N];//由于在SJF中不好控制输出时按照作业序号的顺序输出,用一个数组存储

int co=0;

int jobnum;

void main()

{

int i;

printf("输入作业数:\n");

scanf("%d",i);

jobnum=i;

FILE *fp;

fp = fopen("in.txt","rb");

if(fp == NULL)

{

printf("Can't open in.txt");

exit(0);

}

for(int j=0;ji;j++)

{

fscanf(fp,"%d:%d %d",job[j].hour,job[j].min,job[j].requesttime);

job[j].ID=j+1;

job[j].cometime=job[j].hour*60 + job[j].min;

printf("%d\n",job[j].requesttime);

}

printf("\n ================================");

printf("\n | 1:FCFS 2:SJF |");

printf("\n | 3:HRN |");

printf("\n ================================");

printf("\nPlease select a number from (1,2,3):");

scanf("%d",i);

switch(i)

{

case 1: FCFS();break;

case 2: SJF();break;

case 3: HRN();break;

}

}

void FCFS()

{

printf("\n\n根据先来先服务算法:\n");

int k;

for(int i=0;ijobnum-1;i++)//将作业数组按照进入时间先后排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].cometimejob[k].cometime) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

for(int i=0;ijobnum;i++)

{

if(i==0)//如果是第一个任务

{

job[i].starttime=job[i].cometime;

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

}

else

{

job[i].starttime=(job[i-1].finishtimejob[i].cometime ? job[i-1].finishtime : job[i].cometime);

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

}

}

printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

FILE *fp;

fp = fopen("FCFS.txt","w");

if(fp==NULL)

{

printf("Can't create file : SJF.txt\n");

exit(0);

}

fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

for(int i=0;ijobnum-1;i++)//将作业数组按照作业的ID排序

{

k=i;

for(int j=i+1;jjobnum;j++)

if(job[j].IDjob[k].ID)

k=j;

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

for(int i=0;ijobnum;i++)

{

int a,b,c,d;

a=gethour(job[i].starttime);

b=getmin(job[i].starttime);

c=gethour(job[i].finishtime);

d=getmin(job[i].finishtime);

printf("JOB%d ",job[i].ID);

fprintf(fp,"JOB%d ",job[i].ID);

if(job[i].min==0)

{

printf("%d:%d0 ",job[i].hour,job[i].min);

fprintf(fp,"%d:%d0 ",job[i].hour,job[i].min);

}

else

{

printf("%d:%d ",job[i].hour,job[i].min);

fprintf(fp,"%d:%d ",job[i].hour,job[i].min);

}

printf("%11d ",job[i].requesttime);

fprintf(fp,"%11d ",job[i].requesttime);

if(b==0)

{

printf("%d:%d0 ",a,b);

fprintf(fp,"%d:%d0 ",a,b);

}

else

{

printf("%d:%d ",a,b);

fprintf(fp,"%d:%d ",a,b);

}

if(d==0){

printf("%d:%d0 ",c,d);

fprintf(fp,"%d:%d0 ",c,d);

}

else{

printf("%d:%d ",c,d);

fprintf(fp,"%d:%d ",c,d);

}

printf("%11d%11f\n",job[i].runtime,job[i].runtime2);

fprintf(fp,"%13d%13f\n",job[i].runtime,job[i].runtime2);

}

printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

system("pause");

}

int trans(int i,int j)

{

return i*60 + j;

}

int gethour(int i)

{

return i/60;

}

int getmin(int i)

{

return i%60;

}

void SJF()

{

printf("\n\n根据短作业优先算法:\n");

int k;

for(int i=0;ijobnum-1;i++)//将作业数组按照进入时间先后排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].cometimejob[k].cometime) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

int numbers=jobnum;

int realnum=jobnum;

for(int i=0;inumbers;i++)

{

if(i==0)//假如是第一个,则直接进入cpu进行作业

{

job[i].starttime=job[i].cometime;

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime;

nowtime=job[i].finishtime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

job2[co++]=job[i];

for(int u=0;ujobnum-1;u++)//把第一个从job序列的移除

job[u]=job[u+1];

jobnum--;

int j=0;

while(job[j].cometime=nowtimejjobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中

{

wait[flat++]=job[j++];

}

int i=0;

if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中

{

while(jjobnum)//将已经转移的job从job序列中移除

{

job[i]=job[j];

i++;

j++;

}

jobnum=i;

}

if(flat1)//如果wait序列中不止一个等待作业

{

int r;

for(int x=0;xflat-1;x++)//将等待数组按照估计运行时间先后排序。

{

r=x;

for(int y=x+1;yflat;y++)

{

if(wait[y].requesttimewait[r].requesttime)

r=y;

}

if(r!=x)

{

JOB a;

a=wait[r];

wait[r]=wait[x];

wait[x]=a;

}

}

}

}

else

{

if(flat==0)//如果wait序列中没有,即没有等待的序列,则将job序列中的第一个作业放入cpu进行运行

{

job[0].starttime=job[0].cometime;

job[0].finishtime=job[0].starttime+job[0].requesttime;

job[0].runtime=job[0].finishtime-job[0].cometime;

job[0].runtime2=(float)job[0].runtime/(float)job[0].requesttime;

nowtime=job[0].finishtime;

counttime1+=job[0].runtime;

counttime2+=job[0].runtime2;

job2[co++]=job[0];

for(int u=0;ujobnum-1;u++)//将放入运行的作业从job序列中移除

job[u]=job[u+1];

jobnum--;

int j=0;

while(job[j].cometime=nowtimejjobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中

{

wait[flat++]=job[j++];

}

int i=0;

if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中

{

while(jjobnum)

{

job[i]=job[j];

i++;

j++;

}

jobnum=j;

}

int r;

if(flat1)//如果wait序列中不止一个等待作业

{

for(int x=0;xflat-1;x++)//将等待数组按照估计运行时间先后排序。

{

r=x;

for(int y=x+1;yflat;y++)

{

if(wait[y].requesttimewait[r].requesttime) r=y;

}

if(r!=x)

{

JOB a;

a=wait[r];

wait[r]=wait[x];

wait[x]=a;

}

}

}

}

else//否则如果wait序列中有等待作业,则调用wait序列的第一个作业

{

wait[0].starttime=nowtime;

wait[0].finishtime=nowtime+wait[0].requesttime;

wait[0].runtime=wait[0].finishtime-wait[0].cometime;

wait[0].runtime2=(float)(wait[0].runtime)/(float)(wait[0].requesttime);

nowtime=wait[0].finishtime;

counttime1+=wait[0].runtime;

counttime2+=wait[0].runtime2;

job2[co++]=wait[0];

for(int i=0;iflat;i++)//将wait序列的第一个作业从wait中移除

wait[i]=wait[i+1];

flat--;

int j=0;

while(job[j].cometime=nowtimejjobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中

{

wait[flat++]=job[j++];

}

int i=0;

if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中

{

if(j==1jobnum==1)//job序列中最后一个作业已经转移到wait中,则将jobnum自减一到0

jobnum--;

else

{

while(jjobnum)//否则将已转移的作业从job中移除

{

job[i]=job[j];

i++;

j++;

}

jobnum=j;

}

}

int r;

if(flat1)//如果wait里的等待序列多余一个,则进行重新排序

{

for(int x=0;xflat-1;x++)//将等待数组按照估计运行时间先后排序。

{

r=x;

for(int y=x+1;yflat;y++)

{

if(wait[y].requesttimewait[r].requesttime)

r=y;

}

if(r!=x)

{

JOB a;

a=wait[r];

wait[r]=wait[x];

wait[x]=a;

}

}

}

}

}

}

printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

FILE *fp;

fp = fopen("SJF.txt","w");

if(fp==NULL)

{

printf("Can't create file : SJF.txt\n");

exit(0);

}

fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

for(int i=0;irealnum-1;i++)//将作业数组按照作业的ID排序

{

k=i;

for(int j=i+1;jrealnum;j++)

if(job2[j].IDjob2[k].ID)

k=j;

if(k!=i)

{

JOB a;

a=job2[k];

job2[k]=job2[i];

job2[i]=a;

}

}

for(int i=0;irealnum;i++)

{

int a,b,c,d;

a=gethour(job2[i].starttime);

b=getmin(job2[i].starttime);

c=gethour(job2[i].finishtime);

d=getmin(job2[i].finishtime);

printf("JOB%d ",job2[i].ID);

fprintf(fp,"JOB%d ",job2[i].ID);

if(job2[i].min==0)

{

printf("%d:%d0 ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d0 ",job2[i].hour,job2[i].min);

}

else

{

printf("%d:%d ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d ",job2[i].hour,job2[i].min);

}

printf("%11d ",job2[i].requesttime);

fprintf(fp,"%11d ",job2[i].requesttime);

if(b==0)

{

printf("%d:%d0 ",a,b);

fprintf(fp,"%d:%d0 ",a,b);

}

else

{

printf("%d:%d ",a,b);

fprintf(fp,"%d:%d ",a,b);

}

if(d==0){

printf("%d:%d0 ",c,d);

fprintf(fp,"%d:%d0 ",c,d);

}

else{

printf("%d:%d ",c,d);

fprintf(fp,"%d:%d ",c,d);

}

printf("%11d%11f\n",job2[i].runtime,job2[i].runtime2);

fprintf(fp,"%13d%13f\n",job2[i].runtime,job2[i].runtime2);

}

printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/realnum,counttime2/realnum);

fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/realnum,counttime2/realnum);

system("pause");

}

void HRN()

{

co=0;

printf("\n\n根据最高响应比优先算法:\n");

int k;

for(int i=0;ijobnum-1;i++)//将作业数组按照进入时间先后排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].cometimejob[k].cometime) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

nowtime=job[0].cometime;

for(int i=0;ijobnum;i++)

{

int j=i;

int xx=i;

while(j++jobnum)//依次求得未完成的作业的优先级

job[j].prior=1+(float)(nowtime-job[j].cometime)/job[j].requesttime;

int k;

for(int i=xx;ijobnum-1;i++)//将作业数组按照响应比由高到低排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].priorjob[k].prior) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

if(job[i].prior=1)//有等待的则让等待的开始时间等于现在时间

job[i].starttime=nowtime;

else

job[i].starttime=job[i].cometime;//没有等待的作业的话就让下一次第一个进入的工作的时间当作其开始时间并且赋给当前时间

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/job[i].requesttime;

nowtime=job[i].finishtime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

job2[co++]=job[i];

}

printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

FILE *fp;

fp = fopen("HRN.txt","w");

if(fp==NULL)

{

printf("Can't create file : SJF.txt\n");

exit(0);

}

fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

for(int i=0;ijobnum-1;i++)//将作业数组按照作业的ID排序

{

k=i;

for(int j=i+1;jjobnum;j++)

if(job2[j].IDjob2[k].ID)

k=j;

if(k!=i)

{

JOB a;

a=job2[k];

job2[k]=job2[i];

job2[i]=a;

}

}

for(int i=0;ijobnum;i++)

{

int a,b,c,d;

a=gethour(job2[i].starttime);

b=getmin(job2[i].starttime);

c=gethour(job2[i].finishtime);

d=getmin(job2[i].finishtime);

printf("JOB%d ",job2[i].ID);

fprintf(fp,"JOB%d ",job2[i].ID);

if(job2[i].min==0)

{

printf("%d:%d0 ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d0 ",job2[i].hour,job2[i].min);

}

else

{

printf("%d:%d ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d ",job2[i].hour,job2[i].min);

}

printf("%11d ",job2[i].requesttime);

fprintf(fp,"%11d ",job2[i].requesttime);

if(b==0)

{

printf("%d:%d0 ",a,b);

fprintf(fp,"%d:%d0 ",a,b);

}

else

{

printf("%d:%d ",a,b);

fprintf(fp,"%d:%d ",a,b);

}

if(d==0){

printf("%d:%d0 ",c,d);

fprintf(fp,"%d:%d0 ",c,d);

}

else{

printf("%d:%d ",c,d);

fprintf(fp,"%d:%d ",c,d);

}

printf("%11d%11f\n",job2[i].runtime,job2[i].runtime2);

fprintf(fp,"%13d%13f\n",job2[i].runtime,job2[i].runtime2);

}

printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

system("pause");

}

作业调度

求用c语言编写的程序,最好带着注释(越详细越好!!)

#includestdio.h

#includestring.h

#includestdlib.h

#include"conio.h"

#define N 20

struct depositor

{char num[20];br char name[20];br char per[20];br float sec;br float mon;br};

void menu();

int reads(struct depositor dep[N]);

void save(struct depositor dep[N],int n);

void add();

void del();

void change();

void show();

void main()

{

int n;

while(1)

{

menu();

printf("\n 请输入您要选择的操作序号,按回车键确认:");

scanf("%d",n);

switch(n)

{

case 1: add();break;

case 2: show();break;

case 3: del();break;

case 4: change();break;

case 5: exit(0);

default: printf("输入错误,请输入列表中存在的序号!\n ");

}

}}

void menu()

{

printf(" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ");

printf("\n ************************* 银行个人账户管理系统*************************** ");

printf("\n 1 储户开户");

printf("\n 2 余额查询");

printf("\n 3 储户销户");

printf("\n 4 密码修改");

printf("\n 5 退出");

printf("\n ************************************************************************** ");

printf("\n %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ");

}

int reads(struct depositor dep[N]) // 读取储户内容

{

FILE *fp;

int i=0;

if((fp=fopen("account.dat","r"))==NULL)

{

printf("文件打开失败!\n");

return 0;

}

else

{

for(i=0;!feof(fp);i++)

fscanf(fp,"\n%s %s %s %f %f\n",dep[i].num,dep[i].name,dep[i].per,dep[i].sec,dep[i].mon);

}

fclose(fp);

return i;

}

void save(struct depositor dep[N],int n) // 储户保存后信息

{

FILE *fp;

int i=0;

if((fp=fopen("account.dat","w"))==NULL)

{

printf("文件打开失败!\n");

return ;

}

else

{

for(i=0;in;i++)

fprintf(fp,"\n%s %s %s %f %f\n",dep[i].num,dep[i].name,dep[i].per,dep[i].sec,dep[i].mon );

}

fclose(fp);

}

void add()/*储户开户*/

{

FILE *fp;

struct depositor dep;

if((fp=fopen("account.dat","a"))==NULL) //如果文件已经存在,可以追加储户信息

{

if((fp=fopen("account.dat","w"))==NULL) // 文件不存在时,创建新文件,输入储户信息

{

printf("用户不存在!\n");

return ;

}

}

printf("\n请输入储户帐号,并按回车键确认:\n");

scanf("%s",dep.num);

fprintf(fp,"\n%s\n",dep.num);

printf("\n请输入储户姓名,并用回车键确认: \n");

scanf("%s",dep.name);

fprintf(fp,"\n%s\n",dep.name);

printf("\n请输入储户身份证号,并用回车键确认: \n");

scanf("%s",dep.per);

fprintf(fp,"\n%s\n",dep.per);

printf("\n请输入储户密码,并用回车键确认: \n");

scanf("%f",dep.sec);

fprintf(fp,"\n%f\n",dep.sec);

printf("\n请输入储户金额,并按回车键确认: \n");

scanf("%f",dep.mon);

fprintf(fp,"\n%f\n",dep.mon);

if(dep.mon10 )

{ printf("\n 储户金额低于十元,不予开户 \n");

return ;

}

printf("\n **********************开户成功*************************\n");

fclose(fp);

}

void show() //余额查询

{

struct depositor dep[N];

int i,n ;

char s[20];

float t ;

n=reads(dep);

printf("\n请用户输入账号,密码,用空格隔开,按回车键确认:\n");

scanf("%s %f",s,t);

for(i=0;in;i++)

if (strcmp(s,dep[i].num)==0 t==dep[i].sec) break;

if (i=n || t!=dep[i].sec)

{

printf("\n 输入错误 \n");

return ;

}

else

{ printf("*********************储户的余额如下**********************\n");

printf(" 余额 \n");

printf("\n %11.2f \n", dep[i].mon);

printf("**********************************************************\n");

}

}

void del() /*储户信息删除函数*/

{

struct depositor dep[N];

char number[20];

float t;

int n,i,j;

n=reads(dep);

printf("\n请输入要删除储户账号,密码,用空格隔开,按回车键确认:");

scanf("%s %f",number,t);

for(i=0;in;i++)

if(strcmp(number,dep[i].num)==0t==dep[i].sec) break;

if(i=n||t!=dep[i].sec)

{

printf("没有找到该储户信息!\n");

return;

}

else

{

for(j=i+1;jn;j++)

dep[j-1]=dep[j];

}

save(dep,n-1);

printf("销户成功!\n");

}

void change() //储户密码更改

{

struct depositor dep[N];

int n,i;

float t;

char number[20];

printf("\n请输入要更改密码的储户账号,密码,用空格隔开,按回车键确认:");

scanf("%s %f",number,t);

n=reads(dep);

for(i=0;in;i++)

if(strcmp(number,dep[i].num)==0t==dep[i].sec)

break;

if(i=n||t!=dep[i].sec)

{

printf("无此储户信息!");

return;

}

printf("\n请输入更改后密码,按回车键确认:\n");

scanf("%f",dep[i].sec);

save(dep,n);

printf("\n修改成功\n");

}

谁提供一原创C语言完整程序,50行以上,有程序注释,急用

#includereg52.h

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit rs=P2^6; //液晶引脚位定义

sbit rw=P2^5;

sbit en=P2^7;

sbit k5=P2^3; //独立键盘位定义

sbit k6=P2^2;

sbit k7=P2^4;

sbit sda=P2^1; //EEPROM位定义

sbit scl=P2^0;

sbit JD=P1^4;

uchar i,tt,a;

char shi,fen,miao;

uchar code D[]=" 2011-3-24";

uchar code D1[]=" : : ";

void delay1() //延时函数,延时时间约4us

{;;}

void start() //EEPROM中开始信号

{

sda=1;

delay1();

scl=1;

delay1();

sda=0;

delay1();

}

void stop() //EEPROM中停止信号

{

sda=0;

delay1();

scl=1;

delay1();

sda=1;

delay1();}

void response() //EEPROM中应答信号

{

uint i;

scl=0;

delay1();

scl=1;

delay1();

while((sda==1)(i250))i++)

scl=0;

delay1();

}

void write_byte(uchar shu)//在EEPROM中写8位2进制数

{

uint i;

uchar temp;

temp=shu;

for(i=0;i8;i++)

{

temp=temp1;

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1();

}

scl=0;

delay1();

sda=1;

delay1();

}

uchar read_byte()//从EEPROM中读8位2进制数

{

uint i;

uchar a;

scl=0;

delay1();

sda=1;

delay1();

for(i=0;i8;i++)

{

scl=1;

delay1();

a=(a1)|sda;

delay1();

scl=0;

delay1();

}

return a;

}

void write(uchar address,uchar date)//在EEPROM指定地址写入数据

{

start();

write_byte(0xa0);

response();

write_byte(address);

response();

write_byte(date);

response();

stop();}

uchar read(uchar address) //从EEPROM中指定地址读数据

{

uchar date;

start();

write_byte(0xa0);

response();

write_byte(address);

response();

start();

write_byte(0xa1);

response();

date=read_byte();

stop();

return date;

}

void delay(uchar z) //延时函数

{

uchar x,y;

for(x=z;x0;x--)

for(y=120;y0;y--);

}

write_com(uchar com) //给液晶写指令

{

en=0;

rs=0;

rw=0;

P0=com;

delay(5);

en=1;

delay(5);

en=0;

}

write_date(uchar date) //给液晶写数据

{

en=0;

rs=1;

rw=0;

P0=date;

delay(5);

en=1;

delay(5);

en=0;

}

void write_sfm(uchar add,char date)//液晶在指定位置开始写指定的数

{ char x,y;

x=date/10;

y=date%10;

write_com(0x80+0x40+add);

write_date(0x30+x);

write_date(0x30+y);

}

void init()

{ TMOD=0x01; //定时器0的初始化

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;ET0=1;

TR0=1;

write_com(0x38); //液晶的初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(i=0;i12;i++) //显示液晶的第一行

{write_date(D[i]);br delay(20);br }

write_com(0x80+0x40);//显示液晶的第二行

for(i=0;i12;i++)

{write_date(D1[i]);br delay(20);br }

shi=read(4);//从eeprom中读值分别赋给时分秒

fen=read(5);

miao=read(2);

write_sfm(4,shi);//液晶第二行显示时分秒

write_sfm(7,fen);

write_sfm(10,miao);}

void main()

{

init();

while(1)

{

if(k5==0)

{

delay(5);

if(k5==0)

{

while(!k5);//松手检测

delay(5);

while(!k5);

a++;

TR0=0;

if(a==4)

{

a=0;

TR0=1;

tt=0;

}

}

}

switch(a)

{

case 1: //秒的调整

{ write_com(0x80+0x40+11);//调光标到秒的位置

write_com(0x0f); //光标闪烁

if(k6==0)

{

delay(5);

if(k6==0)

{ while(!k6);

delay(5);

while(!k6);

miao++;

if(miao==60)

miao=0;

write(2,miao);

write_sfm(10,miao);

write_com(0x80+0x40+11);

}

}

if(k7==0)

{

delay(5);

if(k7==0)

{ while(!k7);

delay(5);

while(!k7);

miao--;

if(miao0)

miao=59;

write(2,miao);

write_sfm(10,miao);

write_com(0x80+0x40+11);

}

}

} break;

case 2: //分钟的调整

{ write_com(0x80+0x40+8);//调光标到分的位置

if(k6==0)

{

delay(5);

if(k6==0)

{ while(!k6);

delay(5);

while(!k6);

fen++;

if(fen==60)

fen=0;

write(5,fen);

write_sfm(7,fen);

write_com(0x80+0x40+8);

}

}

if(k7==0)

{

delay(5);

if(k7==0)

{ while(!k7);

delay(5);

while(!k7);

fen--;

if(fen0)

fen=59;

write(5,fen);

write_sfm(7,fen);

write_com(0x80+0x40+8);

}

}

} break;

case 3: //小时的调整

{ write_com(0x80+0x40+5);//调光标到小时的位置

if(k6==0)

{

delay(5);

if(k6==0)

{ while(!k6);

delay(5);

while(!k6);

shi++;

if(shi==24)

shi=0;

write(4,shi);

write_sfm(4,shi);

write_com(0x80+0x40+5);

}

}

if(k7==0)

{

delay(5);

if(k7==0)

{ while(!k7);

delay(5);

while(!k7);

shi--;

if(shi0)

shi=23;

write(4,shi);

write_sfm(4,shi);

write_com(0x80+0x40+5);

}

}

} break;

case 0:

{

write_com(0x0c); //开液晶显示,不显光标,光标不闪

if(tt==20) //每过一秒时钟走一秒

{

tt=0;

miao++;

if(miao==60)

{

JD=0;

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

shi=0;

write_sfm(4,shi);

write(4,shi);

}

write_sfm(7,fen);

write(5,fen);

}

write_sfm(10,miao);

write(2,miao);

if(miao==30)

JD=1;

}

}

}

}

}

void timer0() interrupt 1 //定时器0函数

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

}

C++的~~LCD时钟程序

给C语言程序加上注释

第一个程序 (/* */内为注释)

#define X 10 /* 定义X为10 */

#define Y 30 /* 定义Y为30 */

#define N 20 /* 定义N为20 */

int A[N]={2,5,15,30,1,40,17,50,9,21,32,8,41,22,49,31,33,18,80,5};/* 定义一个20位的数组A[N]并赋值 */

#includestdio.h /* 引用头文件stdio.h */

void del(int *A, int *n, int x, int y)/* 定义一个函数del,输入参数为int型的指针A,n和int型的x,y,作用是删去数组中大于x或小于y的数 */

{

int i,j;/* 定义整数型变量i,j */

for(i=j=0; i*n; i++)/*循环,初始条件i=j=0,终止条件i指针n的值,循环步长为1 */

if(A[i]y||A[i]x) /* 判断条件如果数组元素A[i]的值大于y或者小于x */

A[j++]=A[i]; /* 将数组元素A[i]赋值给数组元素A[j],然后j加1 */

*n=j; /* 给指针n赋值为j */

}

void output(int *A, int n)/* 定义函数output,输入参数为整型指针A和整型变量n,作用为输出数组前n个数 */

{

int i;/* 定义整型变量i */

printf("\n数组有%d个元素:\n",n);/* 在屏幕输出“数组有n个元素:”,(n为输入量或所赋值的量)*/

for(i=0; in; i++){ /* 循环,初始条件i=0,终止条件in,步长为1 */

printf("%7d",A[i]); /* 在屏幕输出数组A[i]的各个值 */

if((i+1)%10==0) /* 判断,条件为如果(i+1)除以10取余数等于0 */

printf("\n"); /* 在屏幕上输出换行 */

}

printf("\n");/* 在屏幕上输出换行 */

}

void main()/* 主程序 */

{

int n;/* 定义一个整型变量n */

n=N; /给n赋值为N,之前有定义N为20,所以实际n=20 */

output(A,n);/* 以数组A和n为参数,执行函数output */

del(A,n,X,Y);/* 执行函数del */

output(A,n);/* 执行函数output */

}

带注释的c语言程序

#includereg52.h

#define uchar unsigned char

#define uint unsigned int

bit write=0; //写24C02的标志;

sbit sda=P2^0;

sbit scl=P2^1;

sbit dula=P2^6;

sbit wela=P2^7;

uchar sec,tcnt;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay()

{ ;; }

void delay1ms(uint z)

{

uint x,y;

for(x=z;x0;x--)

for(y=110;y0;y--);

}

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;

scl=1;

delay();

while((sda==1)(i250))i++;

scl=0;

delay();

}

void init()

{

sda=1;

delay();

scl=1;

delay();

}

void write_byte(uchar date)

{

uchar i,temp;

temp=date;

for(i=0;i8;i++)

{

temp=temp1;

scl=0;

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;i8;i++)

{

scl=1;

delay();

k=(k1)|sda;

scl=0;

delay();

}

return k;

}

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 bai_c,uchar sh_c) //显示程序

{

dula=0;

P0=table[bai_c]; //显示第一位

dula=1;

dula=0;

wela=0;

P0=0x7e;

wela=1;

wela=0;

delay1ms(5);

dula=0;

P0=table[sh_c]; //显示第二位

dula=1;

dula=0;

wela=0;

P0=0x7d;

wela=1;

wela=0;

delay1ms(5);

}

void main()

{

init();

sec=read_add(2); //读出保存的数据赋于sec

if(sec100) //防止首次读取出错误数据

sec=0;

TMOD=0x01; //定时器工作在方式1

ET0=1;

EA=1;

TH0=(65536-50000)/256; //对TH0 TL0赋值

TL0=(65536-50000)%256; //使定时器0.05秒中断一次

TR0=1; //开始计时

while(1)

{

display(sec/10,sec%10);

if(write==1) //判断计时器是否计时一秒

{

write=0; //清零

write_add(2,sec); //在24c02的地址2中写入数据sec

}

}

}

void t0() interrupt 1 //定时中断服务函数

{

TH0=(65536-50000)/256; //对TH0 TL0赋值

TL0=(65536-50000)%256; //重装计数初值

tcnt++; //每过50ms tcnt加一

if(tcnt==20) //计满20次(1秒)时

{

tcnt=0; //重新再计

sec++;

write=1; //1秒写一次24C02

if(sec==100) //定时100秒,再从零开始计时

sec=0;

}

}

扫描二维码推送至手机访问。

版权声明:本文由万物知识分享发布,如需转载请注明出处。

本文链接:http://qmsspa.com/43401.html

分享给朋友:

“c语言程序带注释50个(C语言程序注释)” 的相关文章

10个最好的亚马逊联盟(amazon affiliate)WordPress主题

咱们 晓得亚马逊同盟 是一种赔钱的孬要领 !如今 是时刻 封动一个亚马逊同盟 WordPress主题去拉广同盟 产物 了。 尔将先容 最蒙迎接 战蒙信赖 的仄台的最好亚马逊同盟 WordPress主题,根本 有如下类型 评论网站 鉴于劣惠券的网站, 产物 发卖 主题, 电子商务/WooCo妹妹erc...

开发者福利!百度搜索增加智能小程序流量分发权重

开发者福利!百度搜索增加智能小程序流量分发权重

远日,有开辟 者背忘者泄漏 ,baidu在加快 背智能小法式 开辟 者谢搁更多搜刮 流质。详细 政策有:异样量质的内容,智能小法式 正在搜刮 外的权重会更下,获得 劣先隐示,得到 更下的流质。那对付 智能小法式 开辟 者去说无信是一年夜 利孬,也是baidu劣化搜刮 体验、丰硕 搜刮 熟态的主要...

我又注册了一个微信官方账号:红歌笔记。

我又注册了一个微信官方账号:红歌笔记。

年夜 野早晨孬。昨天领帖有点早了。单纯分享一高尔昨天作了甚么! 晚上录了 一0盘灌音 带,比来 念经由过程 怒马推俗仄台引流。假如 您如今 缺少 精确 的人脉,否以尝尝 。排火后果 很孬。详情请 浏览原文。怒马推俗排火体系 下昼 给社区成员讲了baidu霸屏,语音输出变换文字的齐进程 。...

兼职写文章赚钱的网站(什么网站可以写文章赚钱)

兼职写文章赚钱的网站(什么网站可以写文章赚钱)

能不克不及 作一个只有会写文章便能主动 赔钱的网站?是的,有时刻 便像作一个网站同样单纯。只有能赓续 输入本创文章,网站便能作没去。并且 ,正在将来 的日子面,它会连续 给您带去被迫支出。当然有人否能会答,写文章赔钱的仄台那么多,好比 知乎、微疑民间账号,为何必然 要抉择小我 网站?尔给没的来由...

微信小程序开发需要哪种编程语言(微信小程序都是用什么语言开发的)

微信小程序开发需要哪种编程语言(微信小程序都是用什么语言开发的)

微疑小法式 如今 很风行 ,成长 需供很年夜 。您 晓得若何 开辟 它吗?微疑小法式 的成长 若何 ?依据 你的开辟 要领 ,有二种要领 : 要领 一:合适 甚么皆没有懂的小皂,没有懂技术的小皂否以用「上线了」sxl.cn小法式 制造 硬件,整门坎上脚,没有须要 您懂所有技术。. n>...

如何让关键词seo排名起到效果(怎么快速提高关键词排名seo优化)

若何 作快捷症结 词排名?症结 词快捷排名哪一种模式比拟 孬?正在那面,宋九暂分享了一点儿最多见的症结 词正在症结 词高快捷排名的模式。\x0a存眷 微疑民间账号:宋九暂,归复症结 词“ 一 九”得到 欣喜彩蛋!...

评论列表

晴枙过活
2年前 (2022-06-26)

fclose(fp);}void show() //余额查询{ struct depositor dep[N]; int i,n ; char s[20]; float t ;

闹旅浪胚
2年前 (2022-06-26)

.runtime2=(float)job[i].runtime/job[i].requesttime; nowtime=job[i].finishtime; counttime1+=job[i]

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。