标题: 这段中断程序表示看不懂,求详细解析 新人望大家给点意见。 [打印本页]

作者: Demonss    时间: 2016-11-24 17:28
标题: 这段中断程序表示看不懂,求详细解析 新人望大家给点意见。
void ET_1() interrupt 1
{
        static uchar wei=0x01,i=0;
        static uint j=0;
        
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;        
        
        P2=0x00;
        P0=duanma[led];
        P2=wei;
        wei=wei<<1;
        if(++i==8){i=0;wei=0x01;}
这段中断程序表示看不懂,求详细解析


作者: Demonss    时间: 2016-11-24 17:29
特别是static uchar wei,不知道这种定义的意义
作者: 越快乐越堕落    时间: 2016-11-25 16:34
TH0=(65536-2000)/256;         TL0=(65536-2000)%256;  
作者: 越快乐越堕落    时间: 2016-11-25 16:35
TH0=(65536-2000)/256;         TL0=(65536-2000)%256; 这两句应该是TH0=(65536-5000)/256;         TL0=(65536-5000)%256;才对吧
作者: lids    时间: 2017-1-6 15:22
static 这个是定义的静态变量,C语言里面有的
作者: 18815796398    时间: 2017-1-6 16:29

static 这个是定义的静态变量,C语言里面有的
作者: angmall    时间: 2017-1-7 10:15
  1. void ET_1() interrupt 1 // 是由中断向量表决定的, 这里用定时器0 是interrupt 1
  2. {
  3.         static uchar wei=0x01,i=0; //用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.
  4.         static uint j=0; // 这个没有用
  5.        
  6.         TH0=(65536-2000)/256; //定时器T0的高8位重新赋初值
  7.         TL0=(65536-2000)%256; //定时器T0的低8位重新赋初值
  8.       
  9.         //以下代码完成数码管动态扫描刷新
  10.         P2=0x00; // 解决数码管鬼影, 关闭数码管的位,赋值过程都做好后,再重新打开
  11.         P0=duanma[led]; //运用数码管显示字符转换表 提取并转为数码管显示字符
  12.         P2=wei; // 打开数码管的位
  13.         wei=wei<<1; ////将字符变量wei,循环左移1位 ,重新赋给wei变量。 此外”<<“符号为左移命令符号。
  14.         if(++i==8) //自增i 当i的值等于8时
  15.         {i=0;wei=0x01;} // 这里用8个位数码管 达到8次后i计数值清零 数码管的位重新赋最右位
  16. }
复制代码



这是运用数码管动态显示的原理,并最终借助于中断系统来完成实用的数码管显示程序。

多个数码管显示数字的时候,我们实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。

这里用static把wei定义成了一个静态局部变量。静态局部变量和普通局部变量一样,只能在定义它的函数里面使用它。普通局部变量在程序退出函数以后,就会释放,静态局部变量则不会被释放,它在整个生命周期都存在。下次读到是上次修改后的值。

我认为这个是针对于static定义的局部变量而言的,除了只能在定义它的函数内局部使用外其他的和全局变量是一样的(只在第一次调用时初始化,用完后空间不会释放,已存值不会改变)。比方说以上的 i 在第一次调用时被初始化为0.然后自加为1,那么第二次调用时 i 的初始值就是1,运行完就是2。


作者: xwqx    时间: 2017-1-19 11:21
static定义为静态变量,中断函数改变变量值后,再下次进入中断函数时,该变量值还是之前值。uchar等于unsigned char无符号字符变量。开头应有对uchar的声明为unsigned char。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1