標(biāo)題:
單片機(jī)中斷骰子實(shí)驗(yàn)原理圖與源碼
[打印本頁(yè)]
作者:
再組
時(shí)間:
2018-6-18 15:04
標(biāo)題:
單片機(jī)中斷骰子實(shí)驗(yàn)原理圖與源碼
QQ截圖20180618150238.png
(24.82 KB, 下載次數(shù): 34)
下載附件
2018-6-18 15:02 上傳
單片機(jī)源程序如下:
#include<reg52.h>
sbit P13=P1^3;
sbit P12=P1^2;
sbit P11=P1^1;
sbit P10=P1^0;
sbit led=P2^7;
sbit key0=P3^7;
sbit key1=P3^6;
sbit key2=P3^5;
unsigned char hour,min,sec,T50ms;
unsigned char modstate
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}
//unsigned char code tablemin[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82}
void init();
void delay500us(unsigned char X)
void display();
void display001();
void display002();
void keyscan();
void main()
{
init();
while(1)
{
keyscan();
}
}
void init()
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
ET0=1;
EA=1;
TR0=1;
}
void delay500us(unsigned char X)
{
unsigned char i,j;
for(i=X;i>0;i--)
for(j=248;j>0;j--);
}
void timer0() interrupt 1
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
T50ms++;
if(T50ms>=20)
{
T50ms=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)hour=0;
}
}
}
}
void display()
{
P1=0xff;
P0=table[hour/10];
P10=0;
delay500us(5);
P1=0xff;
P0=table[hour%10];
P11=0;
delay500us(5);
P1=0xff;
P0=table[min/10];
P12=0;
delay500us(5);
P1=0xff;
P0=table[min%10];
P13=0;
delay500us(5);
if(T50ms<=10)led=0;
if(T50ms>10)led=1;
}
void display001()
{
P1=0xff;
P0=table[hour/10];
P10=0;
delay500us(10);
P1=0xff;
P0=table[hour%10];
P11=0;
delay500us(10);
}
void display002()
{
P1=0xff;
P0=table[min/10];
P12=0;
delay500us(10);
P1=0xff;
P0=table[min%10];
P13=0;
delay500us(10);
}
void keyscan() //???????
{
while(modstate==0)
{
display();
if(key0==0)
{
display();
if(key0==0)modstate++
while(key0==0)display001()
}
}
//****************************************************************************//
while(modstate==1)
{
display001();
if(key0==0)
{
display001();
if(key0==0)modstate++;
while(key0==0)display002()
}
if(key1==0)
{
display001();
if(key1==0)
{
hour++;
if(hour>=24)hour=0;
while(key1==0)display001();
}
}
if(key2==0)
{
display001();
if(key2==0)
{
hour--;
if(hour>=24)hour=0;
while(key2==0)display001();
}
}
}
//****************************************************************************//
while(modstate==2)
{
display002();
if(key0==0)
{
display002();
if(key0==0)modstate=0; //??????????10ms???????
while(key0==0)display(); //???????
}
if(key1==0)
{
display002();
if(key1==0)
{
min++;
if(min>=60)min=0;
while(key1==0)display002();
}
}
if(key2==0)
{
display002();
if(key2==0)
{
min--;
if(min>=60)min=0;
while(key2==0)display002();
}
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1