文档库 最新最全的文档下载
当前位置:文档库 › DS18B20单片机数码管显示原理图和程序文件

DS18B20单片机数码管显示原理图和程序文件

DS18B20单片机数码管显示原理图和程序文件
DS18B20单片机数码管显示原理图和程序文件

最近天气热了,想要是做个能显示温度的小设备就好了,于是想到DIY个电子温度计,网上找了很多资料,结合自己的材料,设计了这个用单片机控制的实时电子温度计。作为单片机小虾的我做这个用了2天时间,当然是下班后,做工不行见谅了。

主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。

先上原理图:

洞洞板布局图:

然后就是实物图了:

附上源程序:程序是别人写的,我只是自己修改了下,先原程序者的无私奉献。

#include"reg52.h"

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P3^4; //温度数据口

sbit wx1=P2^0; //位选1

sbit wx2=P2^1; //位选2

sbit wx3=P2^2; //位选3

sbit wx4=P2^3; //位选4

unsigned int temp, temp1,temp2, xs;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, //共阳数码管 0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};

/******延时程序*******/

void delay1(unsigned int m)

{

unsigned int i,j;

for(i=m;i>0;i--)

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

}

void delay(unsigned int m) //温度延时程序

{

while(m--);

}

void Init_DS18B20()

{

unsigned char x=0;

DQ = 1; //DQ复位 ds18b20通信端口

delay(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay(80); //精确延时大于 480us

DQ = 1; //拉高总线

delay(4);

x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败

delay(20);

}

/***********ds18b20读一个字节**************/

uchar ReadOneChar()

{

unsigned char i=0;

unsigned char dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 高电平拉成低电平时读周期开始

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80; //

delay(4);

}

return(dat);

}

/*************ds18b20写一个字节****************/

void WriteOneChar(unsigned char dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0; //从高电平拉至低电平时,写周期的开始

DQ = dat&0x01; //数据的最低位先写入

delay(5); //60us到120us延时

DQ = 1;

dat>>=1; //从最低位到最高位传入

}

}

/**************读取ds18b20当前温度************/

void ReadTemperature()

{

unsigned char a=0;

unsigned b=0;

unsigned t=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作/

WriteOneChar(0x44); // 启动温度转换

delay(5); // this message is wery important

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度/ delay(5);

a=ReadOneChar(); //读取温度值低位 /

b=ReadOneChar(); //读取温度值高位 /

用单片机实现1位LED数码管显示0-9

单片机课程设计题目1位LED数码管显示0-9姓名陈益明 学号 班级 09电力 指导老师许丽汪厚新

目录 一:实验目的与任务…………………二:实验要求…………………………三:实验内容…………………………... 四:实验器材…………………………五:关于PLC控制LED介绍………. 六:原理图绘制说明…………………七:流程图绘制以及说明……………八:电路原理图与仿真………………九:源程序……………………………十:心得体会…………………………十一:参考文献………………………

一、实验与任务 结合实际情况,编程设计、布线、程序调试、检查与运行,完成一个与接近实际工程项目的课题,以培养学生的实际操作能力,适应生产一线工作的需要。做到能检查出错误,熟练解决问题;对设备进行全面维修。 通过实训对PLC的组成、工作原理、现场调试以及基于网络化工作模式的基本配置与应用等有一个一系列的认识和提高。 利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。 本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键,复位电路和显示电路组成。 二、实验要求 1掌握可编程序控制器技术应用过程中的一些基本技能。 2、巩固、加深已学的理论知识。 3了解可编程控制器的装备、调试的全过程。 4、培养我们综合运用所学的理论知识和基本技能的能力,尤其是培养我们 把理论和实际结合起来分析和解决问题的能力。适应世界生产的需要。 培养出一批既有理论知识又有动手能力的人才。 三、实验内容 1、练习设计、连接、调试控制电路; 2、学习PLC程序编程;

51单片机数码管时钟程序

本人初学51,编写简单时钟程序。仅供参考学习 #include #define uint unsigned int #define uchar unsigned char Uchar code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1 }; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0xef}; void delay(uint); unsigned long i,num,t=1; void main() { TMOD=0X01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1; while(1) { num=i/20;//i为秒位 if(i==1728000)//一天大概是这个秒吧,,,应该是,呵呵。就是世间到24时就归零。 i=0; //也可用下面这个部分来代替上面的。 /*if(i==20) { i=0; num++; if(num==5184000) num=0; }*/ //num=9; P2=7;//P2口为数码管控制端,我的是38译码器控制,就直接对其赋值来控制时,分,秒的显示; P0=table[i%100%10]; delay(t); P2=6; P0=table[i%100/10]; delay(t); P0=table_d[(num%60)%10]; P2=5; delay(t); P0=table[(num%60)/10]; P2=4;

用51单片机在数码管上实现 P.移动

/* P.显示程序*/ /* crystal=12Mhz */ /* P2口位控口,P0口段控口*/ #include"reg52.h" #include /*共阳数码管字型码*/ /*0,1,2,3,4,5,6,7,8,9,p.,灭*/ char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0x8c,0xff}; /*"P."显示代码序号*/ char code find_code[8]={10,10,10,10,10,10,10,10}; /********************************************************/ //函数名:void DelayX1ms(uint count) //功能:延时时间为1ms //调用函数: //输入参数:count,1ms计数 //输出参数: //说明:总共延时时间为1ms乘以count,crystal=12Mhz /********************************************************/ #define uchar unsigned char #define uint unsigned int void DelayX1ms(uint count) { uint j; while(count--!=0) { for(j=0;j<80;j++); } } /*显示函数*/ void disp() { char i,j=0xfe; char k; for(i=0;i<8;i++) { P2=j; k=find_code[i]; P0=dis_code[k]; DelayX1ms(1);

单片机实验——数码管显示

单片机实验——数码管显示

数码管显示 一、数码管静态显示 1、电路图 图1 2、电路分析 该电路采用串行口工作方式进行串行显示实验,串行传输数据为8位,只能从RXD端输

入输出,TXD端用于输出同步移位脉冲。当CPU 执行一条写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行口开始将发送缓冲器SBUF 中的8位数据按照从低位到高位依次发送出去,8位数据发送完毕,发送结束标志TI置1,必须由软件对它清0后才能启动发送下一帧数据。 因此,当输完8个脉冲后,再一次来8个脉冲时,第一帧的8位数据就移到了与之相连的第二个74LS164中,其他数据依此类推。 3、流程图

发送数据 二、数码管动态显示 1、电路图

图2 2、电路分析 R1-R7电阻值计算:一个7-seg 数码管内部由8段LED 组成,因此导通电压和电流与LED 灯相同,LED 导通压降大概在 1.5V-2.2V ,电流3mA-30mA ,单片机的工作电压是5V , 所以 一般取Rmin 和Rmax 中间值,330Ω、470Ω、510Ω。 由于P0口内部没有上拉电阻,所以在P0 口接1003025Im min 1325Im max =-===-==mA V V an U R K mA V V in U R

排阻,上拉电压。如果没有排阻的话,接上拉电阻时需要考虑数码管的电流,如果太小的话,是驱动不了数码管的。如图3: 发现电流大于5mA时,数码管才能亮,与前面电流最小3mA不符,因此计算数码管电流时使其在10mA-20mA之间,确保能驱动数码管亮。 两个74HC573实现对六位数码管的段选和位选,控制端为LE(第11脚)。 3、思路分析 先使第一个573输出同步,把数据送入573中,然后锁存,第二个573输出同步,打开第一个数

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序 时间:2012-09-10 13:52:26 来源:作者: /* 8位数码管显示时间格式05—50—00 标示05点50分00秒 S1 用于小时加1操作 S2 用于小时减1操作 S3 用于分钟加1操作 S4 用于分钟减1操作 */ #include sbit KEY1=P3^0; //定义端口参数 sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit LED=P1^2; //定义指示灯参数 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9 unsigned char StrTab[8]; //定义缓冲区 unsigned char minute=19,hour=23,second; //定义并初始化为12:30:00 void delay(unsigned intt) { while(--cnt); } /******************************************************************/ /* 显示处理函数 */ /******************************************************************/ void Displaypro(void) { StrTab[0]=tab[hour/10]; //显示小时 StrTab[1]=tab[hour%10]; StrTab[2]=0x40; //显示"-" StrTab[3]=tab[minute/10]; //显示分钟 StrTab[4]=tab[minute%10]; StrTab[5]=0x40; //显示"-" StrTab[6]=tab[second/10]; //显示秒 StrTab[7]=tab[second%10]; } main()

51单片机并行口驱动LED数码管显示电路及程序

51单片机并行口驱动LED数码管显示电路及程序 介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路 多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。 显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B 端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED8。位选码由89C52的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这8个数码管看上去几乎是同时显示。

<51单片机并行口驱动LED数码管显示电路> 2 软件编程 该系统的软件编程采用MCS-51系列单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。图2所示是其流程图。具体的程序代码如下:

<51单片机并行口驱动LED数码管显示程序>

DS18B20 单片机数码管显示原理图和程序

最近天气热了,想要是做个能显示温度的小设备就好了,于是想到DIY个电子温度计,网上找了很多资料,结合自己的材料,设计了这个用单片机控制的实时电子温度计。作为单片机小虾的我做这个用了2天时间,当然是下班后,做工不行见谅了。 主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。 先上原理图: 洞洞板布局图: 然后就是实物图了:

附上源程序:程序是别人写的,我只是自己修改了下,先谢谢原程序者的无私奉献。#include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit DQ=P3^4; //温度数据口 sbit wx1=P2^0; //位选1 sbit wx2=P2^1; //位选2 sbit wx3=P2^2; //位选3 sbit wx4=P2^3; //位选4 unsigned int temp, temp1,temp2, xs;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, //共阳数码管0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6}; /******延时程序*******/ void delay1(unsigned int m) { unsigned int i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); } void delay(unsigned int m) //温度延时程序 { while(m--); } void Init_DS18B20() { unsigned char x=0; DQ = 1; //DQ复位ds18b20通信端口 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时大于480us DQ = 1; //拉高总线 delay(4); x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20); } /***********ds18b20读一个字节**************/ uchar ReadOneChar() { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) {

51单片机常用数码管显示程序

51单片机常用数码管显示程序---之汇编篇 2010-07-21 03:35:46| 分类:单片机| 标签:51单片机数码管汇编程序|字号大中小订阅一)显示数据缓存寄存器70H,71H,72H,73H,74H,75H,76H,77H。 START: MOV 70H,#1 MOV 71H,#2 MOV 72H,#3 MOV 73H,#4 MOV 74H,#5 MOV 75H,#6 MOV 76H,#7 MOV 77H,#8 ACALL DISP AJMP START DISP: MOV R1,#70H MOV R5,#0FEH PLAY: MOV P0,#0FFH MOV A,R5 ANL P2,A

MOV A,@R1 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A LCALL DL1MS INC R1 MOV A,P2 JNB ACC.7,ENDOUT RL A MOV R5,A MOV P2,#0FFH AJMP PLAY ENDOUT: MOV P2,#0FFH MOV P0,#0FFH RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;共阳数码管 ; 1MS延时子程序,LED显示用 DL1MS: MOV R6,#14H ; DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET END 二)

START:;ORG 00H MOV 70H,#0C0H;0 MOV 71H,#0F9H;1 MOV 72H,#0A4H;2 MOV 73H,#0B0H;3 MOV 74H,#99H ;4 MOV 75H,#92H ;5 MOV 76H,#82H ;6 MOV 77H,#0F8H;7 ACALL DISP AJMP START DISP: MOV P0,70H CLR P2.7 ACALL DL1MS SETB P2.7 MOV P0,71H CLR P2.6 ACALL DL1MS SETB P2.6 MOV P0,72H CLR P2.5 ACALL DL1MS SETB P2.5 MOV P0,73H CLR P2.4 ACALL DL1MS SETB P2.4 MOV P0,74H CLR P2.3 ACALL DL1MS SETB P2.3 MOV P0,75H CLR P2.2 ACALL DL1MS SETB P2.2 MOV P0,76H CLR P2.1 ACALL DL1MS SETB P2.1 MOV P0,77H CLR P2.0 ACALL DL1MS SETB P2.0 RET

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。 E3最佳答案 下面这个程序是4x4距阵键盘丄ED 数码管显示,一共可以到0-F 显示,你可以稍微 改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #i nclude un sig ned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang 数码管 0-F 代码 void key_delay(void) { int t; for(t=0;t<500;t++); } un sig ned char k; //设置全局变量k 为键盘的键值 键盘延时函数 键盘扫描函数 ***************************** */ //延时函数

void keyscan(void) //键盘初始化 //有键按下? //延时 //确认真的有键按下? //使行线 P2.4 为低电平,其余行为高电平 //a 作为缓存 //开始执行行列扫描 { case 0xee:k=15;break; case 0xde:k=11;break; case 0xbe:k=7;break; case 0x7e:k=3;break; default:P2 = 0xfd; //使行线 P2.5 为低电平,其余行为高电平 a = P2; switch (a)//键盘扫描函数 { unsigned char a; P2 = 0xf0; if(P2!=0xf0) { key_delay(); if(P2!=0xf0) { P2 = 0xfe; key_delay(); a = P2; switch (a)

单片机控制数码管显示设计

毕业设计与论文注意: 1.选题要求:选题内容应与所学专业相关 2.论文正文:字数3000字以上 3.字体:中文为宋体,西文和数字为New Roman,字符间距标准,正文行距为单倍行距(五号字) 4.页面A4,页边距上下2,左边2.5,右2 5.图和表、公式的编号方法:图1-1xxx,图1-2xxx….;表1-1xxx,表1-2xxx;…….(小五号字) 6.页码1、2、3…..居中从正文开始编排 7.开题报告内容包括毕业论文题目的确定、选题的意义、论文综述、论文大纲。字数要求在1000字以上。 8.应列入主要的文献可6篇及以上。 9.章节编号方法应采用分级阿拉伯数字编号方法,第一级为?、?、?等,第二级为??、?金、??等,第三级为?金?、?金金、?金?等,但分级阿拉伯数字的编号一般不超过三级,两级之间用下角圆点隔开,每一级的末尾不加标点。 各层标题均单独占行书写。正文中对总项包括的分项采用⑴、⑵、⑶…单独序号,对分项中的小项采用①、②、③…的序号或数字加半括号,括号后不再加其他标点。

绍兴职业技术学院 毕业论文 (2011届) 单片机控制数码管显示设计 学生姓名 学号 系别 专业指导教师 完成日期

2 / 25 绍兴职业技术学院 毕业设计综合实践任务书 岗位名称 岗位职责 岗位能力要求 课题任务名称 本课题完成的条件 1、按照自己所学的单片机进行设计和开发; 本课题任务要求 <一> 技术应用设计要求 1、从设计实际需要出发,选择设计方案; <二> 进程安排要求 1、熟悉毕业任务书要求。 2、开题,确定设计方案,并进行方案论证。 3、汇编语言,绘制电路路图 4、进行实验,是否能够实现显示控制。 5、撰写毕业论文。 6、指导教师的过程指导和初稿的审评,提出修改意见并反馈。 7、资料整理并上交论文(制作的演示实物或图样成果),参加答辩。 1 / 25 毕业设计(论文)工作进度计划表 计(文)90121234 12341234123412341234123412341234 熟悉毕业任务书要求,或根据岗位1展调研选题和查阅文献资 开题,确定设计方案,并进行方案2 证设计计算、绘图、编制工艺、编制3 工程序、生产制造、装配测试等产品或设计方案(图样)的优化与4 进撰写毕业论文5 指导教师的过程指导和初稿的审评6提出修改意见并反馈。资料整理并上交论文(制作的演示实 7 ,参加答辩。物或图样成果) 8

基于51单片机的LED数码管动态显示

基于51单片机的LED数码管动态显示 LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。当扫描速度达到一定程度时,人眼就分辨不出来了。尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。若数码管的位数不大于8位时,只需两个8位I/O口。 1 硬件设计 利用51单片机的P0口输出段码,P2口输出位码,其电路原理图如下所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“DT.DSN”。在器件选择按钮中单击

“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。 51单片机AT89C51 一片 晶体CRYSTAL 12MHz 一只 瓷片电容CAP 22pF 二只 电解电容CAP-ELEC 10uF 一只 电阻RES 10K 一只 电阻RES 4.7K 四只 双列电阻网络Rx8 300R(Ω) 一只 四位七段数码管7SEG-MPX4-CA 一只 三极管PNP 四只 若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER 和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。 2 软件设计 LED数码管动态显示是一位一位地轮流点亮各位数码管的,因此要考虑每一位点亮的保持时间和间隔时间。保持时间太短,则发光太弱而人眼无法看清;时间太长,则间隔时间也将太长(假设N位,则间隔时间=保持时间X(N-1)),使人眼看到的数字闪烁。在程序中要合理的选择合适的保持时间和间隔时间。而循环次数则正比于显示的变化速度。 LED数码管动态显示的流程如下所示。

单片机实验四 I O显示控制实验(数码管显示实验)

电子信息工程学系实验报告 课程名称:单片微型计算机与接口技术Array 实验项目名称:实验四 I/O显示控制实验实验时间: 班级: **** 姓名:**** 学号:******** 一、实验目的: 1、熟悉keil仿真软件、proteus仿真软件、软件仿真板的使用。 2、了解并熟悉一位数码管与多位LED数码管的电路结构、与单片机的连接方法及其应用原理。 3、学习proteus构建LED数码管显示电路的方法,掌握C51中单片机控制LED数码管动态显示的原理与编程方法。 二、实验环境: 1、Windows XP系统; 2、Keil uVision2、proteus系列仿真调试软件 三、实验原理: 1、LED数码管的结构和原理 LED显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极与共阳极两种。 (a)共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮; (b)共阳极LED显示器的发光二极管阳极并接。 2、七段显示器与单片机接口:只要将一个8位并行输出口与显示器的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,如下表所示。通常将控制发光二极管的8位字节数据称为段选码。 八段选码(显示码)的推导(以共阳数码管显示C为例): 要显示C则a、f、e、d四个灯亮2.为是共阳数码管,则a、f、e、d应送0时亮3.dp-a为11000110B 3、多位数码管的显示:电路结构、动态静态两种实现原理: LED显示器有静态显示与动态显示两种方式。 (1) LED静态显示方式 各位LED的位选线连在一起接地或接+5V;每位LED的段选线(a-dp)各与一个八位并行口相连; 在同一时间里每一位显示的字符可以各不相同。

基于proteus的51单片机仿真实例六十

基于proteus的51单片机仿真实例五十九、1位数码管显示实例 1、数码管实际上是由7个发光二极管组成一个8字形,另外一个发光二极管做成圆点型,这样就构成了一个数码管。所有的8个二级管的正极或者负极都连到一个公共端点上,对于公共端连在正极的数码管,称为共阳极数码管,反之称为共阴极数码管。 根据数码管的内部结构原理,可以很清楚的知道数码管显示数字的原理。 2、由于单片机的IO口的驱动能力有限,而数码管点亮时需要较大的电流,所以在用单片机构成数码管显示系统时,需要增加驱动电路,最简单的驱动电路就是利用三极管的电流放大能力来输出较大的电流, 3、让数码管显示数字的步骤为: 1)使数码管的公共端连到电源(共阳极)或者地(共阴极)上。 2)向数码管的各个段输出不同的电平。 本例使用单个数码管循环显示0-9这10个数字。 4、在keil c51中新建工程ex47,编写如下程序代码,编译并生成ex47.hex文件 #include //包含头文件 //延时函数,延时约200ms void delay(void) { unsigned char i,j; for(i = 0; i < 255;i++) { for(j = 0;j < 255;j++); } } //主函数 void main(void) {

unsigned char i; unsigned char code Tab[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90}; //定义数字0-9的段码表 P2 = 0xfe; //P2.0输出低电平,数码管电源导通 while(1) { for(i = 0;i < 10;i++) //循环10次。数码管循环显示数字0-9 { P0 = Tab[i]; //P0口输出数字0-9对应的段码 delay(); //延时 } } } 5、在proteus中新建仿真文件ex47.dsn,电路原理图如下所示: 需要说明的是在proteus中,查找排阻(不带公共端)和数码管的方法。 查询数码管元件时,输入关键字“7seg-com..”后,就可以看到各种数码管的电路符号。根据需要选择相应数码管即可。排阻的查找方法:查找带公共端的排阻时,输入关键字“respack”即可。 不带公共端的排阻,输入关键字“RX8”即可

51单片机数码管显示电子时钟C程序

#include #define LEDLen 6 ; #define tick10000; #define T100us=(256-100); unsigned char hour,minute,second; unsigned int c100us; xdata unsigned char OUTBIT_at_0x8002; xdata unsigned char OUTSEG_at_0x8004; unsigned char LEDBuf[6]; code unsigned char LEDMAP[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; void DisplayLED() { unsigned char i,j,pos,LED; pos = 0x20 ; for( i=0;i<6;i++ ) { OUTBIT =0; LED=LEDBuf[i]; OUTSEG =LED; OUTBIT = pos; Delay(1); pos>>=1; } } void main() { TMOD=0x02; TH0=T100us; TL0=T100us; EA=1,IT0=1; hour=0; minute=0 second=0; c100us=tick; TR0=1; while(1) { LEDBuf[0]=LEDMAP[hour/10] ; LEDBuf[1]=LEDMAP[hour%10] ;

LEDBuf[2]=LEDMAP[minute/10]; LEDBuf[3]=LEDMAP[minute%10]; LEDBuf[4]=LEDMAP[second/10]; LEDBuf[5]=LEDMAP[second%10]; DISplayLED(); } } void T0_interrupt1 { c100us--; if(c100us==0) { c100us=tick; second++; if(second==60) { second=0; minute++; if(minute==60) { minute==0; hour++; if(hour==24)hour==0; } } } }

51单片机数码管显示时钟(C语言)

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////以下是主文件main.c 的内容 /****************************************************************************** * * 实验名: 万年历实验 * 使用的IO : * 实验效果:1602显示时钟 * 注意: ******************************************************************************* / #include #include"ds1302.h" //数码管IO #define DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Num=0; unsigned int disp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f}; void LcdDisplay(); void Timer0Configuration(); /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main() {

单片机课设数码管显示滚动控制

《单片机设计与实训》 设计报告 题目:数码管滚动显示控制姓名:王伟杰 班级:自动化四班 学号: 2014550430 指导老师:张莹 提交日期: 2016年10月29日

目录 一、设计题目与要求 (4) 1.1设计题目 (4) 1.2设计要求 (4) 二、系统方案设计 (4) 2.1硬件电路设计 (5) 1.单片机最小系统简介 (5) 2.数码管显示电路 (7) 2.3硬件选型及说明 (8) 1. ST89C51单片机 (8) 2. 四位一体七段共阴极显示数码管 (10) 三、系统原理图设计与仿真 (11) 3.1系统仿真图 (11) 3.2系统仿真结果 (12) 四、程序设计 (13) 4.1程序设计 (13) 4.2程序流程图 (15) 五、系统调试 (16) 5.1系统硬件调试 (16) 5.2系统软件调试 (16) 六、总结与体会 (17)

附录一 (19) 附录二 (20) 附录三 (34)

一、设计题目与要求 单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。 1.1设计题目 数码管滚动显示控制 1.2设计要求 自制一个单片机最小系统,包括串口下载、复位电路,采用两个四位一体数码管作为显示器件,通过按钮选择实现四种滚动显示模式,例如从左至右,从右至左,内缩,外扩等,滚动信息可以是数字或有意义的英文字符。 二、系统方案设计

单片机之数码管应用

本文由hdliangzzz贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 单片机系统中常用的显示器有: 发光二极管 LED(Light Emitting Diode)显示器、液晶 LCD(Liquid Crystal Display)显 示器、CRT 显示器等。LED、LCD 显示器有两种显示结构:段显示(7 段、米字型等)和 点阵显示(5×8、8×8 点阵等) 。 一个数码管是由 8 个发光二极管排列而成,想要亮哪个由你编程来控制! 数码管分 共阴极 和 共阳极 两种接法 共阴极 就是发光二极管的阴极接在一起 接地 共阳极 则刚好相反 比如我们要在数码管上显示“1” ,就是要点亮“b” “c”l 两个二极管点亮,这里用共阴极来 举例,大家看发光二极管的阴极都接地了,为低电平,所以,要点亮二极管, ”b” ”c”左 端要接高电平,故填“1” 。 共阳极,则刚好相反,则点亮二极管。 所以根据排列,我们用总线点亮二极管就是 01100000,转换成十六进制就是 0X06 所以 数码管显示“1”的编码就是 0X06. 使用 LED 显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或 字符进行编码。七段数码管加上一个小数点,共计 8 段。因此为 LED 显示器提供的编码正 好是一个字节。EE21 实验板用共阳极 LED 显示器,根据电路连接图显示 16 进制数的编码 已列在下表。 LED 数码显示方式及电路 静态显示方式 LED 显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码 管的段选必须接一个 8 位数据线来保持显示的字形码。 当送入一次字形码后, 显示字形可一 直保持,直到送入新字形码为止。这种方法的优点是占用 CPU 时间少,显示便于监测和控 制。缺点是硬件电路比较复杂,成本较高。 这里我们先讲静态显示 静态显示要用到锁存器来锁存数据,我们现在就来看看芯片,锁存器,数码管是怎么样连接 起来的! ! 通俗的讲: 位选 就是你想让哪个数码管显示 段选 就是你想让你选的某个数码管显示什么数字 所以我们在编程的时候,是先把位选锁存器打开,通过单片机的 P0 口输入数据,即我们想 让哪个数码管亮,然后关闭位选锁存器,锁存我们输入的位选数据; 再打开段选锁存器,再通过 P0 口输入数据,即我们想让我们选定的数码管亮什么数字, 关闭段选锁存器,锁存段选数据。 编程的时候就是按照这样的顺序来的! ! 看这些东西是怎么连接起来的! ! 好了 ,这些我们要是都了解了 ,我们现在就用个程序来解释下,数码管为什么是亮的?? #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit wela=P1^5;//位选定义 sbit dula=P1^4;//段选定义 uchar c; void delay(uint z); unsigned char code Tab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};// 共 阴 极 数 码 管 编码 void main() { while(1) { wela=1;//打开位选 P0=0X1;//选你要打开的数码管 wela=0;//关闭位选 for(c=0;c<16;c++)//设置让数码管从 0 亮到 F { dula=1;//打开段选 P0=Tab[c];//设置你想让数码管亮的数字 dula=0;//关闭段选 delay (1000);//延时 1 秒 } } } void delay(uint z) { uint a,b; for(a=z;a>0;a--) for(b=110;b>0;b--); } 就这样,你已经成功的完成单片机数码管的学习!

用单片机实现1位LED数码管显示0-9

单片机课程设计 题目1位LED数码管显示0-9 姓名陈益明 学号 班级 09电力 指导老师许丽汪厚新 目录 一:实验目的与任务…………………二:实验要求…………………………三:实验内容…………………………... 四:实验器材…………………………五:关于PLC控制LED介绍………. 六:原理图绘制说明…………………

七:流程图绘制以及说明……………八:电路原理图与仿真………………九:源程序……………………………十:心得体会………………………… 十一:参考文献……………………… 一、实验与任务 结合实际情况,编程设计、布线、程序调试、检查与运行,完成一个与接近实际工程项目的课题,以培养学生的实际操作能力,适应生产一线工作的需要。做到能检查出错误,熟练解决问题;对设备进行全面维修。 通过实训对PLC的组成、工作原理、现场调试以及基于网络化工作模式的基本配置与应用等有一个一系列的认识和提高。 利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。 本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键,复位电路和显示电路组成。 二、实验要求 1掌握可编程序控制器技术应用过程中的一些基本技能。 2、巩固、加深已学的理论知识。 3了解可编程控制器的装备、调试的全过程。

4、培养我们综合运用所学的理论知识和基本技能的能力,尤其是培养我们 把理论和实际结合起来分析和解决问题的能力。适应世界生产的需要。 培养出一批既有理论知识又有动手能力的人才。 三、实验内容 1、练习设计、连接、调试控制电路; 2、学习PLC程序编程; 四、元器件清单 五、关于PLC控制LED介绍: PLC可编程控制器:它采用一类可编程的存储器,用于其内部存储程序、执行逻辑运算、顺序控制、定时、计数与算数操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。 用PLC控制LED直接进行数据显示,可以降低成本,使得数据显示直观。 传统数显有两种方法:1、由PLC编制程序进行译码,来控制显示a-g段;2、利用译码组合电路产生a-g各段译码信号实现LED数码管显示。前一种方法逻辑译码关系复杂,后一种方法译码电路冗长,都不利于显示的实现。传统数显逻辑译码关系复杂,而用PLC的位组合元件和译码功能指令方法来实现

数码管动态显示的51单片机时钟设计

一看就会,适合初学者参考 T0,T1同时开中断,和别人的有点不一样 源程序如下 //数码管设计的可调电子钟 //K1,K2分别调整小时和分钟 #include<> #include<> #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99, //共阳段码 0x92,0x82,0xF8,0x80,0x90,0xFF}; uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0}; //显示缓存uchar Scan_BIT; //扫描位,选择要显示的数码管 uchar DSY_IDX; //显示缓存索引 uchar Key_State; //P1端口按键状态 uchar h,m,s,s100; //十分秒,1/100s void DelayMS(uchar x) //延时 { uchar i; while(x--) for(i=0;i<120;i++); } void Increase_Hour() //小时处理函数 { if(++h>23)h=0; DSY_BUFFER[0]=DSY_CODE[h/10]; DSY_BUFFER[1]=DSY_CODE[h%10]; } void Increase_Minute()//分钟处理函数 { if(++m>59) { m=0;Increase_Hour(); } DSY_BUFFER[3]=DSY_CODE[m/10]; DSY_BUFFER[4]=DSY_CODE[m%10]; }

相关文档
相关文档 最新文档