ubuntu 8051 数码管

发布者:BlissfulBliss最新更新时间:2024-07-23 来源: cnblogs关键字:ubuntu  数码管 手机看文章 扫描二维码
随时随地手机看文章

/**

  代码功能:

    使数码管动态显示数字,并以十进制进位(计数)

  软件环境:

    ubuntu+sdcc+sublime+stcflash.py

  硬件环境:

    普中V2.0 51单片机开发板

*/

  1 #include '8051.h'

  2 typedef unsigned char u8;

  3 typedef unsigned int u16;

  4 u8 smgduan[]= {

  5 /*0        1      2        3      4        5      6        7 */

  6 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,

  7 /*8        9     A        B     C        D     E        F */

  8 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

  9 

 10 // P0口为数码管的位选的8位输入引脚

 11 // P0 = 0x00;

 12 

 13 

 14 void Delayms(u16 ms);

 15 void shumaguan(u8 n);

 16 void DigDisplay();

 17 

 18 void main()

 19 {

 20     while (1)

 21     {

 22         DigDisplay();

 23     }

 24 }

 25 

 26 

 27 void Delayms(u16 ms)

 28 {

 29     unsigned int i, j;

 30     for(i = ms; i > 0; i--)

 31         for(j = 110; j > 0; j--);

 32     return;

 33 }

 34 

 35 void shumaguan(u8 n)

 36 {

 37     switch(n)

 38     {

 39         case 0:

 40             LSA = 0;LSB = 0;LSC = 0;break;

 41         case 1:

 42             LSA = 1;LSB = 0;LSC = 0;break;

 43         case 2:

 44             LSA = 0;LSB = 1;LSC = 0;break;

 45         case 3:

 46             LSA = 1;LSB = 1;LSC = 0;break;

 47         case 4:

 48             LSA = 0;LSB = 0;LSC = 1;break;

 49         case 5:

 50             LSA = 1;LSB = 0;LSC = 1;break;

 51         case 6:

 52             LSA = 0;LSB = 1;LSC = 1;break;

 53         case 7:

 54             LSA = 1;LSB = 1;LSC = 1;break;

 55     }

 56 }

 57 

 58 void DigDisplay()

 59 {

 60     u8 i1 = 0;

 61     u8 i2 = 0;

 62     u8 i3 = 0;

 63     u8 i4 = 0;

 64     u8 i5 = 0;

 65     u8 i6 = 0;

 66     u8 i7 = 0;

 67     u8 i8 = 0;

 68     

 69 

 70 

 71 

 72     for (i8 = 0; i8 < 10; i8++)

 73         for (i7 = 0; i7 < 10; i7++)

 74             for (i6 = 0; i6 < 10; i7++)

 75                 for (i5 = 0; i5 < 10; i5++)

 76                     for (i4 = 0; i4 < 10; i4++)

 77                         for (i3 = 0; i3 < 10; i3++)

 78                             for (i2 = 0; i2 < 10; i2++)

 79                                 for (i1 = 0; i1 < 10; i1++)

 80                                 {

 81                                     u16 cnt = 10;

 82                                     while (cnt--)

 83                                     {

 84                                         shumaguan(0);       //选中第一个数码管

 85                                         P0 = smgduan[i1];   //给他送一个数字

 86                                         Delayms(1);         //稍微延时一下下

 87                                         shumaguan(1);       //然后切换到第二个数码管。。。如此进行一直到最后一个数码管。。。最后再改变送入数码管的数值。。。再来一遍

 88                                         P0 = smgduan[i2];

 89                                         Delayms(1);

 90                                         shumaguan(2);

 91                                         P0 = smgduan[i3];

 92                                         Delayms(1);

 93                                         shumaguan(3);

 94                                         P0 = smgduan[i4];

 95                                         Delayms(1);

 96                                         shumaguan(4);

 97                                         P0 = smgduan[i5];

 98                                         Delayms(1);

 99                                         shumaguan(5);

100                                         P0 = smgduan[i6];

101                                         Delayms(1);

102                                         shumaguan(6);

103                                         P0 = smgduan[i7];

104                                         Delayms(1);

105                                         shumaguan(7);

106                                         P0 = smgduan[i8];

107                                         Delayms(1);

108                                         P0 = 0x00;

109                                     }

110                                 }

111 }


关键字:ubuntu  数码管 引用地址:ubuntu 8051 数码管

上一篇:8051 vusb Tx实现
下一篇:Ubuntu下sdcc写的一个基于普中V2单片机数码管头文件

推荐阅读最新更新时间:2024-11-12 11:42

AVR128的程序——独立按键控制数码管0~99递增
#include iom128v.h #define uchar unsigned char #define uint unsigned int void Delayus(uint US); void Delayms(uint MS); void display(uchar FirstBit,uchar Num); uchar TempData ; uchar WeiMa = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar led_discode ={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,
[单片机]
基于C8051的状态监测电路设计
  航行体内部控制器和相关重要信号需被监测和记录,作为正常航行及故障判断的重要依据。当航行体内部重要信号缺失时,该电路仍能进行一些相关处理,以确保航行体能有效结束航行。   1 系统硬件结构   基于C8051F040状态监测电路硬件部分由7个主要功能模块组成:监测信号、电子转换电路、达拉斯DS12887时钟模块、并行存储器AM29F 160DT、单片机C8051F040模块、CAN/RS232通讯模块以及驱动输出模块。系统硬件结构框图如图1所示。      电路工作原理是将被监测电路的电压通过TPL2814光耦转换直接与微处理器C8051F040的I/O引脚连接,若相应I/O无电,则将此刻时间和信息存储到AM29F
[单片机]
基于C<font color='red'>8051</font>的状态监测电路设计
8051单片机实战分析(以STC89C52RC为例) | 10 - 外部中断的使用
1 中断系统结构 以下这张图是从中断引脚到中断入口所经过的通道: 从图中不难看出INT0与INT1是中断引脚,其中经过了TCON、IE、IP这些寄存器,因此我们在写程序时得把这些寄存器功能配置好,CPU才会按照我们的想法只执行!下面分别对这些寄存器进行介绍(稍微了解一下即可,忘记的时候再查)。 1.1 TCON寄存器 TCON(Timer Control Register),中文叫定时器/计数器控制寄存器,TCON寄存器是用于中断触发方式设置以及中断标志。 各寄存器位的作用如下: TCON寄存器位 作用 1.2 IE寄存器 IE(Interrupt Enable),中文叫中断允许寄存器,它的作用是控制所有中
[单片机]
<font color='red'>8051</font>单片机实战分析(以STC89C52RC为例) | 10 - 外部中断的使用
51单片机C编程(二、按键控制数码管显示)
#include reg51.h sbit k1=P3^0; //p30定义为第一个按键 sbit k2=P3^1; //p31定义为第二个按键 char tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x02,0xf8,0x00,0x10}; void delay(int x) { int i,j; for(i=x;i 0l;i--) {for(j=255;j 0;j--);} } void main() { int n=0; P0=0xc0; // 初始显示0 while(1) { if(k1==0) //如果
[单片机]
基于DS18DB20的多功能温度测量仪
本文介绍一种多功能温度测量仪,既可以测量环境温度、又能测量人体温度,达到快响应、数字显示温度值,并且具有高温报警的目的。设计实现了一种多用智能温度测量仪。采用传感器为DALLAS 公司的单总线数字式温度传感器DS18B20 及单片机为8051,通过单片机对传感器采集到的数字信号进行计算处理,实现温度的测量、温度数值的数字显示及高温报警等功能。提供了完整的硬件电路图和软件流程图,并详细介绍了软件设计要点及创新点。经实物测试实验,该测量仪既能测量环境温度,又可测量人体温度,具备使用方便、响应快、结果显示直观的特点。 1 硬件电路设计 1. 1 温度传感器 采用DA LLAS 公司的温度传感器DS18B20 作为温度采集器件,D
[单片机]
基于DS18DB20的多功能温度测量仪
8051单片机的控制总线的作用介绍
控制线一共有6条: (1)ALE/ (/PROG):地址锁存允许/编程线,配合P0口引脚的第二功能使用。在访问片外存储器时,8051CPU在P0.7~P0.0引脚上输出片外存储器低8位地址的同时在ALE/ (/PROG)上输出一个高电位脉冲,用于把这个片外存储器低8位地址锁存到外部专用地址锁存器,以便空出P0.7~P0.0引脚线去传送随后而来的片外存储器读写数据。在不访问片外存储器时,8051自动在ALE/ (/PROG)上输出频率为fosc/6的脉冲序列。该脉冲序列可用作外部时钟源或作为定时脉冲源使用 (2)(/EA)/Vpp:允许访问片外存储器/编程电源线,可以控制8051使用片内ROM还是使用片外ROM。若 (/EA)=0,
[单片机]
51单片机之动态数码管显示
首先来看一下开发板上的电路原理图: 本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。 138译码器的真值表如下图G1,G2A,G2B都是选通脚,当G1,G2A,G2B为100的时候138译码器开始工作,A为最低位,B为中间位,C为最高位。CBA=000B时,Y0为1,其他口为0,CBA=001B时,Y1为1,其他口为0,CBA=010B时,Y2为1,其他口为0,CBA=011B时,Y3为1,其他口为0,CBA=100B时,Y4为1,其他口为0,CBA=101B时,Y5为1,其他口为0,CB
[单片机]
51单片机之动态<font color='red'>数码管</font>显示
第6课 数码管静态显示
1、数码管显示原理 数码管是单片机应用系统中常用的一种显示器件,由于其价格低廉、操作简单,而被广泛的应用于各种数字显示系统中,常见的数码管如图1所示。 根据外观的不同,数码管又为分1位数码管、2位数码管、3位数码管、四位数码管等种类,如图2所示。 但不论是几位一体的数码管,其显示原理都是一样的,都是靠内部发光二极管发光来进行显示的。下面我们以1位数码管为例介绍其显示原理。 1、数码管显示的原理 数码管内部的电路如图3所示, 图3 数码管内部电路 图3中,显示一个完整的8字,需要7个小段,外加一个小数点,共8段,分别称为a段、b段、c段、d段、e段、f段、g段、dp段,每段内部都集成了一个发光二
[单片机]
第6课 <font color='red'>数码管</font>静态显示
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved