找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机中断法的LED显示

[复制链接]
跳转到指定楼层
楼主

使用Protues画原理图并写程序:

用定时器1的方式1实现n个发光管200ms间隔闪烁,用定时器0的方式1实现数码管前两位59s循环计时,后两位显示学号(最后两位)。

学号除6取余数,余数加2.结果是这个led灯的数目n

数码管显示前两位循环计时,加上显示学号后两位。总共显示四位。
中断LED显示.rar (1.94 MB, 下载次数: 4)
部分源程序如下:

#include<reg52.h>             //52系列单片机头文件

#define ucharunsigned char     //宏定义

#define uintunsigned int

sbitdula=P2^6;               //申明U1锁存器的锁存端

sbitwela=P2^7;               //申明U2锁存器的锁存端

sbitled1=P1^0;               //LED灯说明

sbit led2=P1^1;

uchar codetable[]={           //数码管显示编码

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

voiddelayms(uint);

voiddisplay(uchar,uchar);

ucharnum,num1,num2,shi,ge;

void main()                    //主函数

{

  TMOD=0x11;                //设置定时器01为工作方式1(0001 0001)

  TH0=(65536-458720)/256;     //装初值

  TL0=(65536-458720)%256;

  TH1=(65536-458720)/256;     //装初值

  TL1=(65536-458720)%256;      

  EA=1;                       //开总中断

  ET0=1;                      //开定时器0中断

  ET1=1;                      //开定时器1中断

  TR0=1;                      //启动定时器0

  TR1=1;                      //启动定时器1

  while(1)                     //程序在这里不停的对数码管动态扫描同时等待中断发生

  {

     display(shi,ge);

  }

}


voiddisplay(uchar shi,uchar ge)    //显示子函数

{

      wela=1;

      P0=0xfe;                   //送入位选信号

      wela=0;

      dula=1;

      P0=table[shi];               //送入段选信号

      dula=0;

      P0=0xff;                    //消影

      delayms(5);                 //延时5毫秒

      

      wela=1;

      P0=0xfd;

      wela=0;

      dula=1;


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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