資源簡介
附有實驗板原理圖,主要是51單片機利用8255擴展IO口,利用8255接入獨立按鍵,矩陣鍵盤,并有一個詳細的秒表程序,秒表有開始(繼續)、記錄數據、查詢數據、復位功能,四位數碼管動態顯示分秒,兩個數碼管通過串行輸入顯示秒的下一個單位。

代碼片段和文件信息
//程序名:KeyBoard_8255_Apply
//功能描述:1.開機后,按下OPEN(K12)顯示HELLO-;
//2.按下RUN(K13)后,后兩位開始計數00-99;
//3.按下STOP(K15)后,停止運行,繼續顯示HELLO-?;
//4.按下+1(K14)后,對四位數碼管的最后一位做+1調整,0-9;
//硬件電路,J8中1,3短接,獨立按鍵
//調用函數:Disp_HELLO();Disp_number();Disp_increment();
//Set_Init_Timer1();Delayx1ms(uint?cout);
#include
#include
#define?uchar?unsigned?char
#define?uint??unsigned?int
#define?COM8255?XBYTE[0XFFFF]
#define?PA8255??XBYTE[0XFFFC]
#define?PB8255??XBYTE[0XFFFD]
#define?PC8255 XBYTE[0XFFFE]
sbit?P1_2?=?P1^2;
sbit?P1_1?=?P1^1;
sbit?P1_0?=?P1^0;
sbit?SLCK?=?P2^4;
//函數聲明?
void?Disp_HELLO();
void?Disp_number();
void?Set_Init_8255();
void?Delayx1ms(uint?count);
void?Set_Init_Timer1();
void?Disp_increment();
uchar?code?dis_HELL[]={0x890x860xc70xc7};?????//四位數碼管HELL
uchar?code?dis_number[]={0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf6};?//四位串并轉換控制數碼管0-9
uchar?code?dis_count[]={0xc00xf90xa40xb00x990x920x820xf80x800x900xff};//四位數碼管0-9,
uchar?number=0numberhnumberli=0j=0;
void?main()
{
???Set_Init_Timer1();
??do{
???????Set_Init_8255();
??switch(PB8255)
??{
????case???????0xef:??Disp_HELLO();?break;?//K12按下
case???????0xdf:??TR1=1;?Disp_number();?break;?//K13按下
case???????0xbf:??Disp_increment();?break;?//K14按下
case???????0x7f:??Disp_HELLO();?break;?//K15按下
??}
????}while(1);
}
?void?Set_Init_Timer1() //定時器1初始化
?{
?? TMOD?=0X10;????//Timer?1Moder?1
TH1??=0X3C;????//50ms定時
TL1??=0XB0;
EA???=1;
ET1??=1;
?}
?/*******************************************************/
?//函數名:Run_Timer1() interrupt?3?using?1
?//功能:利用定時器精確定時50ms
?//說明:定時器1中斷服務程序
?/*******************************************************/
?Timer1_int() interrupt?3?using?1
?{
???static?unsigned?char?count?=0;
???TH1??=0X3C; //50ms定時
???TL1??=0XB0;
???count?++;
??????if(count?==20) ??//每秒時間到
??{
??????number++;
??count?=0;
??if(number==99) ?
??{
????number=0;
??}
??}
?}
?/******************************************************/
?//函數名:Disp_HELLO();
?//功能:動態顯示HELL串行口移位寄存器工作顯示o-
?//調用函數 ??Delayx1ms(5)
?/******************************************************/
?void?Disp_HELLO()
?{ TR1=0;
???P1=0x7f; //四位數碼管顯示
???P2=dis_HELL[0];
???Delayx1ms(1);?
???P1=0xbf;
???P2=dis_HELL[1];
???Delayx1ms(1);?
???P1=0xdf;
???P2=dis_HELL[2];
???Delayx1ms(1);?
???P1=0xef;
???P2=dis_HELL[3];
???Delayx1ms(1);?
???SCON=0X00;??//串口方式0工作
???SBUF=0XFC;??//發送0字符
???while(!?TI);
???TI=0;
???SLCK=0;?
???SLCK=1; ???//產生上升沿,將74HC595存儲器數據輸出
???SBUF=0X02;??//發送-?字符
???while(!?TI);
????TI=0;
???SLCK=0;?
???SLCK=1; ???//產生上升沿,將74HC595存儲器數據輸出
???for(i=0;i<0xff;i++);//調整數碼管顯示效果
?}
?/************************************************************************/
?//函數名:void?Delayx1ms(uint?count);
?//功能:延時時間為1ms
?//輸入參數,1ms計數
?//說明:總共延時時間為1ms?x?count
?/*********************************************************************/
void?Delayx1ms(uint?c)
{
??uint?j;
??while(c--!=0)
??{
??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4383??2014-07-24?15:39??實驗板程序設計\8255?IO擴展.c
?????文件????????3384??2014-07-24?15:53??實驗板程序設計\99s計時器.c
?????文件??????262551??2014-07-27?23:11??實驗板程序設計\實驗板(實用版).DSN
?????文件????????3723??2014-07-24?15:34??實驗板程序設計\矩陣鍵盤.c
?????文件????????4333??2014-07-27?14:10??實驗板程序設計\秒表.c
?????目錄???????????0??2014-07-29?10:43??實驗板程序設計\
評論
共有 條評論