基于51单片机数码管的代码例子

发布者:cloudy德德最新更新时间:2015-11-18 来源: eefocus关键字:51单片机  数码管  二极管 手机看文章 扫描二维码
随时随地手机看文章
#include

#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={ //编码表  code为把程序放入ROM区
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
uchar temp,t0,t1,bai,shi,ge,flag,flag1; //flag  flag1 为2个标志位
uint shu;
void init();
void display(uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uint z)
{
 uint t1,y;
 for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}
void main()
{
 init();
 while(1)
 {
  if(flag1!=1)
   display(7,6,5,bai,shi,ge);
  else
   display(16,17,18,18,19,20); 
 }
}

void init()
{
 shu=432;
 temp=0xfe;
 P1=temp;
 TMOD=0x11; //初始化这里用了2个定时器
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%6;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%6;
 EA=1;
 ET0=1;
 ET1=1;
 TR0=1;
 TR1=1;
}

void timer0() interrupt 1    //timer0 定时到处理函数 中断处理函数
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%6;
 t0++;
 if(flag!=1)
  {
  if(t0==10)
   {
    t0=1;
    temp=_crol_(temp,1);
    P1=temp;
   }
  }
 else
  {
   if(t0%4==0)
    P1=~P1;
   if(t0==60)
   {
    TR0=0;
    P1=0xff;
    flag1=1;
   }
  
}

void timer1() interrupt 3     //timer1的定时处理函数, 中断处理函数
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%6;
 t1++;
 if(t1==2)
  {
   t1=0;
   shu--;
   bai=shu/100;
   shi=shu0/10;
   ge=shu;
   if(shu==398)
    {
     TR0=0;
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%6;
     TR0=1;
     flag=1;
     t0=0;
     P1=0xff;
     TR1=0;
    
  
}

void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g)
{
        dula=1;
  P0=table[aa];
  dula=0;
  P0=0xff;   //防止位选的时候其他几个数码管有残影  0xff 都关掉了,在赋值位选
  wela=1;
  P0=0xfe;
  wela=0;
  delay(1);

        dula=1;
  P0=table[bb];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfd;
  wela=0;
  delay(1);

       dula=1;
  P0=table[cc];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfb;
  wela=0;
  delay(1);
        dula=1;
  P0=table[ba];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xf7;
  wela=0;
  delay(1);

  dula=1;
  P0=table[sh];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xef;
  wela=0;
  delay(1);

  dula=1;
  P0=table[g];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xdf;
  wela=0;
  delay(1);
}

 

以上代码来源于网络,仅供参考,我看了遍觉得可以学学。

关键字:51单片机  数码管  二极管 引用地址:基于51单片机数码管的代码例子

上一篇:c51闹钟程序
下一篇:51单片机的脉冲控制器

推荐阅读最新更新时间:2024-03-16 14:40

51单片机:定时器与中断系统的运用
#include regx52.h void Delay(int time) { while(time--) //while循环一次需要10us { } } void Timer0Init(void) //1毫秒@11.0592MHz { TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0x66; //设置定时初值 TH0 = 0xFC; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; EA = 1;
[单片机]
<font color='red'>51单片机</font>:定时器与中断系统的运用
51单片机总线与非总线的程序对比
简介:三总线简称ADC,这总是让我想起ADC的芯片,A是地址总线,D是数据总线,C是控制总线,是控制片外ROM、RAM和I/O的。 #include #include #define uchar unsigned char #define uint unsigned int uchar code table = The distance is ; uchar code table1 = 00.0cm ; sbit shuru=P1^0; sbit yidianling=P1^0; sbit yidianyi=P1^3;//延时 void delay(uint z) { uint x,y;
[单片机]
<font color='red'>51单片机</font>总线与非总线的程序对比
51单片机C语言编程中对单片机绝对地址访问的两种方法
在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间。 C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定。 为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用扩展关键字“at”、指针、预定义以及连接定位控制命令。 在这些方法中,本人认为最简单而有效的方法是用“ _at_ ”关键字来对指定变量存储器空间绝对地址来指定。一般格式如下: 数据类型 标识符 _at_ 地址常数 其中: (1).存储器类型: idata、data、xdata等C51能够识别的所有类型,最好不要省略。 (2).数据类型: 可以用in
[单片机]
基于51单片机的两相步进电机控制系统
硬件设计 代码设计 #include MAIN.H #include LCD1602.h #include PCF8591.h unsigned char code FFW_X ={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //X反转顺序 unsigned char code FFZ_X ={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //X正转顺序 unsigned char code FFW_Y ={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}; //Y反转顺序 unsigned cha
[单片机]
基于<font color='red'>51单片机</font>的两相步进电机控制系统
51单片机驱动16×16LED点阵显示动画汉字汇编程序
电路图就不贴出来了16×16LED点阵的典型接法。这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子. ORG 0000H ST: MOV A,#0FFH ;初始化 MOV P1,A MOV P2,A MOV P3,A MOV P0,A CLR A MOV R0,#50H ;显示缓存清0 MOV R1,#20H ;控制清0的次数 ST0: MOV @R0,A INC R0 DJNZ R1,ST0 ;正文显示 CHINESE: MOV DPTR,#TAB1 ;查表指针指向TAB1 LCALL
[单片机]
STM32三线控制八个发光二极管(74HC595)
STM32三线控制八个发光二极管是典型的IO扩展应用,思路和学习51单片机时一致,下面直接上图和代码! 简述: 1.74HC595D这里使用的5V供电,和STM32间通过MOS管做电平转换处理; 2.74HC595D使用11、12、14脚 PIN11- SHCP shift register clock input 移位时钟 PIN12- STCP storage register clock input 锁存时钟 PIN14- SI serial data input 串行数据 代码: #include 74HC595D.h #include delay.h u8 CHx_LED;//指示灯控制字 111
[单片机]
STM32三线控制八个发光<font color='red'>二极管</font>(74HC595)
stc51单片机硬件SPI驱动nrf24l01程序
stc51系类单片机大多数带SPI模块,例如STC12C5608AD,就带有SPI口,可以直接用此SPI口驱动nrf24l01,省去模拟SPI的麻烦。 spi初始化代码如下: void SPI_Init(void) { SPSTAT |= 0XC0; // 清高两位, SPCTL = 0XD0; // 设置为主模式,开SPI } spi收发数据代码如下: uchar SPI_RW(uchar tr_data) { uchar i=0; SPSTAT |= 0Xc0; // 清高两位, SPDAT=tr_data; while(((SPSTAT&0X80)!=0X80)&&(i 20)) { i++; delay_ms(1)
[单片机]
8051单片机由什么组成 8051单片机有多少管脚
8051单片机介绍 8051单片机是一款广泛应用于嵌入式系统中的8位单片机,由Intel公司在1980年推出,是当时业界最先进的8位单片机之一,也是单片机领域的经典之作。 8051单片机具有较低的功耗、高度集成、强大的功能和易于编程等优点,广泛应用于各种嵌入式系统中,如家电控制、自动化设备、工业控制、仪器仪表、汽车电子、通讯设备、电子游戏等领域。 8051单片机内部包含了CPU、存储器、定时器、串行通信接口、并行输入输出端口等基本模块,同时还具有多种外设和扩展接口,可以根据不同应用需要进行灵活配置和扩展。 在编程方面,8051单片机支持多种编程语言和开发工具,如C语言、汇编语言、BASIC语言等,并且有许多成熟的开源或商业的集
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved