找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 582|回复: 4
收起左侧

单片机开关计数显示程序问题

[复制链接]
ID:143767 发表于 2024-1-29 15:48 | 显示全部楼层 |阅读模式
各位好,程序见下面,我想实现的功能是两个按钮对应两个共阳数码管,上电后两个数码管显示零,按第一个按钮第一个数码管显示一,第二个数码管不变,按到5,数码管就显示5。但现在的问题是我不论按哪个按钮,两个数码管一起显示同样的数,不能分别控制,请各位高手帮忙指点一下程序要怎样修改,谢谢

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit KK1 = P3^2;//按键输入;
sbit KK2 = P3^3;//按键输入;
uchar code table[11] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
/**************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***************************************************************/
void Delay_1ms(uint x)
{
uchar i, j;
for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);
}
/**************************************************************
* 名称 : Display(uchar k)
* 功能 : 将参数分成十位、个位分别显示
* 输入 : k
* 输出 : 无
***************************************************************/
void Display(uchar k)
{
P2 = 0; //先消隐
P2 = 0x02; Delay_1ms(5); //显示5ms
P2 = 0;
P0 = table[k % 10]; //显示个位
P2 = 0x01; Delay_1ms(5);
P1 = table[k % 10]; //显示个位  
}
/**************************************************************
* 名称 : Main()
* 功能 : 主函数
***************************************************************/
void Main(void)
{
uchar Value = 0; //数值
while(1) {
P3 = 0xff;
if(!KK1) {//KK1按下
Display(Value);//延时消抖
// Delay_1ms(20);
if(!KK1) {//KK1依然按下
while(!KK1);//等KK1释放
Value++;
if (Value > 5) Value = 5;//显示最大值0-10
}
}
if(!KK2) {//KK1按下
Display(Value);//延时消抖
// Delay_1ms(20);
if(!KK2) {//KK1依然按下
while(!KK2);//等KK1释放
Value++;
if (Value > 5) Value = 5;//显示最大值0-10
}
}
  Display(Value); //显示值
}
}
回复

使用道具 举报

ID:883242 发表于 2024-1-29 16:23 | 显示全部楼层
void Display(uchar k)
{
P2 = 0; //先消隐
P2 = 0x02; Delay_1ms(5); //显示5ms
P2 = 0;
P0 = table[k % 10]; //显示个位

P2 = 0x01;
Delay_1ms(5);
P1 = table[k % 10]; //显示个位  

}

反复看我标黑的两行,一直到看出问题为止。
回复

使用道具 举报

ID:1064915 发表于 2024-1-29 16:42 | 显示全部楼层
P0 = table[k % 10]; //显示个位
P1 = table[k % 10]; //显示个位
注释很清楚,一样的
回复

使用道具 举报

ID:69038 发表于 2024-1-29 16:50 | 显示全部楼层
你的代码就是显示一样的。都是“k % 10”两个按键也是一样的操作。都是“Value++;”

按键一改为“Value+=10;” if (Value>=60) Value%=60;
显示1改为“k / 10”;
显示2还是“k % 10”;
试一下?
回复

使用道具 举报

ID:161164 发表于 2024-1-29 17:16 | 显示全部楼层
  1. * 名称 : Display(uchar k)
  2. * 功能 : 将参数分成十位、个位分别显示
  3. * 输入 : k
  4. * 输出 : 无
  5. ***************************************************************/
  6. void Display(uchar k)
  7. {
  8. P2 = 0; //先消隐
  9. P2 = 0x02; Delay_1ms(5); //显示5ms
  10. P2 = 0;
  11. P0 = table[k % 10]; //显示个位
  12. P2 = 0x01; Delay_1ms(5);
  13. P1 = table[k % 10]; //显示个位  
  14. }
复制代码


你说说这段代码在干啥
以我理解,你说的现象很符合代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表