请问单片机C51用C语言怎么编这个例子

用80C52来编程,P1口接8个发光二极管,P1^=0时,二极管亮;设计一个可控制亮与不亮间隔时间的程序,用按钮来控制。当按钮按K1在P2^0口时,按一下按钮,原本程序上设制的时间1秒,变成2秒,再按一下变成3秒。反之按K2(接在P2^1)减少1秒,当减到1秒后不加往下减。请问这个控制时间的界面怎么编程啊,设置时间时,单片机中的程序有被更改过吗?如果是在6个7段数码管上显示设置的界面怎么制作(在界面显示t 001)即设置的001为1秒。

#include <reg52.h>
#define uchar unsigned char
uchar t0,count,NUM,NUM1;
sbit K1=P2^0;
sbit K2=P2^1;

void delay(uchar count)
{uchar i;
for(i=0;i<count;i++)
{TMOD=0X01;
TH0=(65536-50000)%256;
TL0=(65536-50000)/256;
TR0=1;
while(!TF0);
TF0=0;
}
void keyscan()
{
if(K1==0)
delay(1);
if(K1==0)
{NUM++;
if(NUM==3);
{NUM=0;
}
}
switch(NUM)
{case 1:{delay(40);P1=~P1;}break;

case 2:{delay(60);P1=~P1;}break;
}
if(K2==0)
delay(1);
if(K2==0)
{NUM1--;
if(NUM1==0);
{NUM1=0;
}
}
switch(NUM1)
{case 1:{delay(40);P1=~P1;}break;

case 2:{delay(20);P1=~P1;}break;
}

}
}

void main()
{
P1=0X00;
while(1)
{delay(20);
P1=~P1;
keyscan();

}

}

参考资料:自己写的,不确定,自己调试下看看

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-20
你可以定义一个全局变量,按下K1变量加1,按下K2变量减1,,同时可以把这个变量输出到数码管上,时间的话,可以用定时器来完成,挺简单的。

请问单片机C51用C语言怎么编这个例子
include <reg52.h> define uchar unsigned char uchar t0,count,NUM,NUM1;sbit K1=P2^0;sbit K2=P2^1;void delay(uchar count){uchar i;for(i=0;i<count;i++){TMOD=0X01;TH0=(65536-50000)%256;TL0=(65536-50000)\/256;TR0=1;while(!TF0);TF0=0;} void keyscan(){ if(K1==0...

c51单片机c语言交通灯的程序
使用C语言为C51单片机编写交通灯控制程序是完全可行的,通过合理地设置定时器、I\/O端口以及逻辑控制,可以实现交通灯的定时切换和状态显示。接下来,我将详细解释如何为C51单片机使用C语言编写交通灯控制程序。首先,我们需要了解C51单片机的基本结构和资源,包括其I\/O端口、定时器\/计数器等。通常,交通灯系...

c语言编程c51单片机
include <reg51.h> define uchar unsigned char define uint unsigned int main(){ uint xdata *xp;\/\/定义指向片外RAM的指针 uint data *p;\/\/定义指向片内RAM的指针 uchar i;\/\/定义循环变量 xp=0x100;\/\/指向片外RAM的100H单元 p=0x30;\/\/指向片内RAM的30H单元 for(i=0;i<10;i++){\/\/...

怎么用c语言编程51单片机读写程序?
编程代码如下:ORG 0000H MOV DPTR,#1000H ;给源数据块地址指针DPTR赋初值 MOV P2, #20H ;给目的数据块地址指针P2和R0赋初值 MOV RO,#00H LOOP: MOVX A, @DPTR .MOVX @RO, A .INC DPTR INC RO CJNE RO,#64H, LOOP SJMP

单片机C51编程(C语言):实现学号的显示(学号是10位数字)
不同的驱动,程序写法不同。如果直接用I\/O口驱动,8位数码管就这样写:wei=位选 duan=段选 \/\/断码表 uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,\/\/0,1,2,3,4,0x92,0x82,0xf8,0x80,0x90,\/\/5,6,7,8,9,0x00,0xff};void led_scan(void){ uchar i,j;\/\/共阳数码管 ...

请高手用单片机C语言编写c51时钟程序,含有6个数显管,3个按键,要自己写...
这是我初学时写的,刚好也是数码管 \/*位选接P2口,三个按钮分别接P25~P27。段码接P1,T0计数 \/ include<reg51.h> define DOU 1818\/\/按键消抖时间sbit led_1=P2^0;sbit led_2=P2^1;sbit led_3=P2^2;sbit led_4=P2^3;sbit led_5=P2^4;sbit dp=P1^7;sbit an_mod=P2^5;sbit...

C51单片机的简单显示程序(有小数点)C语言程序
TL1=0x78;P2=1<<scanled;if(scanled==2)P0=~(ledtab[disdat[scanled]] | 0x80);else P0=~ledtab[disdat[scanled]]; scanled++; scanled%=6;}main(){ TMOD=0x10; TH1=0xec; TL1=0x78; TR1=1; ET1=1; EA=1;while(1);} ...

C51单片机怎么用C语言实现数值的开方和平凡运算?
首先,楼主要明白,C51是基于标准的C语言扩展而来的,所以,标准C语言能做的东西,C51也可以。平方运算,自不必说,就是两个数相乘:例如:float a,b,c; c = a*b;开方,则需要用到库函数:标准c语言里用的是 sqrt()函数,这个函数包含在math.h文件中。所以:include <math.h> c = sqrt(a)...

用C语言如何开51单片机的计数器,最好编个实例程序
void main(){ uint k;TMOD=0X50;\/\/设置模式为1,计数模式 TH1=0X00;TL1=0X00;\/\/初始值设定 IE=0X00;\/\/关全局中断 TR1=1;\/\/开定时计数器1运行 while(1){ if(TL1==16)\/\/进行判断,为16时,计数值归零 TL1=0X00;k=TL1;P0=LED7Code[k];\/\/数码管进行显示 } } 此程序目的见http:\/...

求单片机(c51)外部中断实验的c语言代码或者思路,要求在补充
include<reg51.h>#define uchar unsigned charvoid delay(void){uchar i,j;for(i=0;i<200;i++)for(j=0;j<120;j++);}void ext0() interrupt 0{uchar i;for(i=0;i<8;i++) { P2=0x00; delay(); P2=0xff; delay(); }}main(){uchar i;EX0=1;IT0=1;EA...

相似回答