单片机百位计数c语言,单片机c语言版数管动态显示实验报告.doc

单片机c语言版数管动态显示实验报告

数码管动态显示实验

一、实验要求

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

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

在Keil软件中编写程序,采用动态显示法,实现数码管显示变量unsigned int show_value的值(show_value的值范围为0000~9999),即把show_value的千百十个位的值用数码管显示出来。

二、实验目的

巩固Proteus软件和Keil软件的使用方法

学习端口输入输出的高级应用

掌握7段数码管的连接方式和动态显示法

掌握查表程序和延时等子程序的设计

三.实验说明

(条理清晰,含程序的一些功能分析计算)

如下图(五)所示,由P1口将要显示的数字输给七段数码管;再由P2第四位输给数码管的公共端,作为扫描输入信号;用外部中断P3.2和P3.3分别接PB1与PB2,实现数字的增减。所要实现的功能是,开始运行电路功能图时,四个数码管分别显示0000,按下PB1增1,直到9999回到0000,相反按下PB2减1,直到0000回到9999。

在算相关数据时,由于要显示个十百千的不同数字,要调用disp函数,

disp[0]=show/1000; //显示千位的值 disp[1]=show%1000/100; //显示百位的值

disp[2]=show%100/10; //显示十位的值 disp[3]=show%10; //显示个位的值

本实验需要用到IE寄存器与TCON寄存器。

四、硬件原理图及程序设计

(一)硬件原理图设计

图(五)

开始运行proteus,四个数码管显示0000,按下PB1数码管增1,按下PB2数码管减1。

(二)程序流程图设计

三)程序设源代码

#include //定义8051寄存器头文件

#defineSEG7PP1 // 定义数码管输入信号接P1

#defineSCANPP2 //定义数码管扫描信号接P2

char code TAB[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99,//数字0~4

0x92, 0x83, 0xf8, 0x80, 0x98 };//数字5~~9

char disp[4]={0,0,0,0}; //显示数组

void delay_ms(int x); //声明延迟函数

char scan[4]={0xfe,0xfd,0xfb,0xf7}; //声明输入扫描信号

char i,j; //声明变量

void display(); //显示数组diso的内容

int show=0000; //定义初始值

void get_disp(); //声明返回diap

main() //主程序开始

{

IE=0X85; //开IE寄存器,允许INT0和INT1中断

TCON=0X05; //开INT0,INT1

while(1) //无穷循环

{

get_disp();

display();

}

}

void delay_ms(int x) //声明延迟函数

{int i,j; //定义变量

for (i=0;i

for (j=0;j<120;j++); //计数120次,延迟1ms

}

void display() //声明显示函数

{

for(i=0;i<4;i++) //开始计数 ,计数4次

{ j=disp[3-i]; //diap的值附到变量j

SCANP=scan[i]; //显示扫描 信号

SEG7P=TAB[j]; //显示数字到数码管

delay_ms(4); //延迟4ms

}

}

voi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值