文档库 最新最全的文档下载
当前位置:文档库 › 51单片机-动态数码管-流动显示学号(源程序)

51单片机-动态数码管-流动显示学号(源程序)

51单片机-动态数码管-流动显示学号(源程序)
51单片机-动态数码管-流动显示学号(源程序)

#include

#define uc unsigned char

E[]={128,64,32,16,8,4,2,1};

X[]={~6,48,~6,25,48,48,~6,~6}; sbit W=P0^0;

void xh(uc a)

{

uc i,b;b=a;

for(i=0;i

{

b--,W=1;

P2=~E[b];

P3=~X[i];

W=0,P3=0;

}

}

void main()

{

uc a,m,n;

for(a=1;a<9;a++)

for(m=20-a;m>0;m--)

for(n=100;n>0;n--) xh(a); }

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单片机-数码管

51单片机-数码管 共阴极是指所有发光二极管阴极连接在一起,这个共阴极可以用来做片选。 如图,这里有8个发光二极管,到底哪个亮需要进行片选。段选:8 段数码管 每一段的控制段叫段选位选:就是进行哪个8 段数码管亮的选择TX-1C 使用两 片锁存器74HC573 实现位选和段选这里的D0”7是连在单片机的I/O 口上,当 为高电平时,Q 与D 中的数据一致,遇到负跳变沿时Q 中的数据保持住,D 中 的数据即使变化也不会影响Q。MCUVersion2 使用的是74HC245 和38 译码器 74HC13874HC245 有一个缓冲和驱动的作用,这样可以使led 显示的更加稳定, 数码管显示分动态显示和静态显示,每个数码管的状态都是被不断更新的,利 用的人的视觉暂留,使看上去数值保持在一个固定的位置上,人的视觉是有延 续性的,当一个东西不断变化时,变化的时间小于人眼的视觉暂留时间的话, 人的眼睛会以为这个东西是连续的。静态显示是一幅画面放在那看上去是不动 的而它确实是不动的。动态扫描显示即轮流向各位数码管送出字型码和相应位 选,利用发光管的余晖和视觉暂留作用,使人的感觉好像各位数码管同时都在 显示。静态显示:数码管从左向右依次点亮: #include <reg52.h>void delay(){ int i,j; for(i = 0; i <0xff; i++) for(j = 0; j <0xff; j++) ;} unsigned int code duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07};unsigned int code wei[]={ 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};void main(){ while(1){ int i; P2 = 0x39; for(i = 0; i <8; i++){ P2 = duan[ i]; P1 = wei[ i]; delay(); } } } 想让哪个 数码管亮多少就亮多少:tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

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数码管显示程序>

基于51单片机的数码管简易计算器

基于51/52单片机的简易计算器制作 11级自动化2班 王栎斐宋为为闫巨东 一、题目利用单片机芯片STC89C52、四位八段共阳数码管及已制作好的电路板等器件设计制作一个计算器。 二、任务与要求要求计算器能实现加减乘除四种运算 具体如下 1. 加法:四位整数加法计算结果若超过八位则显示计算错误 2. 减法:四位整数减法计算结果若超过八位则显示计算错误 3. 乘法:多位整数乘法计算结果若超过四位则显示计算错误 4. 除法:整数除法 5. 有清除功能 三、课程设计简述 总体设计思路简述 1.按照系统设计的功能的要求 初步确定设计系统由主控模块、显示模块、键扫描接口 电路共三个模块组成。主控芯片使用STC89C52单片机。 2.键盘电路采用4*4矩阵键盘电路。 3.显示模块采用共阳极数码管构成。 四、硬件电路 五、软件编程部份 #include

#define uchar unsigned char #define uint unsigned int //uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //共阴极 // 0 1 2 3 4 5 6 7 8 9 熄灭- //uchar code loc[]={0xff,0xfe,0xfd,0xfb,0xf7}; //uchar code ero[]={0x79,0x50,0x5c}; uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40}; //共阳极 uchar code loc[]={0x00,0x80,0x40,0x20,0x10}; uchar code ero[]={~0x79,~0x50,~0x5c}; uint n=0,n1=0,n2=0; //赋初值 uchar flag=0; //计算类型选择关键字 void delay(int t); void display(int n); void error(); main() { while(1) { uchar temp; //第一行检测 P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xfe; if(temp!=0xfe) { temp=P3; switch(temp) { case 0xee:n1=0;n2=0;n=0;flag=0;break;

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)

51单片机-八段数码管显示

实验一八段数码管显示 1、实验目的: (1)了解数码管动态显示的原理。 (2)了解74LS164扩展端口的方法。 2、实验要求: 利用实验仪提供的显示电路,动态显示一行数据. 3、实验电路图 LED1LED2LED3LED4LED5LED6 4、实验器材: (1)超想-3000TB综合实验仪 1 台 (2)超想3000仿真器 1 台 (3)计算机 1 台

5、实验连线 无 6、实验说明: (1)本实验仪提供了8段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。6位位码由8155的PA0口输出,经Ua2003反向驱动后,选择相应显示位。 74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,并且实现移位。向显示位选通地址输出高电平就可以点亮相应的显示位。 本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164器件的工作原理。 (2)七段数码管的字型代码表 显示字形 g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 1 0 0 0 0 1 1 0 06h 2 1 0 1 1 0 1 1 6bh 3 1 0 0 1 1 1 1 4fh 4 1 1 0 0 1 1 0 66h 5 1 1 0 1 1 0 1 6dh 6 1 1 1 1 1 0 1 7dh 7 0 0 0 0 1 1 1 07h 8 1 1 1 1 1 1 1 7fh 9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h B 1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h D 1 0 1 1 1 1 0 5eh E 1 1 1 1 0 0 1 79h F 1 1 1 1 71h a b c d e f g dp

基于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)各与一个八位并行口相连; 在同一时间里每一位显示的字符可以各不相同。

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

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

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

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

数码管动态显示实验报告

实验四数码管动态显示实验一 一、实验要求 1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2.在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码 管数据引脚相连,P2.0~P2.3引脚输出选控制信号 3.在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4 二、实验目的 1.巩固Proteus软件和Keil软件的使用方法 2.学习端口输入输出的高级应用 3.掌握7段数码管的连接方式和动态显示法 4.掌握查表程序和延时等子程序的设计 三.实验说明 本实验是将单片机的P1口做为输出口,将四个数码管的七段引脚分别接到P1.0至P1.7。由于电路中采用共阳极的数码管,所以当P1端口相应的引脚为0时,对应的数码管段点亮。程序中预设了数字0-9的段码。由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。因此定义了scan函数,接到单片机的p2.0至p2.3 在实验中,预设的数字段码表存放在数组TAB中,由于段码表是固定的,因此存储类型可设为code。 在Proteus软件中按照要求画出电路,再利用Keil软件按需要实现的功能编写c程序,生成Hex文件,把Hex文件导到Proteus软件中进行仿真。为了能够更好的验证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89C51的一个机器周期包含12个时钟脉冲,而我们采用的是12MHz晶振,每一个时钟脉冲的时间是1/12us,所以一个机器周期为1us。在keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。 四、硬件原理图及程序设计 (一)硬件原理图设计 电路中P1.0到P1.7为数码管七段端口的控制口,排阻RP1阻值为220Ω,p2.0到p2.3为数码管的扫描信号。AT89c51单片机的9脚(RST)为复位引脚,当RST为高电平的时间达到2个机器周期时系统就会被复位;31引脚(EA)为存取外部存储器使能引脚,当EA为高电平是使用单片机内部存储器,当EA为低电平时单片机则使用外部存储器。18、19引脚是接晶振脚。而接地和电源端在软件中已经接好,所以不用在引线。 如下图所示:

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单片机实现数码管99秒倒计时

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。 目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。 定时器定时时间计算公式:初值X=M(最大计时)-计数值。 初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。 M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S 计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。 下面为实现99秒倒计时C语言源程序 /*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/ /*数码管,12M晶振*/ #include #define uchar unsigned char sbit p11=P1^1; //连的是继电器。。 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shiwei; uchar gewei; void delay(unsigned int cnt) { while(--cnt); } void main() { TMOD|=0x01; /*定时器0 16位定时器X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms */ TH0=0xd8; TL0=0xf0; IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器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() {

数码管动态显示的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]; }

用单片机实现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单片机控制4个数码管显示09999

//使用AT89c51单片机控制四个数码管动态显示0-9999 ,12MHz #include void jiayi();//加1函数 void chufa();//除法函数 void xianshi();//显示函数 void delay();//延时函数 sbit P2_0=P2^0;//个位位码 sbit P2_1=P2^1;//十位位码 sbit P2_2=P2^2;//百位位码 sbit P2_3=P2^3;//千位位码 unsigned char qianwei,baiwei,shiwei,gewei; unsigned int count=0; unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-9 void main() { while(1) { jiayi(); chufa(); xianshi(); } } void chufa()//将数字的各个位拆开 { qianwei=count/1000;//千位数 baiwei=count%1000/100; //百位数 shiwei=count%100/10; //十位数 gewei=count%10; //个位数 } void jiayi() { count=count+1; if(count==10000) count=0; } void delay()//延时 { unsigned int i,j; for(i=0;i<10;i++) { for(j=0;j<200;j++); } } void xianshi()//显示当前数值

51单片机数码管0到F动态显示

#include #define uchar unsigned char #define uint unsigned int sbit du=P2^6; sbit we=P2^7; uchar num; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delays(uint); void main() { we=1;//打开U2锁存器 P0=0xc0;//送入位选信号 we=0; while(1) { du=1; P0=table[0]; du=0; P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱 we=1; P0=0xfe; we=0; delays(500); du=1; P0=table[1]; du=0; P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱 we=1; P0=0xfd; we=0; delays(500); du=1; P0=table[2]; du=0; P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱 we=1; P0=0xfb; we=0;

delays(500); du=1; P0=table[3]; du=0; P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱 we=1; P0=0xf7; we=0; delays(500); du=1; P0=table[4]; du=0; P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱 we=1; P0=0xef; we=0; delays(500); du=1; P0=table[5]; du=0; P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱 we=1; P0=0xdf; we=0; delays(500); du=1; P0=table[6]; du=0; P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱 we=1; P0=0xfe; we=0; delays(500); du=1; P0=table[7];

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

数码管显示 一、数码管静态显示 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 , 所以 100 3025Im min 1325Im max =-===-==mA V V an U R K mA V V in U R 一般取Rmin 和Rmax 中间值,330Ω、470Ω、510Ω。 由于P0口内部没有上拉电阻,所以在P0口接排阻,上拉电压。如果没有排阻的话,接上拉电阻时需要考虑数码管的电流,如果太小的话,是驱动不了数码管的。如图3:

发现电流大于5mA时,数码管才能亮,与前面电流最小3mA不符,因此计算数码管电流时使其在10mA-20mA之间,确保能驱动数码管亮。 两个74HC573实现对六位数码管的段选和位选,控制端为LE(第11脚)。 3、思路分析 先使第一个573输出同步,把数据送入573中,然后锁存,第二个573输出同步,打开第一个数码管,这样就把第一个数显示在了第一个数码管上,然后以此类推,把数据送到相应的数码管上显示,进行短暂的延时,在频率快的时候,人的眼睛看的是数码管一直在显示,实际上是以特别快的频率在闪烁。(必须进行一个短暂的延时,延时时间可根据实际情况调整。如果没有延时的话,数码管上的电流在瞬间是达不到LED的导通电流,所以数码管不会显示,经过proteus仿真实验论证确实如此。) 4、动态显示流程图 5、实验总结 在用proteus仿真用573搭载电路的动态数码管显示时,有的数字显示不出来,但是在低频的时候会显示出来,然后频率逐渐变快,数字就没有了,比如:要求六位数码管以次显示123456,结果显示的是1234 6,5是显示不出来的,经过多次调试,发现一般只能显示出来偶数。

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