C51入门5,动态数码管显示实验

发布者:紫色小猫最新更新时间:2016-10-31 来源: eefocus关键字:C51入门  动态数码管  显示实验 手机看文章 扫描二维码
随时随地手机看文章
实验一:要求:利用动态扫描和定时器1在数码管上显示出从7432开始以1/10秒的速度往下递减直至7398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“ABCD”。到此保持住。

程序:

 //数码动态显示
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x28,0xeb,0x32,0xa2,
0xe1,0xa4,0x04,0xea,
0x00,0x80,0x60,0x25,
0x3c,0x23,0x34,0x74};
uchar temp,t0,t1,bai,shi,ge,flag,flag1;
uint shu;
void init();
void display(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,bai,shi,ge);
  else
   display(10,11,12,13); //显示A,B,C,D 
 }
}
//系统初始化
void init()
{
 shu=432;     //开始数目是432
 temp=0xfe;
 P1=temp;     //数目给位地址
 TMOD=0x11;     //设置定时器0和1的工作方式
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;      //开总中断
 ET0=1;      //开定时器中断0
 ET1=1;      //开定时器中断1
 TR0=1;      //启动定时器中断0
 TR1=1;      //启动定时器中断1
}
//中断0,工作在模式1,控制LED灯
void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 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;
   }
  } 
}
//中断1,工作是模式3,控制数码管
void timer1() interrupt 3
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 t1++;
 if(t1==2)
  {
   t1=0;
   shu--;     //数自减
   bai=shu/100;
   shi=shu%100/10;
   ge=shu%10;
   if(shu==398)
    {
     TR0=0;     //关中断0
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     TR0=1;     //开打中断0
     flag=1;     //标志位为1
     t0=0;
     P1=0xff;
     TR1=0;     //关中断1
    } 
  } 
}
//显示函数
void display(uchar aa,uchar ba,uchar sh,uchar g)
{
        P0=table[aa];    //位选
  P2=0x7f;     //段选
  delay(5);

        P0=table[ba];
  P2=0xbf;
  delay(5);

  P0=table[sh];
  P2=0xdf;
  delay(5);

  P0=table[g];
  P2=0xef;
  delay(5);
}

关键字:C51入门  动态数码管  显示实验 引用地址:C51入门5,动态数码管显示实验

上一篇:C51入门6,串口通信实验
下一篇:C51入门4,蜂鸣器实验

推荐阅读最新更新时间:2024-03-16 15:18

51单片机数码管动态显示
/******************************************* * 本节实验,需要加深理解锁存器,位选线, * 段选线等,以及防止重影的方法;和keil中数 * 组的定义; *另外想让8个数码管同时显示不同的数字, *靠的是程序的快速运行,和人眼的短时间缓冲原理实现的 *本例的延时设定是1ms,可以分别用100ms *等尝试一下 ******************************************/ #include reg52.h #define uchar unsigned char #define uint unsigned int
[单片机]
单片机实验----控制数码管动态显示
本次实验任务如下: 一、动态显示与静态显示的比较 1.什么是动态显示 驱动电路可以使数码管正常显示数据,数码管的驱动方式有两种:动态显示驱动和静态显示驱动。 动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起。 另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。 当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。 2.什么是静态显示 静态显示驱动静态驱动也称直流驱动。 静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。 3.优缺点对比 二、
[单片机]
单片机<font color='red'>实验</font>----控制<font color='red'>数码管</font>的<font color='red'>动态</font><font color='red'>显示</font>
STM32f4---TFTLCD显示实验代码(05)
//不同的 LCD驱动器不同的初始化设置 if(lcddev.id 0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300) //ID 不正确,新增 0X9300判断,因为9341 在未被复位的情况下会被读成9300 { //尝试9341 ID 的读取 LCD_WR_REG(0XD3); lcddev.id=LCD_RD_DATA(); //dummy read lcddev.id=LCD_RD_DATA(); //读到 0X00 lcddev.id=LCD_RD_DATA(); //读取 93 lcddev.id
[单片机]
用51单片机显示动态数码管
#include reg51.h //头文件 sbit SMGA=P2^2;//位定义 sbit SMGB=P2^3; sbit SMGC=P2^4; unsigned int table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管字形码 void delay()//延时函数 { unsigned char a,b; for(a=0;a 20;a++) for(b=0;b 20;b++); } void xshs() //数码管驱动函数 {
[单片机]
单片机学习笔记 —— 8位数码管动态扫描
我们知道,依次只能让一个数码管/led灯亮起来,但是我们可以通过高频动态扫描得到8位数码管同时亮起来,这里介绍如何实现。 一、八位数码管 1、八位数码管原理图 下图为原理图: 段选信号:P0 位选信号:P2 译码使能:P2.3非 (图中已用蓝色框圈出) 2、控制信号 段选信号:一位数码管包含8个二极管,a-g,如图: 8个二极管共阴极,以位选信号作为使能信号 位选信号:位选信号为SEL P2 ,如果位选信号为101,结果译码器译码得到0001 0000(单热点编码方式),选择第五位数码管 显示数字:在位选有效时,通过设置段选信号来设置数值,如段选为P0=10111110时,ABCDEFG对应为10111
[单片机]
单片机学习笔记 —— 8位<font color='red'>数码管</font><font color='red'>动态</font>扫描
51单片机38译码器实现动态数码管控制
51单片机38译码器实现动态数码管控制 代码如下: #include REGX51.H void delay(void) //延时函数 { unsigned char i, j; for (i=0;i 10;i++) { for(j=0;j 10;j++); } } void main(void) { //译码后的选位数组 unsigned char yimaweima ={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7}; //段码数组 unsigned char duanma ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7
[单片机]
51单片机38译码器实现<font color='red'>动态</font><font color='red'>数码管</font>控制
51单片机学习笔记2.动态数码管的使用
原理图 内容 74HC138译码器 数码管 公共端 - 位选线 连在一起的段线 - 段选线 通过控制在不同位选线 不同的段选线通电(段选数据不同)以达到在不同位置显示不同数字的目的 具体看单片机原理图即可 动态显示其实一个时刻只点亮一个数字,在24ms内点亮下一个就会看成是同时亮的 代码 首先是一段转码用的 u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//最高位为小数点,如果需要点亮小数点只需 | (0x80)或是 | 128 然后是显示用的函数
[单片机]
51单片机学习笔记2.<font color='red'>动态</font><font color='red'>数码管</font>的使用
传谷歌实验室开发显示屏无缝拼接技术
   谷歌秘密实验室Google X正在开发一个项目,内容是将较小的显示屏无缝拼接成一个大显示屏   新浪科技讯 北京时间10月4日凌晨消息,据高科技新闻资讯网站Sslashgear报道,谷歌(575.28, 5.20, 0.91%)秘密实验室Google X正在开发一个项目,内容是将较小的显示屏无缝拼接成一个大显示屏。   据悉,这个项目旨在将各种自由形状的小显示屏无缝拼接成一个大显示屏,并可为后者任选方形、圆形或任何其他形状。另据消息人士透露,拼接而成的大显示屏的尺寸也可任选。   报道称,该项目的目标是实现无缝成像,这是研究人员目前致力于解决的挑战性难题。这个Google X项目由前麻省理工学院教授玛丽·洛·杰普森(
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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