标题:
这段中断程序表示看不懂,求详细解析 新人望大家给点意见。
[打印本页]
作者:
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
void ET_1() interrupt 1 // 是由中断向量表决定的, 这里用定时器0 是interrupt 1
{
static uchar wei=0x01,i=0; //用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.
static uint j=0; // 这个没有用
TH0=(65536-2000)/256; //定时器T0的高8位重新赋初值
TL0=(65536-2000)%256; //定时器T0的低8位重新赋初值
//以下代码完成数码管动态扫描刷新
P2=0x00; // 解决数码管鬼影, 关闭数码管的位,赋值过程都做好后,再重新打开
P0=duanma[led]; //运用数码管显示字符转换表 提取并转为数码管显示字符
P2=wei; // 打开数码管的位
wei=wei<<1; ////将字符变量wei,循环左移1位 ,重新赋给wei变量。 此外”<<“符号为左移命令符号。
if(++i==8) //自增i 当i的值等于8时
{i=0;wei=0x01;} // 这里用8个位数码管 达到8次后i计数值清零 数码管的位重新赋最右位
}
复制代码
这是运用数码管动态显示的原理,并最终借助于中断系统来完成实用的数码管显示程序。
多个数码管显示数字的时候,我们实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。
这里用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