动态显示后三位,前六位因数值固定,用数码管直接显示,不于单片机连接。数码管用共阳。main函数部分根据自己情况自行编制 以下为显示部分 uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x
不同的驱动,程序写法不同。如果直接用I/O口驱动,8位数码管就这样写:wei=位选 duan=段选 //断码表 uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,//0,1,2,3,4,0x92,0x82,0xf8,0x80,0x90,//5,
u8 code Student_Id[18] = { NULL,NULL,NULL,NULL,//不显示 0,8,0,0,2,4,0,1,0,9, //学号 NULL,NULL,NULL,NULL//不显示 };u8 Dispbuf[4];//显示缓冲区 u8 flag = 0;//毫秒延时函数 void Delay_
数码管显示方式为动态扫描方式,当P0口送第一个数0的码型到锁存器时,P2送位选地址01H,即Y0=0,只有第一个数码管亮,显示0,其他数码管不显示。当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只
51单片机怎么让数码管显示学号?用汇编语言
你这程序只能显示一位数。看你的程序,是8位数码管显示电路的程序,P0输出段码,而P2.2,P2.3,P2.4接一片138译码器,再由译码器实现位选。
include
delay();P2=0x00;P2=0x04;P1=display_code[2];/// 显示2,修改成你的学号比如3,就把2修改成3即可 delay();P2=0x00;P2=0x08;P1=display_code[2]; /// 显示2,修改成你的学号比如3,就把2修改成3即可
// 单片机数码管动态显示学号1830508(注多位数码管用静态显示电路会很复杂,所以一般多用动态显示),方法有多种,下面是一个仿真例程可以参考。include
单片机数码管静态显示学号1830508,用keil 最好有过程,在图上的过程上修改
延时,再依次输出后面的数码管显示的段码和位码。这样不断循环显示才行的。但显示每一位的延时不能太长了,如你这个延时子程序,改成for(a=0;a<300;a++);就可以,虽然是轮流显示的,但是看起来却是8个数字同时
从最简单的讲,8位数码管可以看成是8个小灯泡(其中一个小灯泡是8后面的小数点)。比如想显示1,则右侧上下两个小灯泡点亮即可。按一定顺序,把8个小灯泡编号,比如ABCDEFGH 当显示不同的数值,比如从0一直到9(实际上
八段数码管显示原理基于电子学中的数码管显示技术。八段数码管由八个独立的段组成,每个段都可以独立地亮或灭,从而能够显示数字和字母。每个段都有一个独立的电极,通过控制电流来控制每个段的亮灭。
动态显示:8个数码管依次显示,首先第1个显示“1”其余7个不点亮,然后第2个显示“2”其余7个不显示……依此类推,循环显示1至8位数字。由于人的眼睛识别闪烁的频率是有范围的,当8个数码管循环显示的频率足够高,人眼
8位数码管是怎么显示的?
如果直接用I/O口驱动,8位数码管就这样写:wei=位选 duan=段选 //断码表 uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,//0,1,2,3,4,0x92,0x82,0xf8,0x80,0x90,//5,6,7,8,9,0x00,0xff};v
假设8个数码管公共端均接地,同时显示1-9\x0d\x0a#include\x0d\x0a#include\x0d\x0a#defineucharunsignedchar\x0d\x0a#defineuintunsignedint\x0d\x0aucharcodeDSY_CODE[]=\x0d\x0a{\x0d\x0a0xc0,0x
include
这个代码是通过keil5编写的,可以下载后通过改动自己姓名和学号再通过progisp下载到单片机芯片中,可让单片机显示出自己的姓名与学号
用51单片机显示学号,这很容易的,凡是动态数码管显示电路就可以实现,8位数码管是完全可以显示不同的8个数,动态显示电路和显示程序,是单片机最典型的,最基本的应用了,学习单片机后是必须掌握的技术。如下仿真图,就是8位
你这程序只能显示一位数。看你的程序,是8位数码管显示电路的程序,P0输出段码,而P2.2,P2.3,P2.4接一片138译码器,再由译码器实现位选。
单片机8位数码管显示9位学号,用KEIL软件显示185306251?
ACALL SEG7 ;取码指针子程序 MOV P0,A ;段码送P0口 CLR P2.0 ;位选 ACALL DLY ;延时1MS,即显示1MS SETB P2.0 ;关显示。 动态显示的方法就是 :取优码,送段码,位选,延时1MS,关显示.MOV A,21H
用51单片机显示学号,这很容易的,凡是动态数码管显示电路就可以实现,8位数码管是完全可以显示不同的8个数,动态显示电路和显示程序,是单片机最典型的,最基本的应用了,学习单片机后是必须掌握的技术。如下仿真图,就是8位
当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只有第二个数码管亮,显示1,其他数码管不显示。即每次只有一个数码管点亮,8个数码管是轮流被点亮的,轮流点亮的间隔时间很短(一般用延时程序延时几个
u8 code Student_Id[18] = { NULL,NULL,NULL,NULL,//不显示 0,8,0,0,2,4,0,1,0,9, //学号 NULL,NULL,NULL,NULL//不显示 };u8 Dispbuf[4];//显示缓冲区 u8 flag = 0;//毫秒延时函数 void Delay_
不同的驱动,程序写法不同。如果直接用I/O口驱动,8位数码管就这样写:wei=位选 duan=段选 //断码表 uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,//0,1,2,3,4,0x92,0x82,0xf8,0x80,0x90,//5,
ACALL DISP AJMP $-2;转上一条反复执行DISP子程序 DISP:MOVA,@R0 MOVCA,@A+DPTR MOV P0,A ;段码送P0口 MOVA,R2 ;位选 MOVP2,A ACALL D1MS ;显示延时1MS MOVP2,#0FFH;关显示 RLA MOVR2,A INCR0 DJNZ
求八段显示管(单片机)显示自己学号。用汇编语言写程序。如:090309
译码器74HC138将位选地址转换成位选信号,例如当前是第5个数码管显示,那么P2口输出位选地址05H,译码器输入CBA=110,输出位选信号Y7-Y0=11101111,其中Y5=0,第5个数码管选通并显示,其它数码管不显示。实验时将J6的
1、首先我们打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并启动器添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。2、导入51单片机的头
不同的驱动,程序写法不同。如果直接用I/O口驱动,8位数码管就这样写:wei=位选 duan=段选 //断码表 uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,//0,1,2,3,4,0x92,0x82,0xf8,0x80,0x90,//5,
u8 code Student_Id[18] = { NULL,NULL,NULL,NULL,//不显示 0,8,0,0,2,4,0,1,0,9, //学号 NULL,NULL,NULL,NULL//不显示 };u8 Dispbuf[4];//显示缓冲区 u8 flag = 0;//毫秒延时函数 void Delay_
如何用51单片机显示学号?
uchar buff[8]={1,2,3,4,5,6,7,8};//假设12345678就是你的学号後8位 uchar table[10]={..............};//0-9的七段码 while(1){for(i=0;i<8;i++){weila=1; //打开位锁存器P0=1<<i; //送位码weila=0; delay_ms(2); duanla=1;//打开段锁存器 P0=table[ 7-i];//送段码 duana=0; delay_ms(2); 这里还可以加其它语句,但不要占用时间太长 扩展资料: 区别: 同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS,和WINBOND等。 常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。 不过在市场化方面,89C51受到了PIC单片机阵营的挑战,89C51最致命的缺陷在于不支持ISP(在线更新程序)功能,必须加上ISP功能等新功能才能更好延续MCS-51的传奇。 89S51就是在这样的背景下取代89C51的,89S51已经成为了实际应用市场上新的宠儿,作为市场占有率第一的Atmel公司已经停产AT89C51,将用AT89S51代替。89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。 参考资料来源:百度百科-51单片机数码管显示学号 ,直接上代码了,把学号改了就可以了ORG 0000HAJMP STARTORG 30HSTART: MOV 60H,#1MOV 61H,#7MOV 62H,#8 //在这里自己该学号,其他地方应该不用动MOV 63H,#2MOV 64H,#8MOV 65H,#6MOV 66H,#2MOV 67H,#9MAIN:MOV A,60H LCALL LOOPMOV P0,#0FEHLCALL DLYMOV A,61H LCALL LOOPMOV P0,#0FDHLCALL DLYMOV A,62H LCALL LOOPMOV P0,#0FBHLCALL DLYMOV A,63H LCALL LOOPMOV P0,#0F7HLCALL DLYMOV A,64H LCALL LOOPMOV P0,#0EFHLCALL DLYMOV A,65H LCALL LOOPMOV P0,#0DFHLCALL DLYMOV A,66H LCALL LOOPMOV P0,#0BFHLCALL D【摘要】 单片机显示学号程序【提问】 数码管显示学号 ,直接上代码了,把学号改了就可以了ORG 0000HAJMP STARTORG 30HSTART: MOV 60H,#1MOV 61H,#7MOV 62H,#8 //在这里自己该学号,其他地方应该不用动MOV 63H,#2MOV 64H,#8MOV 65H,#6MOV 66H,#2MOV 67H,#9MAIN:MOV A,60H LCALL LOOPMOV P0,#0FEHLCALL DLYMOV A,61H LCALL LOOPMOV P0,#0FDHLCALL DLYMOV A,62H LCALL LOOPMOV P0,#0FBHLCALL DLYMOV A,63H LCALL LOOPMOV P0,#0F7HLCALL DLYMOV A,64H LCALL LOOPMOV P0,#0EFHLCALL DLYMOV A,65H LCALL LOOPMOV P0,#0DFHLCALL DLYMOV A,66H LCALL LOOPMOV P0,#0BFHLCALL D【回答】 单片机主要由运算器、控制器和寄存器三大部分构成。其中,运算器由算术逻辑单元(ALU)、累加器、寄存器等构成,首先累加器和寄存器向ALU输入两个8位源数据,其次ALU完成源数据的逻辑运算,最后将运算结果存入寄存器中;控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等构成,是一个下达命令的“组织”,用于协调整个系统各部分之间的运作;寄存器主要有累加器A、数据寄存器DR、指令寄存器IR、指令译码器ID、程序计数器PC、地址寄存器AR等。 在微处理器内部运算器、控制器、寄存器之间是相互连接的,由控制器向各部分发布操作命令,运算器接到命令后进行相应运算,并将运算后结果存入相应的寄存器中。【回答】 【提问】 修改程序,使得数码显示管,显示自己学号的后4位学号是0797【提问】 你是想让数码管显示你的学号是吧【回答】 你只需要修改switch语句里面的数字即可。【回答】 改第一段定义的那四个吗【提问】 是的,你可以试一下【回答】
你仔细查看手册sbuf应该是先发送高位,这样发出去后就反过来了,解决办法是将程序反过来再发送,最简单的是将要发送的值保存到位寻址区,在从位寻找区合并回来发送
#include #define u8 unsigned char #define u16 unsigned int #define NULL 10 //段码数据0~9 u8 code Dispchar[11] = { 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x00 }; //位码数据 u8 code Dispbit[4] = { 0xef,0xdf,0xbf,0x7f }; //学号 u8 code Student_Id[18] = { NULL,NULL,NULL,NULL,//不显示 0,8,0,0,2,4,0,1,0,9, //学号 NULL,NULL,NULL,NULL//不显示 }; u8 Dispbuf[4];//显示缓冲区 u8 flag = 0; //毫秒延时函数 void Delay_Nms( u16 N ) { u16 i,j; for( i=0; i<N; i++ ) for( j=0; j<114; j++ ); } //显示函数 void Display( void ) { u8 Dispbuf[4],i; for( i=0; i<4; i++ )//将学号值赋给显示缓冲区 { Dispbuf[i] = Student_Id[flag+i]; } for( i=0; i<4; i++ )//显示数据 { P2 = Dispbit[i]; P0 = Dispchar[ Dispbuf[i] ]; Delay_Nms(5); P0 = 0x00; } } //定时器初始化函数,50mS定时 void Timer0_Init( void ) { TMOD = 0x01; TH0 = ( 65536 - 50000 ) / 256; TL0 = ( 65536 - 50000 ) % 256; EA = 1; ET0 = 1; TR0 = 1; } //主函数 void main( void ) { Timer0_Init(); P0 = 0xff; P2 = 0xff; while(1) { Display();//显示 } } //定时器0中断函数 void Timer0( void ) interrupt 1 { static u8 Count = 0; TH0 = ( 65536 - 50000 ) / 256; TL0 = ( 65536 - 50000 ) % 256; Count++; if( Count == 20 ) { Count = 0; flag++; if( flag == 14 ) { flag = 0; } } }
现在市面上有很多种类型的单片机比如 :keilC51(编程),protuse(仿真),prote(画板),progisp(下载)。如果你是初学者建议学习51系列,因为网上的学习资源会有很多。51单片机的编译软件现在最流行的是keil c51,你可以用这个软件进行编程和编译。书店里有很多51单片机的书,网上也有很多电子版。建议你从51的汇编语言学起这样会对单片机内部的工作原理有一个较深入的了解。 ⒈Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 ⒉与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的函数库个功能强大的集成开发调试工具,全Windows界面。
单片机编程语言很多,大致分成三类:机器语言、汇编语言、高级语言。机器语言由于繁琐容易出错,大部分用户已经不再便用。 1.单片机的汇编语言 汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少,程序执行效率高,由于它一条指令就对应一条机器码,每一步的执行动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。但是不同的类型的单片机,其汇编语言可能有点差异,所以不易移植,因为他们的指令系统是有区别的。但懂得汇编语言可帮助了解影响川可语言效率的特殊规定。例如,懂得汇编语言指令就可以便用在片内ram作变量的优势,因为片外变量需要几条指令才能设署累加器和数据指针进行存取。同样的,当要求便用浮点数和启用函数时也只有具备汇编编程经验才能避免生成庞大的、效率低的程序,对于这方面的编程,没有汇编语言是做不到的。 2.单片机的C语言 单片机的C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言具有功能丰富的库函数,运算谏磨快,编译效率高,有良好的可移植性,而且可以实现直接对系统硬件的控制。此外,C语言程序具有完整的程序模块结构,从而为软件开发中栗用模块化程序设计方法提供了有力的保障。与汇编相比,有如下优点: 对单片机的指令系统不要求了解,仅要求对51的存储器结构有初步了解,至于寄存器分配、不同存储器的寻址及数据类型等细节均由编译器管理。程序有规范的结构,可分为不同的函数。这种方式可便程序结构化,将可变的选择与特殊操作组合在一起,改善了程序的可读性。 编程及程序调试时间显著缩短,从而提高效率。提供的库包含许多标准子程序,具有较强的数据处理能将已编好程序可容易的植入新程序,因为它具有方便的模块化编程技术。 功能强而有弹性,提供的库包含许多标准子程序,具有较强的数据处理能力,能将已编好程序容易的植入新程序,因为它具有方便的模块化编程技术。 单片机C语言作为一种非常方便的语言而得到广泛的支持,(语言程序本身并不依赖于机器硬件系统,基本上不做修改就可根据单片翻U均不同较快地移植过来。 用单片机c语言进行程序设计,已成为单片机软件开发的一个主流,作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。 拓展资料 单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器(Microcontroller),是把中央处理器、存储器、定时/计数器(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;由于单芯片微电脑常用于当控制器故又名single chip microcontroller,但是目前在中国大陆仍多沿用“单片机”的称呼。
#include #include #define uchar unsigned char #define uint unsigned int #define DataPort P0 #define RS_CLR RS = 0 #define RS_SET RS = 1 #define RW_CLR RW = 0 #define RW_SET RW = 1 #define EN_CLR EN = 0 #define EN_SET EN = 1 sbit RS = P1^3; //定义端口 sbit RW = P1^4; sbit EN = P1^5; sbit wx = P2^6; sbit dx = P2^7; sbit beep = P2^2; unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; /* * 功 能:延时,若干毫秒 * 参 数:毫秒数 * 返回值:无 */ void DelayMs(unsigned int i) //一个延时函数,这个函数在11.0592M晶振下的延时时间大概为1ms { unsigned int j,k; for(j=i; j>0; j--) for(k=114; k>0; k--); } /* * 功 能:延时 * 参 数:延时的数量 * 返回值:无 */ void delay(uint x) { uint a,b; for(a=x; a>0; a--) for(b=10; b>0; b--); } /* * 功 能:显示计时的秒数 * 参 数:无 * 返回值:无 */ void display(uchar d2, uchar d1) { P0 = table[d2]; dx = 1; dx = 0; P0 = 0xfe; wx = 1; wx = 0; delay(5); P0 = table[d1]; dx = 1; dx = 0; P0 = 0xfd; wx = 1; wx = 0; delay(5); } void main() { uchar i, second=0, d1, d2, dat=0xFF; while(1) { DelayMs(1000); second++; dat--; P1 = dat; if(second == 60) { second = 0; } d2 = second / 10; d1 = second % 10; for(i=50; i>0; i--) { display(d2, d1); } } }
数码管连接电路如图1所示,P0口输出码型,P2口输出位选。锁存器74HC573起驱动作用,提供驱动电流供数码管发光。译码器74HC138将位选地址转换成位选信号,例如当前是第5个数码管显示,那么P2口输出位选地址05H,译码器输入CBA=110,输出位选信号Y7-Y0=11101111,其中Y5=0,第5个数码管选通并显示,其它数码管不显示。实验时将J6的左边两个引脚针(1和2)用跳冒连接,锁存器11脚接VCC,关闭锁存功能。 数码管显示方式为动态扫描方式,当P0口送第一个数0的码型到锁存器时,P2送位选地址01H,即Y0=0,只有第一个数码管亮,显示0,其他数码管不显示。当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只有第二个数码管亮,显示1,其他数码管不显示。即每次只有一个数码管点亮,8个数码管是轮流被点亮的,轮流点亮的间隔时间很短(一般用延时程序延时几个毫秒),由于视觉的暂留现象,看到的却好象全都点亮着,这就是动态扫描。 数码管显示数字的码型由数码管的数据脚a~dp决定,图2为数码管的笔段分布图,由于是共阴极的,所以当a~dp为高电平时相应的笔段会亮,电路中P1.0~P1.7分别接数码管的a.b.c.d.e.f.g.dp,得到0~9这10个数字的码型如表1所示。 图2 数码管的笔段分布图 引脚 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1P0.0数字 码型 笔段 dp g f e d c b a 0 0 1 1 1 1 1 1 0 3FH 0 0 0 0 0 1 1 0 1 06H 0 1 0 1 1 0 1 1 2 5BH 0 1 0 0 1 1 1 1 3 4FH 0 1 1 0 0 1 1 0 4 66H 0 1 1 0 1 1 0 1 5 6DH 0 1 1 1 1 1 0 1 6 7DH 0 0 0 0 0 1 1 1 7 07H 0 1 1 1 1 1 1 1 8 7FH 0 1 1 0 1 1 1 1 9 6FH 1 0 0 0 0 0 0 0 小数点80H 只要把上面的相关数,改成学好就可以了。
1、首先我们先打开keil。 2、接着,我们要定义好库函数,void main(){while(1)//不断循环显示{dispaly();}}void dispaly(){P0=smg[1];//选择显示数字几,P1=0x7f;//控制是否点亮数码管。 3、接着,我们加上一条循环语句。delay(5);//显示5毫秒P0=0XFF;//消影P0=smg[2];P1=0xbf;delay(5);P0=0XFF;P0=smg[3]。 4、最后,我们把先前定义的延时语句delayms写好。 5、最后,点击这里进行编译,生成一个hex文件。 6、如果这里无错误警告的话,就说明我们的程序写对了,那我们就可以点亮动态数码管了。