怎么写51单片机c语言,在两个数码管上从60到00倒数显示,倒数结束,显示“-- --”

作者&投稿:伊要 (若有异议请与网页底部的电邮联系)
用C语言编程,使51单片机数码管从0显示到60~

#include
#include

#define uchar unsigned char
#define uint unsigned int
#define DataPort P0

#define RS_CLR RS = 0
#define RS_SET RS = 1

#define RW_CLR RW = 0
#define RW_SET RW = 1

#define EN_CLR EN = 0
#define EN_SET EN = 1

sbit RS = P1^3; //定义端口
sbit RW = P1^4;
sbit EN = P1^5;
sbit wx = P2^6;
sbit dx = P2^7;
sbit beep = P2^2;

unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

/*
* 功 能:延时,若干毫秒
* 参 数:毫秒数
* 返回值:无
*/
void DelayMs(unsigned int i)//一个延时函数,这个函数在11.0592M晶振下的延时时间大概为1ms
{
unsigned int j,k;

for(j=i; j>0; j--)
for(k=114; k>0; k--);
}

/*
* 功 能:延时
* 参 数:延时的数量
* 返回值:无
*/
void delay(uint x)
{
uint a,b;
for(a=x; a>0; a--)
for(b=10; b>0; b--);
}

/*
* 功 能:显示计时的秒数
* 参 数:无
* 返回值:无
*/
void display(uchar d2, uchar d1)
{
P0 = table[d2];
dx = 1;
dx = 0;

P0 = 0xfe;
wx = 1;
wx = 0;
delay(5);

P0 = table[d1];
dx = 1;
dx = 0;

P0 = 0xfd;
wx = 1;
wx = 0;
delay(5);

}

void main()
{
uchar i, second=0, d1, d2, dat=0xFF;

while(1)
{
DelayMs(1000);
second++;
dat--;
P1 = dat;
if(second == 60)
{
second = 0;
}

d2 = second / 10;
d1 = second % 10;

for(i=50; i>0; i--)
{
display(d2, d1);
}
}
}

用c语言吗? 只用一个按键接P3^2是吗? 就是控制暂停 继续的,还有一个 蜂鸣器 对吧,,确定使用C语言的话, 电路图最好是发过来,不然的话,不兼容你的电路板的

你这个图里的电路不能分别显示,要锁存器

你这个电路是动态显示的,需要极快的速度切换八位数码管,切换到每一位时显示每一位的数字的数码管字形码,不停的切换显示。并且还要定时减数。从你问的问题,应该是初学者吧,可能一下做出这么多程序会比较费劲,如果比较着急需要帮忙的话,可以私信我


51单片机C语言程序
\/\/为你增加了一个按键检测的函数。\/\/下列程序通过了实验测试。\/\/b1输出的周期大约0.9s。\/\/b2输出的周期大约0.6s。\/\/K为触动开关,reg为红灯,bice为绿灯,b1、b2 各为一个方波,\/\/按第一次触动开关时红灯亮、b1输出,\/\/按第二次绿灯亮、为b2输出,\/\/按第三次都关闭.include <reg51.h> d...

用c++怎样编写51单片机程序?
\\x0d\\x0a 单片机的ROM是K级的水平,执行指令的速度也远远小于PC。绝对不能和PC机相比的。这个就决定了单片机编程时很多时候要考虑它的代码效率和代码大小问题。所以一般情况下对于单片机编程我们之用汇编语言或者C语言。就算是用C写程序也要注意代码的效率等问题。\\x0d\\x0a 还有就是只有很大型...

51单片机用c语言怎么写延时函数?
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1\/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1\/12M *...

51单片机,8个数码管循环显示1-9的C语言程序。
假设8个数码管公共端均接地,同时显示1-9\\x0d\\x0a#include\\x0d\\x0a#include\\x0d\\x0a#defineucharunsignedchar\\x0d\\x0a#defineuintunsignedint\\x0d\\x0aucharcodeDSY_CODE[]=\\x0d\\x0a{\\x0d\\x0a0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff\\x0d\\x0a}...

51单片机串口通信c语言编程
sinti(); \/\/串口初始化程序 ring=1;while(1){ while (1){ if(CASE1==0){ send('a');ring=0;break;} if(CASE2==0){ send('b');ring=0;break;} if(CASE3==0){ send('c');ring=0;break;} if(CASE4==0){ send('d');ring=0;break;} } if(ring==0){ ...

51单片机C语言编程
单片机默认状态下,是0有效,就是低电平有效,所以此程序也是以低电平为准 若是你的硬件电路时高电平有效,则改一下判断的条件即可 程序如下 \/***\/ include<reg51.h> sbit key=P3^7;\/\/按键输入 sbit led=P2^7;\/\/指示灯 int s,h,n;\/***\/ void main(void){ TH0...

大家帮忙找一些51单片机的基本C语言程序例子,最好带说明,谢啦_百度知 ...
中断控制程序:include <AT89X52.H> define uchar unsigned char define uint unsigned int define port_count P2 \/\/P2接8LED接口 \/\/将计数器的二进制值用8个LED显示出来 uchar count;\/\/计数器(存储中断次数)void main(void){ count=0; \/\/清零计数器 port_count=~count;\/\/清零P2口 IT0=...

用C语言给51单片机编程时,怎样用P0口输出地址和数据?
只要C语句能保证编译出MOVX指令即可。你可以自行学习以下关键字的用法:pdata,xdata PBYTE,XBYTE 点到为止。剩下的自己去琢磨,Keil里面都能搜索到的。

51单片机设计跑马灯的程序用(c语言)编写
|P1口接8个发光二极管共阳 include <AT89X51.H> unsigned char i;unsigned char temp;unsigned char a,b;void delay(void){ unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);} void main(void){ while(1){ temp=0xfe;P1=temp;delay();for(...

51单片机编程练习 请使用C语言完成
include<reg51.h> include<intrins.h> define uchar unsigned char uchar tt=0;void t1isr() interrupt 3 { TH1=(65536-50000)\/256;TL1=(65536-50000)%256;tt++;if(tt>20){ tt=0;P1=_crol_(P1,1);} } main(){ TMOD=0x10;TH1=(65536-50000)\/256;TL1=(65536-50000)%256;TR1=1;ET...

安岳县19539492544: 求用51单片机接两个数码管,0 - 99动态显示程序(用C语言) -
友昨优普: #include #define uchar unsigned char #define uint unsigned int uchar DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; void delay(uint x) { uchar i; while(x--)for(i=0;i<120;i++); } void main() { uchar i; P0 = 0x00; P2 = 0x00; while(1)...

安岳县19539492544: 51单片机控制2个数码管动态实现0到99(C语言) -
友昨优普: #include <reg51.h>unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void show(unsigned char n); void delay();void main() {unsigned char i;int j;while(1){for(i=0;j=100,i<100;++i)while(j--)show(i);} }void ...

安岳县19539492544: 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一秒、减一秒和继续 -
友昨优普: #include<reg51.h>#define uchar unsigned char; uchar LED1,LED2; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar num=0;sec,key; void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } void ...

安岳县19539492544: 求51单片机控制2个数码管的程序 -
友昨优普: 两只数码管段码分别由P0,P2输出控制,P0是十位,P2是个位.62616964757a686964616fe59b9ee7ad9431333330363830P3.2,P3.4分别接两只按键,P32.清0,P3.4计数.以上程序来自《单片机C语言程序设计实训100例——基于8051+...

安岳县19539492544: 利用AT89C51单片机实现两个共阳数码管倒数计时99秒,求程序!!要求是C语言的 -
友昨优普: 这是正时,改动一下 #include unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; unsigned char second; unsigned char keycnt; unsigned int tcnt; void main(void) { unsigned...

安岳县19539492544: 51单片机中如何用C语言实现两个测量量的相加减 -
友昨优普: 51单片机中用C语言实现两个测量量的相加减,是最简单的计算了,设两个测量的数据分别为x1,x2,总量为x0,则相加计算,x0=x1+x2,相减计算,x0=x1-x2.

安岳县19539492544: 帮忙编个51单片机两个数码管的C语言编程(第一个显示4,第二个显示6)
友昨优普: 楼上说得对,通过扫描的方法可以实现,我就让它显示23吧!程序如下: #include<reg52.h> #define uint unsigned int sbit ge=P1^1; //个位控制 sbit shi=P1^0; //十位控制 void delays(uint xms) {uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--); } void ...

安岳县19539492544: 让单片机的两个数码管同时亮c语言程序怎样写 -
友昨优普: 两个灯管的交换不要放在中断程序里面.拿到主程序循环,中间加点延迟. 中断程序只负责改变时间k. 另外 k==60才变回0.

安岳县19539492544: 51用c语言编程,怎么把两个二进制数组合成一个数? -
友昨优普: unsigned char n1=0x03; //11 unsigned char n2=0; //00 n1=n1n2|=0x03; 用移位操作就可以完成

安岳县19539492544: 想用51单片机编个倒计时的c程序,要求用两位数码管显示分钟的,并用一个按键 -
友昨优普: 你这数码管的1、2口就这么悬着或者接dp一起了真的没问题吗…… 全局变量2个用于表示个位和十位,显示的时候可以省点力不用每次计算个位十位. 然后一个全局变量代表秒 编程的话,首先是按键响应中断,控制某个全局变量flag的值,三种...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网