按键、数码管显示、定时器C语言程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ircut2=0;
vcc1=1;
//电压切换初始化(12V)
vcc2=1;
led1=0;
//LED 灯初始化(12V)
P1=0xf0; //数码管初始化
P0=0xd7;
TMOD=0x11; //定时器初始化
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
}
if(k1==3) //第三次为 12V
{
vcc1=1;
vcc2=1;
led1=0;
led2=1;
led3=1;
}
while(!key1);
//等待按键释放
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
TR0=~TR0; //开始、停止定时器 0
//
TR1=~TR1;
ircut1=0;
} } /*void timer1() interrupt 3 {
TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1++; if(t2==50)
{ t1=0;
}
Baidu Nhomakorabea} */
void init()
{
t0=0; //定时器初始化
// t1=0;
ircut1=0; //IRCUT 初始化
// 定时器 0
TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; if(t0==50)
{ t0=0; shu++; ircut1=!ircut2; //起动 IRCUT ircut1=~ircut1; ircut2=~ircut2; if(shu==9999) //数码管跑到 9999 时,保持显示 9999。 { TR0=0; }
while(!key4);
if(k4!=0)
{
ircut1=0;
ircut2=0;
}
}
}
#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit ircut1=P2^2; sbit ircut2=P2^3; sbit key1=P1^4; sbit key2=P1^5; sbit key3=P1^6; sbit key4=P1^7; sbit vcc2=P2^0; sbit vcc1=P2^1; sbit led1=P3^2; sbit led2=P3^3; sbit led3=P3^4; uchar code table[]={ 0xd7,0x14,0xcd,0x5d, 0x1e,0x5b,0xdb,0x15, 0xdf,0x5f}; uint t0,t1,shu,k1,k4,cc,bai,shi,ge; void display(uint,uint,uint,uint,uint); void delay(uint z); void keyscan(); void init(); void main() {
//数码管显示
P1=0xf7; P0=table[qq]; delay(1);
//千位显示
P1=0xfb; P0=table[ba]; delay(1);
//百位显示
P1=0xfd; P0=table[sh]; delay(1);
//十位显示
P1=0xfe;
//个位显示
P0=table[g];
delay(1);
TL1=(65536-50000)%256;
EA=1; ET0=1; ET1=1;
}
void display(uint shu,uint qq,uint ba,uint sh,uint g) {
cc=shu/1000; //四位显示 bai=shu%1000/100; shi=shu%100/10; ge=shu%10;
}
void keyscan() //键盘扫描
{
if(key1==0)
//第一个按键
{
delay(10);
if(key1==0)
//去抖动
{
k1++;
if(k1==4) //接第一个按键循环检查(3)次
{
k1=1;
}
if(k1==1) //第一次为 5V
{
vcc1=0;
vcc2=1; led2=0; led1=1; led3=1; } if(k1==2) //第二次为 3。3V { vcc1=0; vcc2=0; led3=0; led1=1; led2=1;
init(); while(1) {
display(shu,cc,bai,shi,ge); keyscan(); } }
void delay(uint z)
//延时时间
{
uint x,y;
for(x=z;x>0;x--)
for(y=230;y>0;y--);
}
void timer0() interrupt 1 {
if(key4==0)
{
k4++;
if(k4==3)
{
k4=1;
}
if(k4==1)
//数码管每加 1,IRCUT 工作一次
{
ircut1=1;
ircut2=0;
}
if(k4==2)
{
ircut1=0;
ircut2=1;
}
}
TR0=0;
//
TR1=0;
if(shu==9999)
TR0=0;
//
TR1=0;
ircut2=0;
while(!key2); } } if(key3==0) { delay(10); if(key3==0)
{ shu=0;
//清零
t0=0;
//
t1=0;
ircut1=0;
ircut2=0;
while(!key3);
}
}
if(key4==0)
{
delay(10);
shu++;
//每按一键数码管加 1