投票计票系统 最少焊点法应用之九
//晶振11.0592M定时器0定时,方式1,25ms常数a600,10ms常数dc00,5ms常数ee00,1ms常数fc66,//2011年3月7日 应网友要求而写,作者:徐学军
//投票计票系统
//以拨动开关K0~K7作一个8人的投票器,拨成ON的为投了赞成票,
//准备阶段(等待投票)4只数码管循环轮流显示P(跑马),
//投票后,以按中断键完成读票,4个数码管
//齐亮齐灭闪烁亮5次赞成票的票数。再次按中断键,恢复等待投票状态。
#include<absacc.h>
#include<intrins.h>
#include<reg52.h>
sbit P1M1 = 0x91 ;
sbit P1M0 = 0x92 ;
sfr smdis = 0x80;
// sfr P4 =0xC0; //定义P4口,
//sfr P4SW=0xBB; //P4口的设置寄存器
sbit dq=P2^0; //DS18B20的数据接口
//sbitled =P3^7;
sbitled =P1^0;
sbitweishuang0=P2^6; //数码管第一个位选
sbitweishuang1=P2^3; //数码管第二个位选
sbitweishuang2=P2^4; //数码管第三个位选
sbitweishuang3=P2^5;//数码管第三个位选
sbitpp0=P1^0;//第一个投票按键
sbitpp1=P1^1;//第二个投票按键
sbitpp2=P1^2;//第三个投票按键
sbitpp3=P1^3;//第四个投票按键
sbitpp4=P1^4;//第五个投票按键
sbitpp5=P1^5;//第六个投票按键
sbitpp6=P1^6;//第七个投票按键
sbitpp7=P1^7;//第八个投票按键
sbitspeaker=P3^6;//第八个投票按键
unsigned charshup ,w;
unsigned char time,time5;
bit flagstart;//投票开始标志
bit flagflash;//投票后闪标志
unsigned char code md[]={0xaf,0xa0,0xcd,0xe9,0xe2,0x6b,0x6f,0xa1,0xef,0xe3,
0xbf,0xb0,0xdd,0xf9,0xf2,0x7b,0x7f,0xb1,0xff,0xf3,0x40,0x00,0xc7};
//0,1,2,3,4,5,6,7,8,9,1.,2.,3.,4.,5.,6.,7.,8.,9., -,灭 ,P;
unsigned charshu0,shu1,shu2,shu3,tc=0;
unsigned charab={0,0,0,0,0,0,0,0};
//-----变量定义-----
void delayt(unsigned intt)//延时约11us
{
unsigned inti;
unsigned intj;
for(i=t;i>0;i--)
{
for(j=0;j<5;j++);
}
}
/*
void delayta(unsigned chart)//延时约11us
{
unsigned chari;
unsigned intj;
for(i=t;i>0;i--)
{
for(j=0;j<5;j++);
}
}
void delayt(unsigned chart) //延时约7us
{
unsigned chari;
for(i=t;i>0;i--)
{
if(tc==0) { smdis=md; weishuang0=0; weishuang1=1; weishuang2=1; }
if(tc==1) { smdis=md; weishuang0=1; weishuang1=0; weishuang2=1; }
if(tc==2) { smdis=md; weishuang0=1; weishuang1=1; weishuang2=0; }
}
}
*/
voidint_t0()interrupt1
{
TR0 =0;
time++;
if(time>=200)
{
flagflash=!flagflash;
time=0;
}
tc++;
if(tc>=4) {tc=0;}
TH0 =0xee;
TL0 =0x00;
if((!flagstart)&&flagflash&&(time5<5))
{shu0=21; shu1=21;shu2=21; shu3=21;time5++;speaker = 1;}
if(tc==0) { smdis=md; weishuang0=0; weishuang1=1; weishuang2=1;weishuang3=1;}
else if(tc==1) { smdis=md; weishuang0=1; weishuang1=0; weishuang2=1; weishuang3=1; }
else if(tc==2) { smdis=md; weishuang0=1; weishuang1=1; weishuang2=0; weishuang3=1; }
else if(tc==3) { smdis=md; weishuang0=1; weishuang1=1; weishuang2=1; weishuang3=0;}
TR0 =1;
}
voidint_x0()interrupt0
{
EX0 = 0;
//delayt(20000);
flagstart = !flagstart;
if(!flagstart)
{ time5 = 0;
shup = 0;
for(w=0;w<8;w++)
{
if(ab>0)
{
shup++;
ab=0 ;
}
}
}
delayt(20000);
EX0 = 1;IE0 = 0;
}
voidinit_mcu()
{
TMOD=0x01;//定时器0方式1
TH0 =0xee;//0xa6;//25ms定时常数
TL0 =0x00;
EA=1;
ET0 =1;
EX0 =1;
IT0 = 1;
P1M1 = 0xff ;
P1M0 = 0x00 ;
PT0=1;PX0=0;
TR0 =1;
tc=0;
//P4SW=0xff;//把P4口设置成I/O口
shu0=shu1=shu2=shu3=0;
}
void main() //主函数
{
unsigned int num;
init_mcu();
flagstart = 1;//投票开始标志
speaker = 0;
while(1)
{
if(flagstart)
{
P1 = 0xff;
if(!pp0)ab = 1;
if(!pp1)ab = 1;
if(!pp2)ab = 1;
if(!pp3)ab = 1;
if(!pp4)ab = 1;
if(!pp5)ab = 1;
if(!pp6)ab = 1;
if(!pp7)ab = 1;
num++;
if(num<=10000)
{
shu0=21; shu1=21;shu2=21; shu3=22;
}
else if((num>10000)&&(num<=20000))
{
shu0=21; shu1=21;shu2=22; shu3=21;
}
else if((num>20000)&&(num<=30000))
{
shu0=21; shu1=22;shu2=21; shu3=21;
}
else if((num>30000)&&(num<=40000))
{
shu0=22; shu1=21;shu2=21; shu3=21;
}
else if((num>40000)&&(num<=50000))
{
shu0=21; shu1=21;shu2=21; shu3=21;
}
else {num = 0;}
}
else
{
//ab = 0; ab = 0; ab = 0; ab = 0; ab = 0; ab = 0; ab = 0; ab = 0;
shu0=21; shu1=21;shu2=21; shu3=shup; speaker = 0;
}
////// ////shu0=0; shu1=1;shu2=2; shu3=3;
}
}
努力,努力,再努力!!!!!!!!!!! 说的不错 先看看怎么样! 我的妈呀,爱死你了 回帖赚分哈哈 太棒了! 小心大家盯上你哦 厉害!强~~~~没的说了! 真的有么 真好。。。。。。。。。 一个有信念者所开发出的力量,大于99个只有兴趣者。 不错啊! 一个字牛啊! 鉴定完毕.! 拿分走人呵呵,楼下继续!