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

51单片机数码管显示实验纠错

发布网友 发布时间:2022-04-30 00:09

我来回答

3个回答

热心网友 时间:2022-06-26 20:57

#include <reg51.h>
#include <intrins.h>

unsigned char data dis_digit;
unsigned char key_s, key_v;

unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
unsigned char dis_buf[8]; // 显示缓冲区
unsigned char sec_bcd[8]; // 秒计数值, BCD码
unsigned char dis_index; //
unsigned char key_times; // K1 按下次数 //

void clr_time();
void update_disbuf();
bit scan_key();
void proc_key();
void delayms(unsigned char ms);

sbit K1 = P1^0;

void main(void)
{
P0 = 0xff;
P3 = 0xff;
TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式
TH1 = 0xdc;
TL1 = 0;

TH0 = 0xFC;
TL0 = 0x17;

clr_time(); //

dis_digit = 0x7f; // 初始显示P30口数码管
dis_index = 0; //

key_times = 0;
key_v = 0x01;

IE = 0x8a; // 使能timer0, timer1中断

TR0 = 1;
TR1 = 0;
while(1)
{
if(scan_key())
{
delayms(10);
if(scan_key())
{
key_v = key_s;
proc_key();
}
}

}
}

void clr_time()
{
sec_bcd[0] = 0x0;
sec_bcd[1] = 0x0;
sec_bcd[2] = 0x0;
sec_bcd[3] = 0x0;
sec_bcd[4] = 0x0;
sec_bcd[5] = 0x0;
sec_bcd[6] = 0x0;
sec_bcd[7] = 0x0;

update_disbuf();

}

bit scan_key()
{
key_s = 0x00;
key_s |= K1;
return(key_s ^ key_v);
}

void proc_key()
{
if((key_v & 0x01) == 0)
{
key_times++;
if(key_times == 1)
{
TR1 = 1;
}
else if(key_times == 2)
{
TR1 = 0;
}
else
{
clr_time();
key_times = 0;
}

}
}

void timer0() interrupt 1
// 定时器0中断服务程序, 用于数码管的动态扫描
// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
// 选通P2.0口数码管
// dis_buf --- 显于缓冲区基地址
{
TH0 = 0xFC;
TL0 = 0x17;

P3 = 0xff; // 先关闭所有数码管
P0 = dis_buf[dis_index]; // 显示代码传送到P0口
P3 = dis_digit; //

dis_digit = _cror_(dis_digit,1); // 位选通值右移(P30<-P37), 下次中断时选通下一位数码管
dis_index++; //

dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
}

void timer1() interrupt 3
//
{
unsigned char i;
TH1 |= 0xdc;
for(i = 0; i < 8; i++)
{
sec_bcd[i]++; // 低位加1
if(sec_bcd[i] < 10) // 如果低位满10则向高位进1
break; // 低位未满10
sec_bcd[i] = 0; // 低位满10清0
}
update_disbuf(); // 更新显示缓冲区
}

void update_disbuf()
// 更新显示缓冲区
{
dis_buf[0] = dis_code[sec_bcd[0]];
dis_buf[1] = dis_code[sec_bcd[1]];
dis_buf[2] = dis_code[sec_bcd[2]] & 0x7f; // 加上小数点
dis_buf[3] = dis_code[sec_bcd[3]];
dis_buf[4] = dis_code[sec_bcd[4]];
dis_buf[5] = dis_code[sec_bcd[5]];
dis_buf[6] = dis_code[sec_bcd[6]];
dis_buf[7] = dis_code[sec_bcd[7]];
}

void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

热心网友 时间:2022-06-26 20:58

P2_X这个是不能直接操作的,位定义下,另外数码管的位要打开

热心网友 时间:2022-06-26 20:58

1. P2_0 P2_1 ... 是否被定义 如果在你头文件定义了 是否是 一个管脚

2. 将char 赋值给一个位变量 肯定是有错误的 后面 P2_0=a[ge] ......

3. P2 究竟是驱动的段码还是位码?看起来逻辑上比较混乱!

4. 这个要用动态刷新的形式 ,找下别人程序和电路参考下
51单片机仿真时,数码管第一位显示的怎么不是0

明显错误:temp没有初始化,直接调用P2=table[temp];仔细想想,P2=table[temp]这句执行时,temp只可能是1、2、3、4。应该是0、1、2、3就可以了吧。因此 temp=0;...while(1){ P2=table[temp];temp++;if(temp==4){ temp=0;} } ...

51单片机,我在学习控制数码管静态显示时,总跟我实验的结果相反(如,我...

按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将...

51单片机C语言写的数码管显示哪里出问题了?

f(P3_6==0) //按下后,数码管闪烁 { delay(10);while(!P3_7);flag=0;} 这个地方你是不是写错了?应该是查询while(!P3_6);吧?另外,你在中断里面等待flag==1是不行的,因为你采用查询方式,而且是在主程序里面查询,因此,在中断里面等待是不行的,程序可能会在这个地方进入死循环 ...

51单片机数码管显示问题

delay_ms(1);//保持显示1ms LED_1=1;//关闭d1位数码管显示,准备显示下一位

关于proteus 中51单片机的动态数码管的显示问题

是两位共阳数码管,用二位一体的共阳数码管,段控直接连到P0口,位控直接用P2口,把电阻,总线,三极管统统去掉。还有就是显示时,要先输出位选码,后输出段选码。否则,就是你说的情况。你看看下面的仿真图,那简单,显示还正常。

利用51单片机的T0定时器控制数码管显示的问题,我想控制他亮的时间,但...

有错:while(1){ if(tt=100) //这里应该是双等号“==”{ tt=0;i++;if(i==16)i=0;……

51单片机动态显示,程序调试的时候很好没有出错但是在实际的工作中,数码...

速度调一下,也就是延时调一下,实在不行加一个消影的动作,动态扫是这样的,动态不就是利用人眼的视觉特性嘛 ,可是要是动态扫的慢了就会闪,要是扫得太快就会分不清,消影就是加个P1=1;这种全部关断一下,在位切换之前加就好了,你可以试试。

51单片机控制数码管显示不正常问题,为什么后面4位数码管1234和5678都...

9的数据,之后定义一个display显示函数,传递参数但不返回参数,然后将传递的参数(1234或5678)分解成4哥单个数,然后依次选择要显示的数码管和数据,紧接消影和简单暂时,这样一个数码管显示就完成了,之后三个跟这个一样。最后在主函数里调用这个显示函数并传递参数。希望我的回答能帮助到你。

51单片机中断控制数码管显示

在51单片机中断控制数码管显示的应用中,通常的做法是将数码管显示的内容存储在单片机的内存中,然后通过中断服务程序来更新数码管的显示内容。当需要更新数码管显示内容时,单片机产生一个中断请求,然后执行相应的中断服务程序。在中断服务程序中,单片机读取内存中存储的显示内容,并通过相应的接口电路将内容...

单片机编程,数码管显示异常

这是当然,你在定时器里面加循环和延时,时间就变得混乱了。display又不是定时器控制,所以会出现不可预料的现象。

51单片机数码管显示实验报告 单片机数码管显示实验 单片机数码管显示实验步骤 单片机控制数码管显示实验 51单片机静态数码管实验报告 单片机关于数码管的实验报告 单片机数码管显示0到9 单片机数码管实验报告总结 单片机数码管显示原理
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为mate S和mate7智能手机有什么区别 中国银行的账户年检申请书是不是都一样的? 中国银行外汇账户年检 中国银行人民币单位银行基本账户年检需提供的材料是什么? macbook air 之前安装了双系统,重新装了os x 然后发现鼠标还是触控板... 在微信群里添加好友有没有限制?添加的多了,后面的人会不会收不到... 我加微信群里人为好友一次可以加多少人 已婚天秤座2024年感情运势 天秤座一生只有两次真爱 近视减消镜主要特点 白内障做手术后还需要配带眼镜吗 单片机实验中数码管显示出现拖影的原因及解决方法 有没有 女生重生到校园的小说 就像《重生校园之商女》一类的... 对方把我的快手拉黑了我怎么还能在他榜一上面 求女主是重生+异能+赌石+女强!例如:【重生之商女在校园】,【重生之鬼眼商女】这种类型的小说!越多 一个女人用海水控制如来佛祖的电影孙悟空是石头人 《西游记》真假孙悟空中,如来佛祖收服假悟空对观音大士说的是什么? 《如来佛辨识假猴王》故事中,那只假孙悟空是什么猴子变的? 有一部西游记电影是孙悟空被如来佛祖一掌拍下,夹在手指纹里的叫什么电影 西游记续集中,真假美猴王那集,两个孙悟空打到如来佛祖那儿时,他们俩对如来说的话,能判断出谁真谁假? 至尊宝孙悟空电影名字 一个电影不叫西游记孙悟空被如来佛祖关在白荷花下的电影叫什么 有一个电影,里面也有孙悟空他们,但是又多了如来佛祖,好像有一个和尚死了,然后又有舍利子什么的,然后 支付宝里面的保险理赔方式,总感觉怪怪的,说出来意外要及时打给保险公司,假如昏迷或者变成植物人了呢! 有一个电影我只看了一点点,情节是这样的:孙悟空回到了花果山,但花果山已经生灵涂炭,孙悟空便去找如来 很久以前有部说孙悟空取完西经后,天庭被黑暗控制,还有个黑暗的如来佛祖。那个电视剧叫什么了? 孙悟空带了个假佛祖转世回灵山,终于见到了灵山佛祖的真面目这是哪个片 孙悟空跟如来佛祖打 然后如来佛祖,用手压孙悟空 孙悟空变成一只大猩猩顶住如来 孙悟空变成猩猩和如来对打的电影是什么 用小苏打加白醋还有洗洁精浸泡过的种子还能出芽吗? 找一个关于西游记的电视剧,好像是孙悟空取完经之后与如来佛祖对抗,而且这个电视剧里唐僧会法术 实验八 数码管显示实验 教育学专业考研有用吗? 601766 002067 后市如何?可否介入 《三顾茅庐》的原文!!快!!急急急~~ 8255和LED数码管显示实验 村上春树 兰格汉斯岛的午后 小确幸 原文 有的发到我邮箱252517071@qq.com txt文档 谢谢 在十进制加计数译码显示实验中,为什么数码有时会乱码 《灰色轨迹》小说的作者是谁? 动态四位七段共阳极数码管显示实验如图所示,为什么要在abcdefg哪里接几个电阻,解释一下作用 阅读下面的文字,按要求作文。(60分)“小确幸”一词,出自日本作家村上春树的随笔,由翻译家林少华直译 三国演义第三十八回中,“开宾馆于吴会”,是什么意思 数码管动态显示的实验中用到了消影技术,何为消影,举例说明如何消影? 我用别人的微信给老公聊天!老公说他很想出轨一次!我不知道该怎么办? 4位二进制数加法数码显示电路的制作实验报告? 刘备问路的故事 教育技术学什么考研方向有哪些?并且就业怎么样? 我在学AVR单片机在遇到数码管动态显示实验时,里面要有个Delay延时,为什么要延时啊 老公出轨了,不想让他的微信视频通话打出去怎么操作 三国演义第38回完整版 村上春树的你好,小确幸的英语翻译,只要这句话的,急!!!