数码显示实验报告C语言,数码管动态显示实验报告

数码管动态显示任何数值

实验四 数码管动态显示实验一

一、实验要求

1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路

2. 在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码管数据引脚相连 ,P2.0~P2.3引脚输出选控制信号

3. 在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4

二、实验目的

1.

2.

3.

4. 巩固Proteus软件和Keil软件的使用方法 学习端口输入输出的高级应用 掌握7段数码管的连接方式和动态显示法 掌握查表程序和延时等子程序的设计

三.实验说明

本实验是将单片机的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引脚是接晶振脚。而接地和电源端在软件中已经接好,所以不用在引线。 如下图所示:

以下是一个基本的数码管动态显示C语言代码,仅供参考: ``` #include <reg52.h> //单片机头文件 #define uint unsigned int //定义无符号整型变量 #define uchar unsigned char //定义无符号字符型变量 //数码管的引脚定义 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit DIO=P1^0; //串行数据输入 sbit SCLK=P1^1; //串行时钟信号 //数码管显示的数据 uchar code smgduan[]=//0~F的显示码 { // 0 1 2 3 4 5 6 7 8 9 A B C D E F 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e }; //延时函数 void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //发送一个字节到数码管 void sendbyte(uchar dat) { uchar i; for(i=0;i<8;i++) { SCLK=0; //初始状态,时钟信号为低电平 DIO=dat&0x01; //将数据的最低位赋值给DIO dat>>=1; //数据右移一位,准备发送下一位 SCLK=1; //时钟信号为高电平,上升沿发送数据 } } //设置数码管显示的位数和显示的数值 void setpos(uchar pos,uchar dat) { LSA=1; //锁存器输入方式为并行输入 LSB=1; LSC=1; sendbyte(0x44); //发送设置命令 LSA=0; //锁存器输入方式切换为单个输入 sendbyte(pos<<1); //设置要显示数码管位置 sendbyte(dat); //设置要显示的数值 } void main() { uchar i,j; while(1) { for(i=0;i<8;i++) //依次显示八个数码管 { setpos(i,smgduan[i]); //设置要显示数码管位置和数值 delay(500); //延时,控制数码管动态显示的速度 } } } ``` 这个代码通过循环依次控制八个数码管显示,同时实现了数码管动态显示的效果。在实际应用中,可以根据需要进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值