当前位置:编程学习 > C/C++ >>

c语言程序的含义

#include<reg52.h> /头文件

....................

补充:#include<reg52.h>
#include<pub.h>
void main()
{
init();
for(;;);
}
void init()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=0XFC;
TL0=0X66;
TR0=1;
}
void tim0() interrupt 1
{
static unsigned int t=0;
TH0=0XFC;
TL0=0X66;
t++;
if((t==1000)&(mode==0))
jia();
if((t%500==0)&(mode==0))
led=~led;
led_js();
shang(t);
chushi(t%4);
key();
if(t==1000)t=0;
}


#ifndef __pub_h__
#define __pub_h__
#define duan P2
#define wei P0
void chushi(char i);
sbit led=P1^7;
unsigned char code led_zx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsigned char led_str[4]={0,0,0,0};
void js();
#define iokey P1
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
void key();
void actkey(unsigned char k);
void init();
char miao=0;
char fen=10;
char shi=12;
char mode=0;//模式
void moshi();
void shang(unsigned int t);//调时间选中的分或时在1s内前300毫秒灭后700毫秒亮
void chushi(char i)
{
duan=0xff;
wei=~(1<<i);
duan=led_zx[led_str[i]];
}
void led_js()
{
led_str[3]=fen%10;//分的个位
led_str[2]=fen/10;//分的十位
led_str[1]=shi%10;//时的个位
led_str[0]=shi/10;//时的十位
}
void jia()
{
miao++;
if(miao>=60)
{
miao=0;fen++;
}
if(fen>=60)
{
fen=0;shi++;
}
if(shi>=24)
shi=0;
}
void shang(unsigned int t)
{
if(t<300)
{
if(mode==1)//调分
{
led_str[2]=10;
led_str[3]=10;
}
if(mode==2)//调时
{
led_str[0]=10;
led_str[1]=10;
}
}
}
void key()//按键识别程序
{
static unsigned char tim=0;
static unsigned char kv=0;
key1=1;key2=1;key3=1;
if(!(key1&key2&key3))//按键按下
{
tim++;
if(tim>=21)
tim=21;
if(tim==20)
kv=iokey|0xf8;
}
else//按键抬起
{
actkey(kv);
kv=0;
tim=0;
}
}
void moshi()//mode=0正常状态 mode=1调分状态 mode=2调时状态
{
mode++;
if(mode==3)
mode=0;
}
void actkey(unsigned char k)//按键功能程序
{
switch(k)
{
case 0xfe: moshi(); break;
case 0xfd: if(mode==1) fen++;
if(fen==60)fen=0;
if(mode==2) shi++;
if(shi==24)shi=0;
break;
case 0xfb: if(mode==1) fen--;
if(fen==-1)fen=59;
if(mode==2) shi--;
if(shi==-1)shi=23;
break;
}
}

追问:我要的是每句的含义

答案:这是我以前写的一个简单的时钟程序,当时没写注释,与上面的差不多,你可以自己分析。

希望你可以尽快学通! 加油!

#include<at89x51.h>
unsigned char code TABLE[]=
{ 0xFC,/*0*/
0x60,/*1*/
0xDA,/*2*/
0xF2,/*3*/
0x66,/*4*/
0xB6,/*5*/
0xBE,/*6*/
0xE0,/*7*/
0xFE,/*8*/
0xF6,/*9*/
};
unsigned char code SCAN[]={0xdf,0xef,0x7f,0xbf,0xdf,0xef};
unsigned char SEG[6];
unsigned char HOUR=12,MIN=0,SEC=0;MS50=0;
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
/****延时程序******/
void delay(unsigned int t)
{
unsigned char m,n;
for(m=0;m<t;m++)
for(n=0;n<100;n++)
;
}

/****数码管扫描程序*****/
void scan6()
{
unsigned char a;
SEG[0]=HOUR/10;SEG[1]=HOUR%10;
SEG[2]=MIN/10;SEG[3]=MIN%10;
SEG[4]=SEC/10;SEG[5]=SEC%10;
for(a=0;a<=5;a++)
{
SEG[a]=TABLE[SEG[a]];
if(a==1|a==3|a==5)
SEG[a]=SEG[a]|0x01;
}
for(a=2;a<=5;a++)
{
P0=SEG[a];
P2=SCAN[a];
delay(1);
P2=0xff;
}
}

void key()
{
if(K1==0)
{
HOUR++;
if(HOUR==24) HOUR=0;
while(K1==0) scan6();
}
if(K2==0)
{
MIN++;
if(MIN==60) MIN=0;
while(K2==0) scan6();
}
if(K3==0)
{
SEC=0;
MS50=0;
while(K3==0) scan6();
}
}
/*******主程序******/
void main()
{
EA=1;ET0=1;
TMOD=0x01;
TH0=0x3c;TL0=0xb0;
TR0=1;
while(1)
{
scan6();
key();
}
}

void time(void) interrupt 1
{
TH0=0x3c;TL0=0xaf;
MS50++;
if(MS50==20)
{
MS50=0;
SEC++;
if(SEC==60)
{
SEC=0;
MIN++;
if(MIN==60)
{
MIN=0;
HOUR++;
if(HOUR==24) HOUR=0;
}
}
}
}

这是C51的程序,作用是包含51头文件,reg52.h里面对51单片机的常用寄存器进行了定义。

上一个:C语言高手帮帮忙
下一个:c语言二维表设计

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,