tepaiyuan 发表于 2011-10-18 11:46:38

马老师,我刚买了您的第二版书,就是数码管部分看不懂,希望您给与帮助!!!!!!

马老师。希望您能在百忙之中给我们这些新手一些讲解,尤其是在调时间的时候控制数码管闪烁,这个空绕我好久啦!特此向您请教一下!您给与讲解一下!

machao 发表于 2011-10-19 16:45:56

教程中里有时钟的例子,好多例子也都有闪烁的控制,你应该仔细去理解,掌握基本的思路。

在我讲的第一个动态扫描数码管的例子中(P193),那个display的数码管显示驱动函数中,已经有了闪烁控制的方法:

if (point_on && (i==2 || i==4)) PORTA|= 0x80;

这里尽管是让一个点的闪烁,其实思路是相同的。

你只要真正理解和明白里面标志变量point_on的作用,i的作用,就应该能举一反三。

例如,想让最高位(i=0)的那个数码管0.5s亮,0.5s暗(这就是闪烁),那么你在程序的其它地方(最好在定时中断中)控制标志变量point_on,每隔0.5s取反,那么

if (point_on && i==0) PORTA = 0x00;

就实现了最高位的闪烁。

当然,前提是在你理解了这个数码管的动态扫描驱动函数基础之上的。

tepaiyuan 发表于 2011-10-20 09:21:03

-----------------------------------------------------------------------

马老师,我们可以在数码管闪烁调秒的那里不采用定时器可以吗?学生有点理解不了,谢谢您的耐心讲解。

machao 发表于 2011-10-20 09:39:48

学习单片机,充分了解和掌握用定时器和中断的概念和应用,才算的上真正的入门,才能具备以后继续深入的学习和应用基础。

tepaiyuan 发表于 2011-10-20 09:53:29

回复【3楼】machao
-----------------------------------------------------------------------

谢谢您,我一直等着您的第二版,一出来马上子网上买了一本,后来同学们看了!我就又买了一本!我感觉理解一些程序有困难,真的马老师!我有时候感觉内部资源用不上,真的,不是看您的书,我还重来没有用过内部资源!见笑啦……老师。我起步晚…………

tepaiyuan 发表于 2011-10-20 09:59:51

马老师,我的意思是说:不用内部资源问题:实现在调整时间的时候实现相应位的闪烁

ifree64 发表于 2011-10-20 10:29:44

给一个比较占用内存资源的代码片段给楼主参考以下
unsigned char buffer;
unsigned char mode;             // mode数组对应非0,闪烁模式显示
// 每2ms调用一次
void display(void)
{
    static unsigned char pos = 0;

    static unsigned char shansuo = 0;
    if(++shansuo >= 200)
      shansuo = 0;

    PORTA = 0xFF;
    if( mode && shansuo < 100 )            
      PORTB = 0;                     
    else
      PORTB = zxm_table];
   
    PORTA = wdm_table;
    if(++pos > 8)
       pos = 0;
}

也请马老师指教,以免我误人子弟了。
页: [1]
查看完整版本: 马老师,我刚买了您的第二版书,就是数码管部分看不懂,希望您给与帮助!!!!!!