请帮我看一下这个单片机C语言程序,主函数都没有引用子函数?

这是数码管显示的程序。我以前用过VB,但在这里有点不懂。主函数中,没有引用子函数的语句,那它怎么执行display()呢?#include<reg52.h>//51芯片管... 这是数码管显示的程序。
我以前用过VB,但在这里有点不懂。
主函数中,没有引用子函数的语句,
那它怎么执行 display() 呢?

#include <reg52.h> //51芯片管脚定义头文件
#include <intrins.h> //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint unsigned int

sbit SDATA_595=P1^5; //串行数据输入
sbit SCLK_595 =P1^6; //移位时钟脉冲
sbit RCK_595 =P1^7; //输出锁存器控制脉冲
sbit CS_LED8 =P1^1; //数码管片选
sbit CS_1302 =P1^4; //ds1302片选

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管编码(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)
uchar dis[8]; //显示缓冲区

void delay(uint );
void display();

/*******************************************************
* *
* 延时函数 *
* *
*******************************************************/
void delay(uint dt)
{
uint i;
uchar bt;
for(i=0;i<dt;i++)
for(bt=0;bt<200;bt++);
}

/*******************************************************
* *
* 定时中断函数 *
* *
*******************************************************/

void timer0(void) interrupt 1
{
TH0=0XFC;
TL0=0X66;
display();
}

/*******************************************************
* *
* 显示函数 *
* *
*******************************************************/

void display()
{
uchar num,c,i;
for(i=0;i<8;i++)
{
num=dis[i];
CS_LED8=0;
for(c=0;c<8;c++) //写入显示数据
{
SCLK_595=0;
num=num<<1;
SDATA_595=CY;
SCLK_595=1;
SCLK_595=0;
}
num=~(1<<i);
for(c=0;c<8;c++) //写入数码管序号
{
SCLK_595=0;
num=num<<1;
SDATA_595=CY;
SCLK_595=1;
SCLK_595=0;
}
RCK_595=0;
_nop_(); //短延时
_nop_();
RCK_595=1;
_nop_();
_nop_();
RCK_595=0; //显示数据输出
delay(1);
CS_LED8=1;
}
}

/*******************************************************
* *
* 主函数 *
* *
*******************************************************/
main(void)
{
uchar k;
TMOD|=0x01;
TH0=0XFC;
TL0=0X66; //定时器初始化
TR0=1;
EA=1;
ET0=1;
// IP=0X10;

for(k=0;k<8;k++)
{
dis[k]=table[k]; //将显示内容送入显示缓冲区
}

while(1);
} //end of main()
主函数中,
"
TMOD|=0x01;
TH0=0XFC;
TL0=0X66; //定时器初始化
"
是如何初始化?是使用了单片机内部的定时器?怎么看定时多少?

TR0=1;
EA=1;
ET0=1;
又是什么意思?

还有
定时中断函数 void timer0(void) 后面有 “interrupt 1” 什么意思?为什么这样写(将interrupt 1写在函数名后面)?

===================================
呵呵,我刚接触硬件,呵呵。硬件方面不行,确实有点恼!当初读书时,不是计算机专业,虽然啃下了编程方面VB的知识,但由于条件限制,无法接触硬件相关的知识。现在工作好几年了,利用当初自学的软件编程知识,在工作上帮了我不少忙,但是越来越感到自己迫切要把硬件方面的知识补上。我初步入门了PLC之后,更加感到要把单片机补上,呵呵,谢谢大家。
展开
 我来答
百度网友b04b15b3b
2009-10-12 · TA获得超过1360个赞
知道小有建树答主
回答量:894
采纳率:0%
帮助的人:707万
展开全部
interrupt1是声明中断向量1的,tr0=1是定时器0开始工作,ea=1是全局开中断,et0=1,开定时器0中断,初始化定时器就是设置定时器的工作状态,和定时时间,具体你去查一下寄存器TMOD,TCON,还有定时时间的计算,呵呵,你要看的东西太多了
wookongbun
2009-10-12 · TA获得超过209个赞
知道答主
回答量:146
采纳率:0%
帮助的人:108万
展开全部
兄弟的C51基础不行啊!这样子看会糊涂的,建议还是先看看C51的语法吧。
这里主函数没有调用子函数,但是中断函数调用了delay和display这两个子函数。
interrupt 1是声明这个函数是中断函数,中断入口向量表号为1,也就是定时器0中断。
一般认为初始化就是对单片机的寄存器操作。
貌似硬件结构也不清楚哦。呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2009-10-12 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
不懂硬件的结果就是这个样子滴。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mscfox
2009-10-19 · TA获得超过360个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:288万
展开全部
你的想法是对的,
不过现实有转折的。。。

单片机中有个中断的概念,
即使main中没有调用(当然也不能调用),
只要条件满足了,
就会触发中断,
进入中断函数,

在你这程序里,
就体现在(interrupt,即中断):

void timer0(void) interrupt 1
{
TH0=0XFC;
TL0=0X66;
display();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式