找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1994|回复: 7
打印 上一主题 下一主题
收起左侧

这段中断程序表示看不懂,求详细解析 新人望大家给点意见。

[复制链接]
跳转到指定楼层
楼主
ID:142317 发表于 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;}
这段中断程序表示看不懂,求详细解析

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:142317 发表于 2016-11-24 17:29 | 只看该作者
特别是static uchar wei,不知道这种定义的意义
回复

使用道具 举报

板凳
ID:99130 发表于 2016-11-25 16:34 | 只看该作者
TH0=(65536-2000)/256;         TL0=(65536-2000)%256;  
回复

使用道具 举报

地板
ID:99130 发表于 2016-11-25 16:35 | 只看该作者
TH0=(65536-2000)/256;         TL0=(65536-2000)%256; 这两句应该是TH0=(65536-5000)/256;         TL0=(65536-5000)%256;才对吧
回复

使用道具 举报

5#
ID:140489 发表于 2017-1-6 15:22 | 只看该作者
static 这个是定义的静态变量,C语言里面有的
回复

使用道具 举报

6#
ID:160316 发表于 2017-1-6 16:29 | 只看该作者

static 这个是定义的静态变量,C语言里面有的
回复

使用道具 举报

7#
ID:155507 发表于 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。

回复

使用道具 举报

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表