问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单片机简单C语言问题,实现一个个位加法计算器

发布网友 发布时间:2023-01-02 10:40

我来回答

4个回答

热心网友 时间:2023-10-09 13:18

你的问题应该出现在键盘处理不完善造成的,稍微修改了一下你试试。
#include <reg52.h>
#define uchar unsigned char
#define unit unsigned int
#define OPdata P0 //十位数据口
#define OPdata1 P1//个位数据口
sbit se0=P3^6;//十位选择
sbit se1=P3^7;//个位选择
sbit Q=P2^6;
sbit W=P2^5;
sbit E=P2^4;
uchar cis; //按下键盘次数
uchar jia1; //加数1
uchar jia2; //加数2
uchar z; //中转数
uchar shi; //十位数
uchar ge; //个位数
uchar s; //译码结果
uchar j; //译码结果
uchar sum; //加法结果
uchar keytemp;
void judge(uchar m) //数码显像管译码
{
switch (m)
{
case 0: s=0x3F; break;
case 1: s=0x06; break;
case 2: s=0x5B; break;
case 3: s=0x4F; break;
case 4: s=0x66; break;
case 5: s=0x6D; break;
case 6: s=0x7D; break;
case 7: s=0x07; break;
case 8: s=0x7F; break;
case 9: s=0x6F; break;
}
}
void judge1(uchar h) //十位数码显像管译码
{
switch (h)
{
case 0: j=0x3F; break;
case 1: j=0x06; break;
}
}
void judgecis()
{
if (cis==1)
{
jia1=z;
ge=z;
shi=0;
}
else if (cis==2)
{
jia2=z;
ge=z;
shi=0;
cis=0;
}
}
void jiafa(uchar m,uchar n) //加法
{
sum=m+n;
if (sum>=10)
{
ge=sum-10;
shi=1;
}
else
{
ge=sum;
shi=0;
}
}

void main()
{
cis=0;
jia1=0;
jia2=0;
shi=0;
ge=0;
s=0;
j=0;
P2=0XFF;
se0=0;//开启十位
se1=0;//开启个位
OPdata=0x3f;//十位
OPdata1=0x3f;//个位
while (1)
{
Q=0;
keytemp=P2;
switch (keytemp)
{
case 0xbb: z=3; cis++;while(P2==0xbb); break;
case 0xbd: z=6; cis++;while(P2==0xbd); break;
case 0xbe: z=9; cis++;while(P2==0xbe); break;
case 0xb7: //等于号
jiafa (jia1,jia2); cis=0; break;
}
Q=1;
W=0;
keytemp=P2;
switch (keytemp)
{
case 0xde: z=8; cis++;while(P2==0xde); break;
case 0xdd: z=5; cis++;while(P2==0xdd); break;
case 0xdb: z=2; cis++;while(P2==0xdb); break;
case 0xd7: z=0; cis++;while(P2==0xd7); break;
}
W=1;
E=0;
keytemp=P2;
switch (keytemp)
{
case 0xee: z=7; cis++;while(P2==0xee); break;
case 0xed: z=4; cis++;while(P2==0xed); break;
case 0xeb: z=1; cis++;while(P2==0xeb); break;
}
judgecis();
judge(ge);
OPdata1=s;
judge1(shi);
OPdata=j;
E=1;
}
}

热心网友 时间:2023-10-09 13:18

你的意思是先按1,再按6,最后按=号,结果是12?而不是7?

下面有一行改下。
void judgecis()
{
if (cis==1)
{
jia1=z;
ge=z;
shi=0;
}
else if (cis==2)
{
jia2=z;
ge=z;
shi=0;
cis=0; //把这行去掉试试

}
}

热心网友 时间:2023-10-09 13:19

这个是个小试验项目吧,其实就是做一个4*4键盘的功能?简单就用16个io口分别赋予键值,复杂的就是用4x4键盘逻辑(4个io纵向,4个io横向编程)

热心网友 时间:2023-10-09 13:19

你这样的程序也不整理再贴出来,看了都累啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
特别精辟的个性签名(非常经典的个性句子) 特别经典的个性签名(非常惊艳的个性句子) 文艺范十足的个性签名(温柔治愈的个性签名句子) wps文字怎么设置每页头和尾 27岁的女人需要补充哪些营养元素 27岁该重视美容了吗?都可以用哪些方法好些呢? airpods连不上手机怎么回事 - 知百科 腰肌劳损能养好吗? 有一段相声讲的是原始人打猎,唱歌,学说话的,请问名字是什么? 个人征信逾期记录的修复攻略,手把手传授 空调冬季制热怎么操作? 十全十美的生肖是什么 九年级上册语文第18课中国人失掉自信了吗生字词拼音 电脑网页打开显示不全,百度打不开二级网页,WIN7系统,自带IE8浏览器跪求高手指点 iphone怎么手写输入 海尔55寸4k智能电视左边有一道黄线怎么回事 给老师的一封信500字怎么写作文给老师的一封信 新买的包包味道很大怎么快速去掉刚买的包包气味很重怎么快速去除 省呗扣费29.8退回来有提示吗是真的吗 怎样设置动态壁纸oppo qq空间那种会动的相册怎么制作 QQ空间相片怎样制作动感影集 监控系统在室外用双绞线传输,如何注意防雷方面的事项 假发是什么材料做的 假发买真发好还是人造好 帮乌鸦想出一个新办法喝水 《乌鸦喝水》如果乌鸦旁边没有石子怎么喝到水? PPT中照片与照片在动画播放时,照片与照片形成一个立体感,怎么弄呢? 最简单的芋泥奶茶怎么做怎样做芋泥奶茶 怎样做芋泥奶茶 股东权益-什么是股东权益-(解释) 加绒裤子哪种绒比较好 耐克运动裤加绒里面的绒是什么材料 李宁加绒卫裤有几种绒面 加绒打底裤都有哪几种绒 三星2014手机内屏和外屏壁纸不一样怎么更改? 14promax壁纸在哪里下 怎么加入饿了么外卖配送平台 oppo手机边听边存的歌曲在哪里找 欢乐斗地主卡神5级升6级要多少钻石 请问blued被禁言了还能解除吗 手机绑定的邮政储蓄卡作废了怎么怎么移除手机帮定的邮政银行卡作废了怎么解除? 艾滋病疫苗实验再受挫,艾滋病该如何治疗,以后会产生新方法吗? 2022艾滋病检测最新标准 艾滋病最近有什么新药吗? 设计我的名片 孙炎润三个字怎么写好看? lumion添加声音却没有声音 关于lumion 的问题--打开发现里面显示了一个从没见过的图标。是做什么用的 墙面上双面胶的胶痕怎么去掉 消费者买到变质食品怎么处理