单片机数码管仿真设计
(九):proteus仿真辅助数码管的学习
(九):Proteus仿真辅助数码管的学习数码管又称LED数码管,它是由7段或8段LED构成的显示器件。
有共阴极和共阳极两种。
按其显示方式则可分为静态显示方式和动态显示方式两种。
关于数码管的其他知识请参阅相关参考文献,此处不作讨论。
下面我们将主要讲述数码管显示的仿真。
1.静态显示方式静态显示方式较为简单,编程十分容易,但占用IO口线较多。
实际使用中不太多见。
下面我们就通过一个简单的例子来予以说明。
例1.单片机的P2口接一个共阳极数码管,利用该数码管显示从0到9,然后返回到0的循环。
该例子较为简单,源文件如下图:源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。
下面我们编辑电路图。
此例的电路图十分简单,只需将一个共阳极数码管连到单片机的P2口即可。
数码管使用关键词“7Seg”进行查找。
可以看到有很多结果,注意区分共阳极“Anode”和共阴极“Cathode”即可。
这里我们选用较为简单的“7SEG-COM-ANODE”数码管。
最后得到的电路图如下图所示:绘制好电路图,我们就可以将前面所生成的源代码装入单片机,然后点击仿真按钮进行仿真。
可以看到数码管显示的数字按照我们程序中设定的要求进行变化着,仿真中的一个画面如上图所示。
2.动态显示方式动态显示方式是一种相对较为高级的显示方式,它编程较为复杂,但占用IO口线少,达到了节约硬件资源的目的,实际使用中较多利用。
下面我们也利用一个实例来详细说明这种显示方式。
例2.数码管动态显示方式。
单片机P2口接一个二位数码管的8位段码线,P3口的低二位接数码管的两位位码线。
程序使得二位数码管做0到99的循环显示。
该例源文件如下图所示:源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。
接下来我们绘制电路图。
此例电路图比较简单,如下图所示,但有几点需要注意:(1)单片机的IO口的驱动能力有限,所以此例我们选用了大功率晶体管驱动电路,即图中的两个NPN三极管,单片机通过控制它们的通断来达到控制位码的目的。
基于单片机的LED数码管实验设计程序(附电路原理图)
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++);
}
void main( )//主函数
{
while(1) //无限循环
{
P3=0x7f; //P3.8引脚输出低电平,L8点亮
P0=0x06; //数字1的段码
delay();
P3=0xbf ; //P3.7引脚输出低电平,L7点亮
void main(void)
{
TMOD=0x01; //使用定时器T0
EA=1; //开中断总允许
ET0=1; //允许T0中断
TH0=(65536-46083)/256; //定时器高八位赋初值
TL0=(65536-46083)%256; //定时器低八位赋初值
TR0=1;
int_time=0; //中断计数变量初始化
void interserve(void ) interrupt 1 using 1 //using Time0
{
int_time++;
if(int_time==20)
{
int_time=0; //中断计数变量清0
second++; //秒计数变量加1
}
if(second==60)
{
second=0; //如果秒计满60,将秒计数变量清0
}
}
//********************************************************
//函数功能:定时器T0的中断服务程序
//*******************************************************
基于51单片机的74HC164驱动六位数码管显示程序与仿真
P2=0xff; //数码"灭"
}
}
main()
{
separateData(123456);
while(1)
{
display();
}
}
DS_data[2]=dat/100%10;
DS_data[3]=d4]=dat/10000%10;
DS_data[5]=dat/100000%10;
}
void write_164(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
sbit MOSI=P1^1;//符号DSA引脚1数据输入符号DSB引脚2数据输入
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴数码管
基于51单片机的74HC164驱动六位数码管显示程序与仿真
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//74HC164
sbit CLK=P1^0;//符号CP引脚8时钟输入(低电平到高电平边沿触发)
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
基于单片机的数码管显示的K型热电偶温度计的设计与仿真
武汉理工大学毕业设计(论文)基于单片机的数码管显示的K型热电偶温度计的设计与仿真学院(系): 信息工程学院专业班级: 信息工程xxxx班学生姓名: xx指导教师: xx学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。
本人完全意识到本声明的法律后果由本人承担。
作者签名:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权省级优秀学士论文评选机构将本学位论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
本学位论文属于1、保密囗,在年解密后适用本授权书2、不保密囗。
作者签名:年月日导师签名:年月日摘要本文主要介绍了基于热电偶温度传感器的测温系统的设计。
利用转换芯片MAX6675和k型热电偶,将温度信号转换成数字信号,通过模拟SPI的串行通信方式输送数据,在通过单片机处理数据,最后由数码管显示数据。
本文采用了带有冷端补偿的温度转换芯片MAX6675、K型热电偶、89C51单片机、数码管等元器件设计了相应温度采集电路、温度转换电路、温度数码管显示电路。
结合硬件电路给出了相应的软件设计,测温精度可达到0.25℃。
本系统的工作流程是:首先热电偶采集温度,数据经过MAX6675内部电路的处理后送给单片机进行算法处理,最后通过数码管电路显示出测量温度。
本设计最后对系统进行了proteus的调试和仿真,实现了设计的要求。
关键词温度传感器热电偶热时间常数冷端补偿ABSTRACTThis design describes the thermocouple temperature sensor based on the rapid temperature measurement system.The temperature signal is converted into digital signals by useing conversion chip max6675 and k-type thermocouple, conveying data via serial communication simulation spi in processing the data through the microcontroller, the final data from the digital tube displayThis design uses a temperature conversion chip MAX6675,K-type thermocouple, 89C51microcontroller, LED and other components, design corresponding temperature acquisition circuit, temperature converter circuit, the LED display circuit. With the hardware give out The corresponding software design, temperature measurement accuracy up to 0.25 ℃.The system works is: first acquisition thermocouple temperature data through the Treatment of the of the MAX6675 internal circuit and be then sent to 89C51 Aim for rapid algorithm processing. Finally, the LED circuit shows the measurement temperature values. In the last, the design of the system was proteus debugging and simulation,achieve the design requirements.KEY WORDS Temperature sensor Thermocouple Thermal time constant Cold junction compensation目录摘要 (III)ABSTRACT (IV)第1章绪论 (1)第2章系统原理概述 (2)2.1 热电偶测温基本原理 (2)2.2 热电偶冷端补偿方案 (2)2.2.1 分立元气件冷端补偿方案 (2)2.2.2 集成电路温度补偿方案 (3)2.2.3 方案确定 (4)2.3硬件组成原理 (4)2.4软件系统工作流程 (4)第3章元件和软件介绍 (6)3.1 单片机选择及最小系统 (6)3.2 热电偶介绍 (7)3.2.1 K型热电偶概述 (7)3.3 数字温度转换芯片MAX6675简介 (7)3.3.1 冷端补偿专用芯片MAX6675性能特点 (8)3.3.2 冷端补偿专用芯片MAX6675温度变换 (9)3.4 KEIL软件仿真软件介绍 (9)3.5 PROTEUS硬件仿真软件介绍 (10)第4章程序设计及硬件仿真 (11)4.1 数据的采集 (11)4.2 数据传输部分 (11)4.3 数据处理部分 (14)4.3.1 数据转换 (15)4.3.2 进制转换 (17)4.4 显示部分程序及仿真 (19)第5章系统仿真 (23)结论 (25)参考文献 (26)附录 (27)致谢 (34)第1章绪论温度是反映物体冷热状态的物理参数,对温度的测量在冶金工业、化工生产、电力工程、机械制造和食品加工、国防、科研等领域中有广泛地应用。
Proteus软件设计单片机控制单个数码管
程序设计
比较:控制LED设计 → 控制数码管设计
(3)多个LED VS 多个数位(查表方式) : 复述:P1控制一个LED闪烁的程序结构 问题:如果改成控制数码管的某个数位?
8
实验
1、用Proteus设计:单片机P1口控 制一个共阳极数码管的电路 2、编写程序: (1)控制一个7SEG的一个数位的 闪烁; (2)从0~9、A、B、C、D、E、F 的循环显示;
DJNZ R5,$ DJNZ R4,D1 RET END
一个共阳数码管一个码位的闪烁程序 ORG 0000H
START:MOV P1,#0C0H ACALL DELAY MOV P1,#0FFH ACALL DELAY SJMP START
DELAY:MOV R4,#0FFH D1: MOV R5,#0FFH
e
c
d
dp
e d GND c dp
R8 a b c d e f g dp
共阴极连接
2
Proteus中的数码管
共阳极
7SEG-MPX1-CA
共阴极
7SEG-MPX1-CC
? 数字形式的编码
3
十六进制数字型代码表
字型 0 1 2 3 4 5 6 7 8
共阳极代码 共阴极代码
C0H
3FH
F9H
06H
分 DELAY:MOV R7,#0FFH 析 D1: MOV R6,#0FFH
D2: DJNZ R6,D2
D2: DJNZ R6,D2
TAB:
DJNZ R7,D1 RET DB 11111110B ……. DB 0FFH
DJNZ R7,D1
RET
TAB: DB 0C0H,0F9H,0A4H
基于单片机数码管电子闹钟仿真设计
基于单⽚机数码管电⼦闹钟仿真设计#include <regx51.h>#include <intrins.h>sfr AUXR = 0x8e;/*数码管显⽰字符转换表*/unsigned char tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x39};signed char num[] = {10,10,10,10,10,10,10,10}; //数码管显⽰缓冲区signed char timeclock[] = {0,0,11,0,0,11,0,0}; //闹钟时间unsigned char TRH0,TRL0; //T0重载值的⾼字节和低字节bit clock = 0; //闹钟时间到标志位bit flag = 0; //1s闪烁标志位bit flag200ms = 0; //200ms定时标志位bit timesetup = 0; //时间设置标志位bit clocksetup = 0; //闹钟设置标志位unsigned position = 0; //设置⼩时,分钟,秒标志位(‘1’⼩时,‘2’分钟,‘3’秒)unsigned char Temp; //温度值unsigned char Time[5]; //时间值void key(); //按键判断执⾏函数void Ds1302_Display(); //时间显⽰函数void Ds18b20_Display(); //温度显⽰函数extern void Ds1302_Init(); //DS1302初始化函数void Ds1302_Time(unsigned char *time); //带参数的向DS18B20写时间extern void Write_Ds1302_Byte(unsigned char temp); //向DS1302写⼊数据extern unsigned char Read_Ds1302 (unsigned char address); //从DS1302读取数据extern unsigned char DS18B20_Temp(); //读取DS18B20温度值。
1位数码管Proteus仿真实验方法
MAIN: MOV R0,#0 MOV DPTR,#TABLE MAIN1: MOV A,R0 MOVC A,@A+DPTR MOV P2,A CALL DELAY INC R0 CJNE R0,#10,MAIN1 MOV R0,#0 JMP MAIN
DELAY: MOV R2,#20 X2:MOV R3,#40 X1:MOV R4,#250 DJNZ R4,$ DJNZ R3,X1 DJNZ R2,X2 RET
TABLE: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 通过对比上述两个程序,可以发现,其实第二个程序没有第一个程序短太多, 但是第二个程序的拓展性比第一个程序好,只要修改程序中的几个参数,程序行 没有增加,就可以将显示内容修改为 0-9、A-F。而程序 1 如果想实现相同的功 能,只能继续增加程序行。因此在进行编程的时候,一定要根据程序的特点,选 择不同的编程形式,选择了恰当的编程形式,能够很大程度上的简化程序。 也可以使用 C 语言进行编程,其编程思路与汇编语言类似,这里不再赘述。 参考程序如下: #include <reg52.h> #define uchar unsigned char
DELAY: MOV R2,#20 X2:MOV R3,#40 X1:MOV R4,#250 DJNZ R4,$ DJNZ R3,X1 DJNZ R2,X2 RET
END 这种编程方法的优点是,程序简单,适合新手使用。程序修改容易,可以直 接进行任意修改以及增加。其缺点是程序冗长,显示内容较多时,程序书写工作 量大。 另外一种编程方法是查表发,将需要显示的内容预先写入单片机片内 ROM 中,当需要哪个段码直接从 ROM 中读取,并送至 I/O 口进行显示。这种方法编 写的程序较上述程序要简单很多。参考程序如下: ORG 0H JMP MAIN ORG 30H
基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
39 38 37 36 35 34 33 32
21 22 23 24 25 26 27 P2.6 28 P2.7
10 11 12 13 14 15 16 17
K0
K1
K4
K5
K8
K9
KC
KD
图 3-2:当按下 K4 键时,数码管显示数字‘4’
软件设计方面,我感觉到在编写循环嵌套程序时非常容易出错,需要反复的查错 和耐心的调试。我虽然能够编写出程序,其可读性却有待于提高。
经过这次仿真设计,我对 51 系统的单片机内部构造的了解认识有了一定程度的提 高。我体会到做设计是一项细致的工作,必须要投入时间及精力,要有耐心有韧性。
我相信这几次的仿真设计会为我以后的发展打下一定的基础,我会更加努力,争取 自己在单片机的开发上有更深层次的提高,与此同时经过此次仿真,锻炼了团队协作 能力。
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
39 38 37 36 35 34 33 32
21 22 23 24 25 26 27 P2.6 28 P2.7
10 11 12 13 14 15 16 17
K0
K1
K2
K3
K4
以51单片机为核心的DS18B20的数码管显示温度程序+Proteus仿真
//DS18B20的读写程序,数据脚P3.3 ////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P24~P27为位选///***************************************************/#include "reg51.h"#include "intrins.h" //_nop_();延时函数用#define Disdata P0 //段码输出口#define discan P2 //扫描口#define uchar unsigned char#define uint unsigned intsbit DQ=P3^3; //温度输入口sbit DIN=P0^7; //LED小数点控制uint h;uchar flag;//**************温度小数部分用查表法***********//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//共阳LED段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" uchar code scan_con[4]={0x7f,0xbf,0xdf,0xef}; //列扫描控制字uchar data temp_data[2]={0x00,0x00}; //读出温度暂放uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用///////***********11微秒延时函数**********///void delay(uint t){for(;t>0;t--);}///***********显示扫描函数**********/scan(){char k;for(k=0;k<4;k++) //四位LED扫描控制{Disdata=0xff;Disdata=dis_7[display[k]];if(k==1){DIN=0;}discan=scan_con[k];delay(90);discan=0xff;}}/////***********18B20复位函数**********/ow_reset(void){char presence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0; //delay(50); // 550usDQ=1; //delay(6); // 66uspresence=DQ; // presence=0继续下一步}delay(45); //延时500uspresence = ~DQ;}DQ=1;}/////**********18B20写命令函数*********///向1-WIRE 总线上写一个字节void write_byte(uchar val){uchar i;for (i=8; i>0; i--) //{DQ=1;_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ = val&0x01; //最低位移出delay(6); //66usval=val/2; //右移一位}DQ = 1;delay(1);}///*********18B20读1个字节函数********///从总线上读取一个字节uchar read_byte(void){uchar i;uchar value = 0;for (i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ = 0; //_nop_();_nop_();_nop_();_nop_(); //4usDQ = 1;_nop_();_nop_();_nop_();_nop_(); //4us if(DQ)value|=0x80;delay(6); //66us}DQ=1;return(value);}///***********读出温度函数**********///read_temp(){ow_reset(); //总线复位write_byte(0xCC); // 发Skip ROM命令write_byte(0xBE); // 发读命令temp_data[0]=read_byte(); //温度低8位temp_data[1]=read_byte(); //温度高8位ow_reset();write_byte(0xCC); // Skip ROMwrite_byte(0x44); // 发转换命令}///***********温度数据处理函数**********/ void work_temp(){uchar n=0;uchar doth,dotl;uchar flag3=1,flag2=1; //数字显示修正标记if((temp_data[1]&0xf8)!=0x00){temp_data[1]=~(temp_data[1]);temp_data[0]=~(temp_data[0])+1;n=1;flag=1;}//负温度求补码if(temp_data[0]>255){temp_data[1]++;}display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];doth=display[0]/10;dotl=display[0]%10;display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x07)<<4); display[3]=display[4]/100;display[2]=display[4]/10%10;display[1]=display[4]%10;if(!display[3]){display[3]=0x0a;flag3=0;if(!display[2]){display[2]=0x0a;flag2=0;}}//最高位为0时都不显示if(n){display[3]=0x0b;//负温度时最高位显示"-"flag3=0;}}/////**************主函数****************/main(){Disdata=0xff; //初始化端口discan=0xff;for(h=0;h<4;h++){display[h]=8;}//开机显示8888ow_reset(); // 开机先转换一次write_byte(0xCC); // Skip ROMwrite_byte(0x44); // 发转换命令for(h=0;h<500;h++){scan();} //开机显示"8888"2秒while(1){read_temp(); //读出18B20温度数据work_temp(); //处理温度数据scan(); //显示温度值2秒}}////*********************结束**************************//。
实验4 LED数码管静态显示电路的设计与仿真
实验项目四 LED数码管静态显示电路的设计与仿真[实验目的]1.掌握LED数码管编码方法2.掌握LED数码管静态显示电路的设计3.掌握对LED数码管静态显示的控制方法[实验原理][实验仪器]PC机一台[Proteus用到器件的关键词]单片机(at89c52)、数码管(7seg-com-cathode)、排阻(respack-7)[实验内容与步骤]1.用Proteus软件设计出LED数码管显示电路原理图。
2.由于单片机P0口内部无上拉电阻,故使用时要外接上拉电阻,阻值为10KΩ。
3.用Keil编写程序让第二个数码管从0显示到F,然后再让从0开始显示;每当第二个数码管显示到F后,第一个数码管显示值加1一次,最后调试程序、编译后生成HEX文件。
4.将HEX文件装载到MCU AT89C52中,单击Start按钮开始动态仿真。
[实验数据记录];******两位数码管静态显示程序*******;ORG 0000HLJMP MAINORG 0050H MAIN: MOV R3,#0MOV P0,#3FHLP2: MOV DPTR,#0200H LP1: MOVC A,@A+DPTRMOV P2,ALCALL DELAYMOV R2,ACLR AINC DPTRCJNE R2,#6FH,LP1INC R3MOV DPL,R3MOVC A,@A+DPTRMOV P0,ACLR ACJNE R3,#10,LP2AJMP MAIN DELAY: MOV R0,#0FFHDL2: MOV R1,#0FFHDL1: NOPNOPNOPDJNZ R1,DL1DJNZ R0,DL2RETORG 0200HTAB: DB 3FH;0 DB 06H;1 DB 5BH;2 DB 4FH;3 DB 66H;4 DB 6DH;5 DB 7DH;6 DB 07H;7 DB 7FH;8 DB 6FH;9END[实验数据处理][实验结果及讨论]。
基于proteus的51单片机仿真实例六十、8位数码管显示实例
基于proteus的51单片机仿真实例六十、8位数码管显示实例1、本例实现在8位数码管上同时显示多个不同字符。
2、本例使用了8只集成式7段共阳数码管(pruteus中元件标识为7seg-mpx8-ca-blu,共阳为ca,共阴为cc),所有8个数码管的段码引脚a,b,c,d,e,f,g,dp都是分别并联在一起,任何时候发送的段码均会传送到所有数码管上,所有的数码管的共阳极是独立的,本例中个数码管的共阳极分别与8只NPN三极管射极相连,程序运行时,任意时刻仅允许一只数码管的共阳极连接+5V,当向连接段码的端口发送段码值时,相应数字只会显示在某一只数码管上。
3、为了使不同数码管显示不同字符,本例使用的是集成式多位数码管常用的动态扫描显示技术,他利用了人的视觉暂留特征,选通第一只数码管时,发送1的段码;选通第二只数码管时,发送2的段码,...每次仅选通一只数码管,发送相应的段码,每次切换选通下一数码管并发送相应段码的时间间隔非常短,视觉惰性使人感觉不到字符是一个接一个显示在不同的数码管上的,而会觉得所有的字符很稳定的同时显示在不同数码管上。
在控制两位数码管选通的时间间隔时,要注意全屏的扫描频率要高于视觉暂留频率16-20Hz。
对于程序中的点亮一位数码管的延时时间,我们可以尝试将延时时间改为其他数值,观察会出现什么样的效果。
4、在keil c51中新建工程ex48,编写如下程序代码,编译并生成ex48hex文件/***************************************************************************** * LED数码管显示演示程序** 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 ******************************************************************************** /#include <reg51.h> //包含头文件#include <intrins.h> //包含移位函数头文件//段码表unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off//毫秒级延时函数void delay(unsigned int x){unsigned char i;while(x--){for(i=0;i<120;i++);}}//主函数void main(){unsigned char k,m=0x80; //变量定义P0 = 0xff; //先关闭数码管P2 = 0x00; //while(1){for(k = 0;k < 8;k++) //循环8次{P2 = 0x00; //每显示一位都要关闭位选端口一次m=_crol_(m,1); //循环左移P2=m; //每次选通一个位选端口P0=dis_code[k+1]; //段码送P0口delay(2);}}}5、在proteus中新建仿真文件ex48.dsn,电路原理图如下所示6、将ex48.hex文件载入at89c51中,启动仿真,观察程序运行结果,下图是程序运行结果。
单片机流水灯实验电路图+仿真
八、实验中的问题
1.程序编译问题
初始编程时出现语法错误,后修正
2、循环显示出现问题,循环不能持续。修改程序延时,及数码移位程序片段。
2、在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可
五、C语言源程序
#include <REG51.H>
#define uint unsigned int
#define uchar unsigned char
uchar code DIS_SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
for(cnt = 0; cnt < 8; cnt++) {//点亮数码管0-7
P2 = 0;
P0 = DIS_SEG7[DISP[cnt]];
P2 = ~DIS_BIT[cnt];
delay1ms(1);
}
ttt = DISP[0];
DISP[0] = DISP[1];
DISP[1] = DISP[2];
单片机实验
项目____拉幕式数码显示_______
学号___1204180217_____
专业__能源工程及其自动化__
班级____02____________
姓名___邵鹏程_________
一、实验目的
1,对单片机进一步了解熟悉
2,掌握数码管显示技术及编程
3,巩固理论知识及
二、实验内容
用51单片机8位控制数码管,在数码管上显示“01234567”,并能循环显示。
三、实验原理图
四、程序设计方法
1、动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显式的时间大约在1ms到4ms之间,所以为了保证正确显示,必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器来控制,每定时1ms对数码管刷新一次。
单片机数码管仿真设计说明
1元器件介绍1.1 AT89C51AT89C51是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C51是一个低电压,高性能CMOS 8位单片机,片含8k bytes 的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C51可以按照常规方法进行编程,但不可以在线编程(S 系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
兼容MCS51指令系统· 8k可反复擦写(>1000次)Flash ROM · 32个双向I/O口· 256x8bit部RAM· 3个16位可编程定时/计数器中断· 时钟频率0-24MHz· 2个串行中断· 可编程UART串行通道· 2个外部中断源· 共6个中断源· 2个读写中断口线· 3级加密位· 低功耗空闲和掉电模式· 软件设置睡眠和唤醒功能AT89C51P为40 脚双列直插封装的8 位通用微处理器,采用工业标准的C51核,在部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。
C51单片机60秒倒计时的模拟与仿真设计
C51单片机60秒倒计时的模拟与仿真设计C51单片机是一种非常常用的单片机型号,在许多嵌入式系统中都有广泛的应用。
60秒倒计时是一种简单但实用的计时功能,可以在各种场景下使用,比如比赛计时、实验计时等。
这里将介绍如何使用C51单片机来实现并仿真设计一个60秒倒计时。
接下来,我们详细说明60秒倒计时的设计步骤。
1.硬件连接:将4位共阳数码管的共阳极接到单片机的P1口(P1.0-P1.3),将数码管的a-g段分别接到单片机的P2口(P2.0-P2.6)。
在P1口和P2口之间加上适当的上拉电阻。
2.编写程序:使用Keil C51环境新建一个C语言项目,并编写以下程序:```c#include <reg51.h>sbit D1 = P2^0;sbit D2 = P2^1;sbit D3 = P2^2;sbit D4 = P2^3;void delay(unsigned int t)unsigned int i, j;for(i=0; i<t; i++)for(j=0; j<0x4e; j++); }void maiunsigned int i, j, k; while(1)for(i=5; i>=0; i--)for(j=9; j>=0; j--)for(k=9; k>=0; k--)D1=i;D2=j;D3=k/10;D4=k%10;delay(1000);}}}}```4.调试和仿真:将单片机开发板接上电源,程序将开始运行。
我们可以通过观察数码管的显示来判断程序是否正常运行。
在程序开始时,数码管将显示59:59~00:00的倒计时时间,每隔1秒钟更新一次。
经过60秒后,数码管将停留在00:00的状态。
使用C51单片机实现60秒倒计时模拟和仿真设计非常简单,只需几步即可完成。
这个简单的例子也可以帮助初学者更好地理解和掌握C51单片机的使用方法。
当然,实际应用中可能会有更复杂的需求,需要进一步扩展和优化程序,但整体框架和思路仍然是相似的。
利用51单片机+8位数码管+AD0809设计数字直流电压表系统
目录1.题目设计要求 (2)2. 系统的组成及工作原理 (2)2.1电路原理图 (2)2.2 A/D转换原理 (3)2.3数据处理原理 (3)2.4器件列表 (3)3. 器件的功能和作用 (4)3.1AT89C51功能介绍 (4)3.1.1AT89C51的简单概述 (4)3.1.2AT89C51的引脚介绍 (4)3.2AD0809功能介绍 (6)3.3 LED数码管功能介绍 (6)4.系统硬件设计 (7)5. 系统软件设计 (8)5.1 程序流程图 (8)5.2程序代码 (10)6.系统仿真调试 (13)6.1仿真原理图设计 (13)6.2 与程序代码链接 (13)6.2.1运用keil uVision4生成.hex文件并链接 (13)6.3 仿真运行结果 (15)7.心得体会 (15)8.参考文献 (16)1.题目设计要求要求:利用51单片机+8位数码管+AD0809设计数字直流电压表系统,精度为0.01V。
完成以下设计环节:1)使用Altium Desinger或Protel99SE开发工具,设计电路原理图与PCB制板图。
2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。
3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。
2.系统的组成及工作原理2.1电路原理图图2.1 电路原理图2.2 A/D转换原理模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。
但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。
A/D转换器的工作原理:采用逐次逼近法,逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。
逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo<Vi,该位1被保留,否则被清除。
单片机数码管仿真设计
1元器件介绍1.1 AT89C51AT89C51是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C51是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器〔RAM〕,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C51有40个引脚,32个外部双向输入/输出〔I/O〕端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C51可以按照常规方法进展编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发本钱。
兼容MCS51指令系统· 8k可反复擦写(>1000次〕Flash ROM · 32个双向I/O口· 256x8bit内部RAM· 3个16位可编程定时/计数器中断· 时钟频率0-24MHz· 2个串行中断· 可编程UART串行通道· 2个外部中断源· 共6个中断源· 2个读写中断口线· 3级加密位· 低功耗空闲和掉电模式· 软件设置睡眠和唤醒功能AT89C51P为40 脚双列直插封装的8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 一样,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 内部存放器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:XTAL1〔19 脚〕和XTAL2〔18 脚〕为振荡器输入输出端口,外接12MHz 晶振。
较为全面的基于PROTEUS仿真51单片机动态数码管课程设计(WORD版)
单片机课程设计题目动态数码管显示学院机电工程学院专业班级电子信息工程12-1班姓名组员指导教师张、王老师2015 年 5 月30 日课程设计量化评分标准目录一、概述 (1)1. 单片机简介 (1)2. Proteus简介 (2)3. 设计任务与要求 (3)二、硬件设计 (3)1. 单片机最小系统设计 (1)2. 数码管显示部分 (4)3. 数码管驱动部分 (5)三、软件设计 (6)1. 仿真原理图 (6)2. 仿真参数设置 (6)3. 仿真结果 (7)4. 程序流程图 (8)5. 程序代码.................................................... .9四、心得体会............................................... (11)五、参考文献 (12)一、概述1. 单片机简介如图1.1和图1.2分别为PDI P封装的AT89C52引脚图和实物图图1.1 引脚图图1.2 实物图AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.
3、这时会Leabharlann 出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.
AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C51可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C51P为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28 脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
1、数码管表面不要用手触摸,不要用手去弄引角;
2、焊接温度:260度;焊接时间:5S
3、表面有保护膜的产品,可以在使用前撕下来。
2KEILC51软件简介
2.1 KEILC51概述
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,但是界面是英文的好多初学者看很多教程都是一头雾水,本站特地制作了一个相对简单的教程。他能能嵌入汇编语言保留了汇编代码高效,快速的特点。KEIL C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品,其效率已经达到了相当搞的程度。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。ﻫKeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。
数码管使用条件:
a、段及小数点上加限流电阻
b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定
c、使用电流:静态:总电流 80mA(每段10mA);动态:平均电流4-5mA峰值电流100mA
上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的,4位数码管引脚图请在本站搜索我也提供了数码管使用注意事项说明:
1.2七段显示数码管
7段数码管又分共阴和共阳两种显示方式。如果把7段数码管的每一段都等效成发光二极管的正负两个极,那共阴就是把abcdefg这7个发光二极管的负极连接在一起并接地;它们的7个正极接到7段译码驱动电路74LS48的相对应的驱动端上(也是abcdefg)!此时若显示数字1,那么译码驱动电路输出段bc为高电平,其他段扫描输出端为低电平,以此类推。如果7段数码管是共阳显示电路,那就需要选用74LS47译码驱动集成电路。共阳就是把abcdefg的7个发光二极管的正极连接在一起并接到5V电源上,其余的7个负极接到74LS47相应的abcdefg输出端上。无论共阴共阳7段显示电路,都需要加限流电阻,否则通电后就把7段译码管烧坏了!限流电阻的选取是:5V电源电压减去发光二极管的工作电压除上10ma到15ma得数即为限流电阻的值。发光二极管的工作电压一般在1.8V--2.2V,为计算方便,通常选2V即可!发光二极管的工作电流选取在10-20ma,电流选小了,7段数码管不太亮,选大了工作时间长了发光管易烧坏!对于大功率7段数码管可根据实际情况来选取限流电阻及电阻的瓦数! ﻫ图1.2-1七段数码管引脚图
2.2KeilC51软件的使用方法:
进入KeilC51后,屏幕如下图所示。几秒钟后出现编辑界
启动Keil C51时的屏幕
进入KeilC51后的编辑界面
简单程序的调试 学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。
单片机数码管仿真设计
————————————————————————————————作者:
———————————————————————————————— 日期:
ﻩ
1元器件介绍
1.1 AT89C51
AT89C51是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C51是一个低电压,高性能CMOS 8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
兼容MCS51指令系统· 8k可反复擦写(>1000次)FlashROM
· 32个双向I/O口·256x8bit内部RAM
· 3个16位可编程定时/计数器中断·时钟频率0-24MHz
· 2个串行中断·可编程UART串行通道
· 2个外部中断源·共6个中断源
·2个读写中断口线· 3级加密位
·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能