欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機籃球計分器設計
[打印本頁]
作者:
kernelcc
時間:
2018-12-23 13:51
標題:
單片機籃球計分器設計
33.jpg
(259.61 KB, 下載次數: 18)
下載附件
2018-12-23 13:51 上傳
#include <reg51.h>
#include "intrins.h" //_nop_();延時函數用
#define uchar unsigned char
#define uint unsigned int
#define Lcd_Port P3 //定義數據端口
#define KEY_IO P0 //鍵盤接口
sbit RS = P2^1; //定義和LCM的連接端口
sbit RW = P2^2;
sbit E = P2^5;
sbit Busy = P3^7;
sbit speaker=P1^0;
uchar data keytemp,key;
uchar L=0;
uchar k=0;
uchar c = 0;
uchar b=0;
uchar j=0;
uchar e=1;
uchar d = 0;
uchar hour =24;
uchar hour1=0;
uchar min = 11;
uchar sec = 59; //賦初值
uchar data flag=0x00;
bit flag_key=0;
uchar code Lcddata[] ={"0123456789:"};
//uchar codeLcddata[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/******************************************************************************************
* 函數名稱 :Timer0Init
* 功能描述 :定時器0初始化
******************************************************************************************/
void Timer0Init(void)
{
TMOD=0x11;
TH0 = 0x3c;
TL0 = 0xb0;
TH1=-10300/256;
TL1=-10300%256; //25MS定時初值(T1計時用)
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
}
/******************************************************************************************
* 函數名稱 :IsrTimer0
* 功能描述 :T0 50mS中斷程序
******************************************************************************************/
void IsrTimer0(void) interrupt 1 using 1//T0 50mS中斷程序
{
static uchar count = 0;
TH0 = 0x3c;
TL0 = 0xb0;
count++;
if(count ==20) //定時1s時間到
{
count = 0;
sec--;
if(sec == 0) //1分鐘時間到
{
if(min == 0) //1小時時間到
{
min = 0;
EA=0;
speaker=~speaker;
}
else
{
sec= 59;
min--;
}
}
}
}
void IsrTimer1(void) interrupt 3 using3//T1 50mS中斷程序
{uchar i=0,m=0,a=0;
static uchar ta20ms= 0;
TH1=-10300/256;
TL1=-10300%256;
ta20ms++;
if(ta20ms== 1 ) //定時1s時間到
{
ta20ms=0;
hour1--;
if(hour1 ==-1) //1分鐘時間到
{
hour--;hour1 =99;
if(hour==0)
{
hour=24;hour1=0;
k=1;
//EA=0;
L=1;
speaker=~speaker;
while(a<=2){
while(m<=225){for(i=0;i<=225;i++)
a++;m++;}}
speaker=1;}
}
}
}
/******************************************************************************************
* 函數名稱 :Delay
* 功能描述 :延時子程序,延時 (1MS*t) S
******************************************************************************************/
void Delay(uchar t)
{
uchar a;
while(t-- != 0)
{
for(a = 0; a < 125; a++);
}
}
/******************************************************************************************
* 函數名稱 :Read_Busy
* 功能描述 :讀忙信號判斷
******************************************************************************************/
void Read_Busy(void)
{
uchar i=50;
Lcd_Port=0xff;
RS= 0;
RW= 1;
E= 1;
while((i--)&&Busy);
E=0;
}
/******************************************************************************************
* 函數名稱 :Write_Comm
* 功能描述 :寫指令函數 ok
******************************************************************************************/
void Write_Comm(uchar lcdcomm)
{
Read_Busy();
RS = 0;
RW = 0;
E = 1;
Lcd_Port=lcdcomm;
E = 0;
}
/******************************************************************************************
* 函數名稱 :Write_Char
* 功能描述 :寫字符函數 ok
******************************************************************************************/
void Write_Char(uint num)//寫字符函數
{
Read_Busy();
RS = 1;
RW = 0;
E = 1;
Lcd_Port = Lcddata[num];
E = 0;
}
/******************************************************************************************
* 函數名稱 :Write_Data
* 功能描述 :寫數據函數 ok
******************************************************************************************/
void Write_Data(uchar lcddata)
{
Read_Busy();
RS = 1;
RW = 0;
E = 1;
Lcd_Port = lcddata;
E = 0;
}
/******************************************************************************************
* 函數名稱 :Init_LCD
* 功能描述 :初始化LCD
******************************************************************************************/
void Init_LCD(void)
{
//Delay(400); //稍微延時,等待LCM進入工作狀態(tài)
Write_Comm(0x38); //8位2行5*8
Write_Comm(0x0c); //顯示開/關,光標開閃爍開
Write_Comm(0x01); //清顯示
Write_Comm(0x06); //文字不動,光標右移
Write_Comm(0x02); //光標歸位
}
/******************************************************************************************
* 函數名稱 :Show_Time
* 功能描述 :LCD上顯示當前時間
******************************************************************************************/
void Show_Time(void)
{
Write_Comm(0x80+0x08); //顯示首地址
Write_Char( hour / 10 );//顯示小時
Write_Char( hour % 10 );
Write_Char( 10 ); //顯示:
Write_Char( hour1 / 10 );//顯示小時
Write_Char( hour1 % 10 );
Write_Comm(0x80+0x4b);
Write_Char( min / 10 ); //顯示分鐘
Write_Char( min % 10 );
Write_Char( 10 ); //顯示:
Write_Char( sec / 10 ); //顯示秒
Write_Char( sec % 10 );
Write_Comm(0x80+0x45);
Write_Char( c / 10 );
Write_Char( c % 10 );
Write_Comm(0x85);
Write_Char(d / 10 );
Write_Char(d % 10 );
}
//***************按鍵掃描函數/*************
void keyscan()
{
uchar i,t=0xef,temp=0; //1110 1111
KEY_IO=0x0f;
keytemp=(~KEY_IO)&0x0e;
if(keytemp!=0) //0000 0000 ;0000 1000; 00000100; 0000 0010; 0000 0001;
{
Delay(20);
for(i=0;i<4;i++)
{
KEY_IO=t;
keytemp=(~KEY_IO)&0x0e;
if(keytemp!=0&flag_key==0)
{
flag_key=1;
switch(keytemp)
{
case 0x08:key=0*3+i;break;
case 0x04:key=1*4+i;break;
case 0x02:key=2*4+i;break;
default:break;
}
switch(key)
{
case0:{c++; j=1;if(c>=99){ Write_Comm(0x84);Write_Data('1');d=0;}b=0;}break;
case 1:{c++;c++; j=1;if(c>=99){Write_Comm(0x84);Write_Data('1');d=0;}b=0;}break;
case 2:{c++;c++;c++;if(c>=99){Write_Comm(0x84);Write_Data('1');d=0;} j=1;b=0;}break;
case 4:{d++;if(d>=99){Write_Comm(0x80+0x44);Write_Data('1');c=0;};b=1;j=0;}break;
case 5:{d++;d++;if(d>=99){Write_Comm(0x80+0x44);Write_Data('1');c=0;}b=1;j=0;}break;
case 6:{d++;d++;d++;if(d>=99){Write_Comm(0x80+0x44);Write_Data('1');c=0;}b=1;j=0;}break;
case 8:{if(b==1){d--;if (d==0)d=0;};if(j==1) c--;}break;
case 9:if(k==1)hour=24;EA=~EA;speaker=1;L=0;k=0;break;
case 10: e++;if(e==5)e=1;Write_Comm(0x80+0x0d);Write_Char(e%10); break;
case 3:{ Write_Comm(0x80);
Write_Data('C');
Write_Data('B');
Write_Data('A');
Write_Data(':');
Write_Comm(0x80+0x0d);
Write_Char(e%10);
Write_Data('S');
Write_Data('t');
Write_Comm(0x80+0x40);
Write_Data('N');
Write_Data('B');
Write_Data('A');
Write_Data(':');
temp=c;
c=d;
d=temp;
}break;
case 7:{ Write_Comm(0x80);
Write_Data('N');
Write_Data('B');
Write_Data('A');
Write_Data(':');
Write_Comm(0x80+0x0d);
Write_Char(e%10);
Write_Data('S');
Write_Data('t');
Write_Comm(0x80+0x40);
Write_Data('C');
Write_Data('B');
Write_Data('A');
Write_Data(':');
temp=c;
c=d;
d=temp;}break;
default:break;
}
}
t=(t<<1)|0x01;
}
}
else flag_key=0;
}
/******************************************************************************************
* 函數名稱 :main
* 功能描述 :主函數
******************************************************************************************/
void main(void)
{
Init_LCD(); //初始化 LCM
Timer0Init(); //初始化定時器
Write_Comm(0x80);
Write_Data('N');
Write_Data('B');
Write_Data('A');
Write_Data(':');
Write_Comm(0x80+0x0d);
Write_Char(e%10);
Write_Data('S');
Write_Data('t');
Write_Comm(0x80+0x40);
Write_Data('C');
Write_Data('B');
Write_Data('A');
Write_Data(':');
while(1)
{
Show_Time(); //顯示時間
keyscan();
}
}
復制代碼
作者:
Ginger001
時間:
2019-7-3 19:46
有沒有源程序和原理圖的打包阿,急求,有的大兄弟回復下,最近作業(yè)要用,急
作者:
chenlang12
時間:
2020-1-9 18:11
這代碼運行有誤啊
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1