单片机控制P0口上8段数码管和P2.0,P2.1口上的两个按键,实现按下按键1从0到9逐一增加和按下按键2从9到0逐一减小。
以下为实际效果的截图,如图所示:
二.实验过程
(一)实验项目的方案分析
1.设计原理
STC12C5A60S2单片机内部包括微处理器、存储器(存放程序指令或数据的ROM、RAM等)、输入/输出口(I/O口)及其他功能部件如定时/计数器、中断系统等。它们通过地址总线、数据总线和控制总线连接起来。
本实验是利用改变P0口的高低电平,来实现8段数码管从0到9显示,并且利用STC12C5A60S2单片机芯片内部的计算能力,执行没有实质性影响的所谓无意义的指令来达到延时效果,进一步通过P0各口的延时来制造数码管效果,实现数码管的显示和循环。
(四)实验项目的虚拟仿真
打开Keil软件将上面程序输入,调试无误后编译输出".hex"文件,打开Proteus软件,将之前编译好的".hex"文件加入到芯片中,开始运行仿真,如下图所示。
通过Keil软件进行C51控制程序的编写,通过不断调试修改,最终的调试好的Keil 程序截图如下图所示
(五)实验项目的实际验证电路及验证结果
将单片机C51程序编译无误后,生成HEX文件,通过STC-ISP下载到单片机中,下载的软件界面下图所示。
单片机源程序如下:
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define SEG P0
- sbit key1=P2^0 ;
- sbit key2=P2^1 ;
- uchar code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
- void delay_1ms(uint t)
- {
- uint i;
- while(--t)
- for(i=0;i<600;i++);
- }
- main()
- {
- uchar i;
- i=0;
- while(1)
- {
- P0=Tab[i];
- if(key1==0)
- {
- delay_1ms(10);
- if(key1==0)
- {
- if(i<9)
- i++;
- while(key1==0);
- }
- }
- if(key2==0)
- {
- delay_1ms(10);
- if(key2==0)
- {
- if(i>0)
- i--;
- while(key2==0);
- }
- }
- }
- }
复制代码
所有资料51hei提供下载(Proteus仿真程序):
数码管.rar
(605.44 KB, 下载次数: 24)
|