马老师书中的数码管显示器动态显示设计(一)中有些搞不懂
#include <mega16.h>#include <delay.h>
char time;
char dis_buff;
flash char led_7={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x7F,0x6F};
bit point_on;
flash char position={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
char time_counter;
void time_to_disbuffer(void)
{
char i,j=0;
for(i=0;i<2;i++)
{
dis_buff = time % 10;
dis_buff = time / 10;
}
}
void display(void)
{
char i;
for(i=0;i<=5;i++)
{
PORTA = led_7];
if (point_on && (i==2||i==4)) PORTA |= 0x80;
PORTC = position;
delay_ms(2);
PORTC =0xff;
}
}
void main()
{
PORTA=0x00; //初始化POTA
DDRA=0xFF;
PORTC=0x3F; //0011 1111
DDRC=0x3F; //0011 1111,PORT0-PORT5输入
time = 23;
time = 58;
time = 55;
time_to_disbuffer();
while(1)
{
display();
if(++time_counter >=40)
{
time_counter = 0;
point_on=~point_on;
if(++time>=60)
{
time = 0;
if(++time>=60)
{
time = 0;
if(++time>=24) time = 0;
}
time_to_disbuffer();
}
delay_ms(13);
}
}
}
问题1:time_counter为什么要自加到40,在晶振为4MHZ时自加一次时间怎样算啊?
问题2:在void display(void)函数里最后为什么要PORTC =0xff关闭所有数码管,直接更不吗,我删除后的确不行,是什么原因 1、只是粗略的计算,这里是作为冒号闪烁用的,要精确的可用定时器
2、消隐用,没有这句会有重影 little_Monkey 发表于 2013-10-31 20:11 static/image/common/back.gif
1、只是粗略的计算,这里是作为冒号闪烁用的,要精确的可用定时器
2、消隐用,没有这句会有重影 ...
明白了,谢大湿 kumechacha 发表于 2013-10-31 20:15 static/image/common/back.gif
明白了,谢大湿
楼主 在void display(void)函数里 if (point_on && (i==2||i==4)) PORTA |= 0x80这一句中 怎么理解,是增加显示数码管里的那个点吗,省去可以吗;
变量point_on,time_counter只定义了数据类型,没有定义初值,后面的程序中出现++time_counter,point_on=~point_on,这个怎么理解,难道初值默认为0了吗 624026387 发表于 2013-11-12 10:05 static/image/common/back.gif
楼主 在void display(void)函数里 if (point_on && (i==2||i==4)) PORTA |= 0x80这一句中 怎么理解,是 ...
if (point_on && (i==2||i==4)) PORTA |= 0x80这句使第三个和第五个数码管的小数点闪烁,区分时分秒的,point_on数据类型是bit只有0和1,是小数点闪烁控制,time_counter是大约1S的计时,软件延时时间是大约的 kumechacha 发表于 2013-11-12 19:15 static/image/common/back.gif
if (point_on && (i==2||i==4)) PORTA |= 0x80这句使第三个和第五个数码管的小数点闪烁,区分时分秒的, ...
明白就好。
另外,通常情况下,定义变量没有赋初值的化,变量自动会自动初始化为0的(编译器会自动加上相应的初始代码,包含数据区清零)。 624026387 发表于 2013-11-12 10:05 static/image/common/back.gif
楼主 在void display(void)函数里 if (point_on && (i==2||i==4)) PORTA |= 0x80这一句中 怎么理解,是 ...
对全局变量或者静态变量而言,不赋初值的话,默认为0。对局部非静态变量而言,不赋初值的话,初值为随机的。建议变量定义时就赋初值,避免后面忘记赋初值,从而导致无法预料的错误。 Gallen.Zhang 发表于 2013-11-19 23:48 static/image/common/back.gif
对全局变量或者静态变量而言,不赋初值的话,默认为0。对局部非静态变量而言,不赋初值的话,初值为随机 ...
补充的好 kumechacha 发表于 2013-11-12 19:15
if (point_on && (i==2||i==4)) PORTA |= 0x80这句使第三个和第五个数码管的小数点闪烁,区分时分秒的, ...
time_counter这个 时间大约是怎么计算的4M的晶振 0.25微妙的话大约也不够1秒呀? 扫一个数码管用2ms,6个一共用12ms,再延时13ms,一共25ms,循环40次,正好1s,当然这个1s不是精确的
页:
[1]