久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
秒表程序
[打印本頁]
作者:
單片機小白1995
時間:
2018-5-8 15:24
標題:
秒表程序
/*
****************************************************************************
* 程序說明 ;使數碼管依次顯示0-8
****************************************************************************
*/
#include "io430.h"
#define uint unsigned int
#define uchar unsigned char
#define KeyPort P1IN //獨立鍵盤接在P60~P63
#define CPU_F ((double)1000000)
#define DelayUs(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define DelayMs(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define KEY1 1
#define KEY2 2
#define KEY3 3
#define KEY4 4
#define KEY5 5
uchar KeyScan(void);
#define SMG_DATA P4OUT //573位選信號的輸入管腳
#define SMG_WEI P5OUT
//#define CLK_H P6OUT|=BIT6 //595時鐘信號的輸入置高
//#define CLK_L P6OUT&=~BIT6 //595時鐘信號的輸入置低
//#define ST_H P6OUT|=BIT5 //595鎖存信號置高
//#define ST_L P6OUT&=~BIT5 //595鎖存信號置低
//#define DATA_H P6OUT|=BIT4 //595數據信號輸入置高
//#define DATA_L P6OUT&=~BIT4 //595數據信號置低
//#define LED_E0 P5OUT&=~BIT7 //數碼管 573使能置低
//#define LED_E1 P5OUT|=BIT6 //點陣 573使能置高
uchar uc7leds[17]={0x3f,0x06,0x5b,0x4f, //0,1,2,3,
0x66,0x6d,0x7d,0x07, //4,5,6,7,
0x7f,0x6f,0x77,0x7c, //8,9,A,b,
0x39,0x5e,0x79,0x71,0x00}; //C,d,E,F
uchar jishu=0;
uchar mode=1;
uchar downtime=1;
void PortInit();
uchar number[4] = {0,0,0,0};
void ClockInit();
void display();
void TimerAInit();
void fentime(int num);
void fenshu(int num);
void main()
{
uint b;
WDTCTL=WDTPW+WDTHOLD;
ClockInit(); //時鐘初始化
TimerAInit();
PortInit();
uchar jishi=0;
uchar keyvalue=0;
uchar zhu=1;
uchar wait=1;
uchar mode2start=0;
while(1)
{
if(b==0)
keyvalue=KeyScan();
//*
if(zhu==1)
{
if(keyvalue==5)
zhu=0;
if(keyvalue==4)
mode++;
if(mode==4)
mode=1;
number[0]=mode+9;
number[1]=16;
number[2]=16;
number[3]=16;
}
else if(mode==1)
{
if(wait)
{
fentime(0);
wait=0;
}
if(keyvalue==1)
{
jishi=!jishi;
if(jishi)
TACTL=TASSEL_1+MC_1+ID_3+TAIE;
else
TACTL=TASSEL_1+MC_0+ID_3+TAIE;
}
}
else if(mode==2)
{
if(!mode2start)
{
if(wait)
{
fentime(60);
wait=0;
}
else
{
if(keyvalue==4)
{
downtime++;
fentime(downtime*60);
}
if(keyvalue==1)
{
mode2start=1;
TACTL=TASSEL_1+MC_1+ID_3+TAIE;
}
}
}
else
{
}
}
if(keyvalue==2)
{
jishi=0;
keyvalue=0;
zhu=1;
wait=1;
mode2start=0;
jishu=0;
mode=1;
downtime=1;
TACTL=TASSEL_1+MC_0+ID_3+TAIE+TACLR;
P2OUT_bit.P0=0;
}
display();
if(keyvalue!=0)
{
b=0x8fff;
keyvalue=0;
}
if(b!=0)
b--;
}
}
/*
****************************************************************************
* PortInit()
* 功能說明 ;IO初始化
* 參數 :無
* 返回值 :無
****************************************************************************
*/
void PortInit()
{
P4SEL=0X00;//普通
P4DIR=0XFF;//輸出
P5SEL=0X00;//普通
P5DIR=0XF0;//輸出
P5OUT=0XFF;
P2SEL = 0x00; //設置IO口為普通I/O模式
P2DIR = 0x01; //設置IO口方向為輸出
P2OUT = 0x00; //初始設置為00,即都為低電平
P1SEL = 0x00;
P1DIR = 0x00;
P4OUT=uc7leds[0];
//P6SEL=0X00;
//P6DIR=0XFF;
//P5SEL=0X00;
//P5DIR=0XFF;
//LED_E1;
//LED_E0;
}
/*
****************************************************************************
* TimerAInit()
* 功能說明 ;定時器A初始化
* 參數 :無
* 返回值 :無
****************************************************************************
*/
void TimerAInit()
{
TACTL=TASSEL_1+MC_0+ID_3+TAIE;//選擇ACK,增計數模式,8分頻,使能定時器中斷
CCR0=4095;
__enable_interrupt();
}
void ClockInit()
{
uchar i;
BCSCTL1&=~XT2OFF; //設置XT2為有效
BCSCTL2|=SELM1+SELS;
do{
IFG1&=~OFIFG; //清除振蕩器失效標志
for(i=0;i<100;i++)
__no_operation();
}while((IFG1&OFIFG)!=0); //如果振蕩失效標志存在則繼續循環
IFG1&=~OFIFG;
}
/*
****************************************************************************
* TimerA()
* 功能說明 ;定時器A中斷處理程序
* 參數 :無
* 返回值 :無
****************************************************************************
*/
#pragma vector = TIMERA1_VECTOR
__interrupt void TimerA(void)
{
switch(TAIV)
{
case 2:break;
case 4:break;
case 10:
jishu++;
if(mode==1)
{
fentime(jishu);
}
else if(mode==2)
{
fentime(downtime*60-jishu);
if(!(downtime*60-jishu))
{
P2OUT_bit.P0=1;
TACTL=TASSEL_1+MC_0+ID_3+TAIE;
}
}
break;
}
}
/*
****************************************************************************
* uchar KeyScan(void)
* 功能說明 ;按鍵檢測
* 參數 :無
* 返回值 :KeyNum:按下的按鍵值
****************************************************************************
*/
uchar KeyScan(void)
{
uchar keycode;
static uchar sta=0; //不支持連續按
//uchar sta=0; //支持連按
uchar tmp=0;
P1DIR |= 0X1f;
P1OUT = 0X1f;
P1DIR &= 0xe0; //設置P10 P11 P12為輸入
if(sta==0) //sta=0 時檢測按鍵是否按下
{
if((P1IN&0X1f)!=0X1f) // 掃描按鍵
{
DelayMs(10);
if((P1IN&0X1f)!=0X1f) //確認按鍵按下
{
keycode=(P1IN&0X1f);
switch(keycode) //確認按鍵
{
case 0x1e:tmp=1;;break;
case 0x1d:tmp=2;;break;
case 0x1b:tmp=3;;break;
case 0x17:tmp=4;;break;
case 0x0f:tmp=5;;break;
default : ;break;
}
sta=1;
}
}
}
else if((P1IN&0X1f)!=0X1f) // 確定按鍵是否松開
{
DelayMs(10);
if((P1IN&0X1f)!=0X1f) //若是按鍵松開,sta = 0;
sta=0;
}
return tmp; //返回按下的按鍵數
}
void fenshu(int num)
{
number[0]=num%10;
number[1]=(num%100)/10;
number[2]=(num%1000)/10;
number[3]=num/1000;
}
void fentime(int num)
{
number[0]=(num%60)%10;
number[1]=(num%60)/10;
number[2]=(num/60)%10;
number[3]=(num/60)/10;
}
void display() //數碼管顯示
{
static uchar i=0;
i++;
if(i >= 4)
i = 0;
P4OUT =0x00; //消隱
switch(i) //位選
{
case 3: SMG_WEI=0x10; break;
case 2: SMG_WEI=0x20; break;
case 1: SMG_WEI=0x40; break;
case 0: SMG_WEI=0x80; break;
}
P4OUT = uc7leds[number
];
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲大片
|
日本一区二区高清不卡
|
亚洲一区二区在线电影
|
三极网站
|
国产传媒视频在线观看
|
国产在视频一区二区三区吞精
|
国产一区二区三区久久
|
日本久久网
|
国产一区二区在线播放
|
一级黄色日本片
|
欧美男男videos
|
日韩视频在线一区
|
99re6在线视频精品免费
|
国户精品久久久久久久久久久不卡
|
精品国产乱码久久久久久蜜退臀
|
欧美精品国产精品
|
中文字幕日韩三级
|
chengrenzaixian
|
欧美一级精品片在线看
|
欧美精品tv
|
精品久久电影
|
成人三级网址
|
欧美日韩毛片
|
在线一区二区国产
|
日韩免费在线观看视频
|
国产一区二区影院
|
国产成人精品久久二区二区
|
日韩在线视频一区
|
古装三级在线播放
|
欧美在线观看一区
|
av手机在线免费观看
|
亚洲欧美激情精品一区二区
|
婷婷综合网
|
国产在线观看一区二区
|
二区国产
|
久色网
|
一级在线观看
|
日韩精品一区二区三区久久
|
国产激情一区二区三区
|
欧美激情精品久久久久久变态
|
国产伦一区二区三区
|