简介

proteus提供1位、2位、4位、6位、8位数码管,在库中搜索7seg即可查找到所有7段数码管。

如下图,名称中7SEG表示7段数码管,MPXx代表数码管位数,CA表示共阳极,CC表示共阴极。

如下图为6位一体数码管,左侧下方abcdef DP为数码管段选端,右边为公共端。

在电路设计时可采用74HC254增加驱动能力,仿真环境下单片机直接驱动也可以点亮。 

驱动代码

6位数码管驱动C文件:7segX6.c

#include <reg52.h>
#include "seg7x4.h"#define SEG_NUMS  (6)  //数码管个数
//数码管段选端端口
#define SEG_PORT  P0  //数码管公共端引脚
sbit W1=P2^7;
sbit W2=P2^6;
sbit W3=P2^5;
sbit W4=P2^4;
sbit W5=P2^3;
sbit W6=P2^2;uint num=9968;
uchar seg_num[SEG_NUMS] = {0};  //0-5共6个数码管显示的数字
uchar seg_num_point = 0;        //是否显示小数点 1表示显示
//数码管共阳极字形码
//若需要显示小数点则 &0x7F
//若驱动共阴极数码管则按位取反 ~
unsigned char code SMG_Duanma[10] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};void delay(uint t)
{while(t--);
}void smgdisplay(uchar n,uchar dat)
{SEG_PORT=0XFF;switch(n){case 0: W1=1;W2=0;W3=0;W4=0;W5=0;W6=0; break;case 1: W1=0;W2=1;W3=0;W4=0;W5=0;W6=0; break;case 2: W1=0;W2=0;W3=1;W4=0;W5=0;W6=0; break;case 3: W1=0;W2=0;W3=0;W4=1;W5=0;W6=0; break;case 4: W1=0;W2=0;W3=0;W4=0;W5=1;W6=0; break;case 5: W1=0;W2=0;W3=0;W4=0;W5=0;W6=1; break;}SEG_PORT=dat;
}
//修改数码管显示数字
//n 第几个数码管
//dat 显示的数值
void smg_set_num(uchar n,uchar dat)
{if(dat > 9)return;seg_num[n] = dat;
}
//修改数码管显示数字
//n 第几个数码管
//t 1 显示小数点 0:不显示小数点
void smg_set_point(uchar n,bit t)
{if(t)seg_num_point |=  1<<n;elseseg_num_point &=  ~(1<<n);
}//1-10ms定时器中断函数调用此函数刷新显示
void smg_refresh_int(void)
{static uchar i=0;if(seg_num_point&(1<<i))smgdisplay(i,SMG_Duanma[seg_num[i]]&0x7F);elsesmgdisplay(i,SMG_Duanma[seg_num[i]]);i++;if(i>=SEG_NUMS)  i = 0;
}//使用循环调用此函数刷新显示
void smg_refresh(void)
{uchar i=0;for(i = 0;i<SEG_NUMS; i++)smgdisplay(i,SMG_Duanma[seg_num[i]]);}
void smgshuju4(uint dat)
{smgdisplay(1,SMG_Duanma[dat/1000]);delay(200);smgdisplay(2,SMG_Duanma[(dat%1000)/100]);delay(200);smgdisplay(3,SMG_Duanma[(dat%100)/10]);delay(200);smgdisplay(4,SMG_Duanma[dat%10]);delay(200);
}
//高两位显示数字
//dat 显示的数值
//flash 是否闪烁
void smgshujuHeig2(uint dat,uchar flash)
{static uchar flash_time = 0;if(flash>0){flash_time++;if(flash_time > 100){smgdisplay(1,SMG_Duanma[(dat%100)/10]);delay(100);smgdisplay(2,SMG_Duanma[dat%10]&0x7f);delay(100);}else{smgdisplay(1,0xFF);delay(100);smgdisplay(2,0xFF);delay(100);}if(flash_time> 200){flash_time = 0;}}else{smgdisplay(1,SMG_Duanma[(dat%100)/10]);delay(100);smgdisplay(2,SMG_Duanma[dat%10]&0x7f);delay(100);}
}//中间两位显示数字
void smgshujuMid2(uint dat,uchar flash)
{static uchar flash_time = 0;if(flash>0){flash_time++;if(flash_time > 100){smgdisplay(3,SMG_Duanma[(dat%100)/10]);delay(100);smgdisplay(4,SMG_Duanma[dat%10]&0x7f);delay(100);}else{smgdisplay(3,0xFF);delay(100);smgdisplay(4,0xFF);delay(100);}if(flash_time> 200){flash_time = 0;}}else{smgdisplay(3,SMG_Duanma[(dat%100)/10]);delay(100);smgdisplay(4,SMG_Duanma[dat%10]&0x7f);delay(100);}
}
//低两位显示数字
void smgshujuLow2(uint dat,uchar flash)
{   static uchar flash_time = 0;if(flash>0){flash_time++;if(flash_time > 100){smgdisplay(5,SMG_Duanma[(dat%100)/10]);delay(100);smgdisplay(6,SMG_Duanma[dat%10]&0x7f);delay(100);}else{smgdisplay(5,0xFF);delay(100);smgdisplay(6,0xFF);delay(100);}if(flash_time> 200){flash_time = 0;}}else{smgdisplay(5,SMG_Duanma[(dat%100)/10]);delay(100);smgdisplay(6,SMG_Duanma[dat%10]);delay(100);}
}
//显示小数点&0x7f
void smgshuju3(float dat)
{int dat1= dat*10;if(dat>0){smgdisplay(1,SMG_Duanma[dat1/1000]);delay(100);smgdisplay(2,SMG_Duanma[(dat1%1000)/100]);delay(100);smgdisplay(3,0x7f&SMG_Duanma[(dat1%100)/10]);delay(100);smgdisplay(4,SMG_Duanma[dat1%10]);delay(100);}else{dat1 = -dat1;smgdisplay(1,0xBF);  //显示负号delay(100);smgdisplay(2,SMG_Duanma[(dat1%1000)/100]);delay(100);smgdisplay(3,0x7f&SMG_Duanma[(dat1%100)/10]);delay(100);smgdisplay(4,SMG_Duanma[dat1%10]);delay(100);}
}   void delay1(uint tt)
{while(tt--){smgshuju4(num);}
}

h文件

#ifndef __SEG_H_
#define __SEG_H_#define uchar unsigned char
#define uint unsigned intvoid delay(uint t);
void smgdisplay(uchar n,uchar dat);
void smgdisplay_clear(uchar n);
void smgshuju4(uint dat);
void smgshujuHeig2(uint dat,uchar flash);
void smgshujuMid2(uint dat,uchar flash);
void smgshujuLow2(uint dat,uchar flash);
void smgshuju2(uint dat,uchar flash,uchar comm);
void smgshuju3(float dat);
void delay1(uint tt);
void smg_refresh(void);
void smg_refresh_int(void);
void smg_set_num(uchar n,uchar dat);
void smg_set_point(uchar n,bit t);#endif

配合定时器代码

void Timer0Init()
{TMOD|=0x01;//0000 0001,最后2位-工作方式的选择,这里选择16位定时器‘01’TH0 = (65536-10000)/256;  //定时10ms  //高八位赋初值TL0 = (65536-10000)%256;  //低八位赋初值EA=1;//开中断ET0=1;//定时器0的中断运行TR0=1;//运行控制位,置1位为工作
}
void Timer0() interrupt 1
{static unsigned int i=0;static unsigned int j=0;TH0=(65535-1000)/256;   //给定时器赋初值,定时10msTL0=(65535-1000)%256;i++;smg_refresh_int();
}

proteus设计教程-数码管使用方法相关推荐

  1. proteus设计教程-DS1302时钟芯片驱动程序

    时钟芯片DS1302电路图如下,晶振X1的频率为32.768khz 读写时间只需要调用void read_time(),void write_time()两个函数进行操作. 直接读取出来的数据是BCD ...

  2. ai一个线段多个箭头_AI设计教程:艺术笔制作渐变线条海报的方法是什么

    本文由:"学设计上兔课网"原创,图片素材来自网络,仅供学习分享 AI设计教程:艺术笔制作渐变线条海报的方法是什么?来吧,今天我们就来一起制作一张渐变线条数字的海报吧. 如果大家想要 ...

  3. 花了我一个晚上浓缩了一整套阿里资深技术专家设计教程整理出的java架构设计方法

    最近学习了阿里资深技术专家设计教程,颇有收获,总结一下. 1 基本概念和目的   相关资料领取 架构设计的目的是为了解决系统复杂度带来的问题,并不是要面面俱到,不需要每个架构都具备高性能.高可用.高扩 ...

  4. proteus学习教程大全

    proteus学习教程大全 proteus学习资源大全,热衷于分享资料,资源共享,这个proteus也是收集了很久的资料,一直以来学习嵌入式就很枯燥,幸好有一起能够学习和资源共享的小伙伴共同交流技术上 ...

  5. 用linux集成电路版图设计,集成电路版图设计教程2012版本

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?注册 x 集成电路版图设计教程 平装 – 2012年5月22日 曾庆贵 (作者), 姜玉稀 (作者) ...

  6. 大学计算机成绩统计表怎么做,wps怎么制作成绩表 wps设计成绩统计表的步骤方法...

    当我们使用wps统计数据时,如果我们需要制作一个统计成绩的表格,可是怎么制作成绩表吗?其实方法非常的简单,下面教程之家网为大家分享wps设计成绩统计表的步骤方法,不会制作的朋友可以参考下面的步骤方法自 ...

  7. 设计师必读的15个响应式网页设计教程

    @陈子木 响应式设计是由著名网页设计师Ethan Marcotte在2010年5月提出的设计概念,随后席卷前端和设计领域,成为了如今网页设计的大趋势.正如同Ethan所说:"响应式网站设计提 ...

  8. 赛灵思 Xilinx Versal 自适应计算加速平台嵌入式设计教程

    嵌入式设计教程 教程 描述 Versal 自适应计算加速平台 (UG1305) 本教程旨在提供有关将赛灵思 Vivado® Design Suite 流程应用于 Versal™ VMK180/VCK1 ...

  9. 没有基础怎么自学好淘宝美工设计?自学有哪些方法?

    本文由:"学设计上兔课网"原创,图片素材来自网络,仅供学习分享 没有基础怎么自学好淘宝美工设计?自学有哪些方法?大多数人都会觉得,只要掌握了PS,就可以去做淘宝美工了,其实不然,小 ...

  10. banner设圆角_illustrator大气、科技感的Banner设计教程

    illustrator大气.科技感的Banner设计教程 六月 24, 2019 发表于: 视觉设计. 评论 Sponsor 今天和大家分享一个实用的illustrator海报设计教程,主要是实现客户 ...

最新文章

  1. Kernel数据结构移植(list和rbtree)
  2. java实验2词法分析程序设计
  3. des vue 双倍长 解密_[转]单倍长密钥加密和双倍长密钥加密,银联直联终端62域难点详解...
  4. 单片机联网,UIP实现tcp/udp协议
  5. ad 原理图差分线_Altium差分线如何从原理图到PCB布线?
  6. 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
  7. 解决网站请求速度慢的一些方法
  8. 设计模式之Builder
  9. 基于java的rsa加密程序_RSA rsa加密程序,rsa java源码和 rsa的jsp Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...
  10. php下memcache结合数据库
  11. 服务器和linux知识,每天学知识:Windows和Linux服务器差异
  12. flash制作文字笔顺_flash动画课件制作有什么优点
  13. SpringBoot+Mybatis-plus的员工打卡系统
  14. 反射系数、驻波比、S参数之间的关系
  15. Houdini分布式解算渲染,HQueue配置。
  16. xp系统显示无打印机服务器,Xp系统显示“Windows无法打开添加打印机”的处理方法...
  17. 【DSP】离散系统的因果性判断
  18. 均值滤波计算_均值滤波器
  19. 企业微信实现消息本地存档
  20. NVIDA显卡支持的编码器+解码器对应表

热门文章

  1. 卧槽!字节跳动的面试算法题,实在太变态了
  2. 小组学习电子教室等同屏工具调研
  3. Golang + selenium 设置无头浏览器模式
  4. MATLAB数字水印系统
  5. CppCheck C++静态代码检查工具在Visual Studio(VS)下的配置和使用
  6. 使用PHP控制MODBUS-RTU设备
  7. winform遍历bartender_C# 调用Bartender打印的2种方式
  8. Dreamweaver(Dw)2021软件下载及安装教程并创建一个网页
  9. java字符编码转换
  10. 使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master