#include <reg52.h> #define CMD_RESET 0xa4 //復(fù)位(清除)指令 #define CMD_TEST 0xbf //測(cè)試指令 #define CMD_READ 0x15 //讀鍵盤(pán)數(shù)據(jù)指令 #define BLINKCTL 0x88 //閃爍控制 #define ACTCTL 0x98 //消隱控制 #define DECODE0 0x80 //下載數(shù)據(jù)且按方式0譯碼 #define DECODE1 0xc8 //下載數(shù)據(jù)且按方式1譯碼 #define UNDECODE 0x90 //下載數(shù)據(jù)但不譯碼 #define SEGON 0xe0 //段點(diǎn)亮指令 #define SEGOFF 0xc0 //段關(guān)閉指令 #define RTL_CYCLE 0xa3 //循環(huán)左移指令 #define RTR_CYCLE 0xa2 //循環(huán)右移指令 #define RTL_UNCYL 0xa1 //左移指令 #define RTR_UNCYL 0xa0 //右移指令 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //*******************變量及I/O口定義********************** sbit cs=P1^0; //7279使能端 sbit clk=P1^1; //7279時(shí)鐘脈沖 sbit dat=P1^2; //7279數(shù)據(jù)端 sbit key=P1^3; //7279鍵位 /**************函數(shù)原型說(shuō)明****************/ void write7279(uchar,uchar); //寫(xiě)入到HD7279 void send_uchar(uchar); //發(fā)送一個(gè)字節(jié) void Init_Timer0(); void short_delay(void); //延時(shí)約8us void long_delay(void); //延時(shí)約50us uchar ucHMiao=0,ucSec=0,ucMin=0,ucHour=0; uchar bflag=0; //1秒標(biāo)記 //uchar ww_led[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70, 0x7F,0x7B,0x77,0x1F,0x4E,0x3D,0x4F,0x47,0x00,0x67}; //0--9的數(shù)碼表 uchar ww_led[]={0xdb,0xc0,0xb3,0xf2,0xe8,0x7a,0x6b,0xd0, 0xfb,0xf8};//0--9的數(shù)碼表 uchar Led_buf[6]={0x5b,0x0f,0x77,0x77,0x0f,0x00};//START十六進(jìn)制代碼 uchar led_buf[]; //***************************************** //發(fā)送數(shù)據(jù)給7279顯示 //***************************************** void send_uchar(uchar out_uchar) { uchar i; cs=0; long_delay(); for(i=0;i<8;i++) { if(out_uchar&0x80) dat=1; else dat=0; clk=1; short_delay(); clk=0; short_delay(); out_uchar=out_uchar*2; } dat=0; } //********************************** // 函數(shù)功能:接收一個(gè)字節(jié) // 形式參數(shù):無(wú) // 返回值 :接收到的字節(jié)in_uchar //********************************** uchar receive_uchar(void) { uchar i,in_uchar; dat=1; //設(shè)為輸入狀態(tài) long_delay(); for(i=0;i<8;i++) { clk=1; short_delay(); in_uchar=in_uchar*2; if(dat) in_uchar=in_uchar|0x01; clk=0; short_delay(); } dat=0; return(in_uchar); } //************************************************ *********** // 函數(shù)功能:往7279發(fā)送一個(gè)不帶數(shù)據(jù)的指令,然后讀出7279的值 // 形式參數(shù):要發(fā)送的指令commond // 返回值 :無(wú) //************************************************ *********** uchar read7279(uchar commond) { send_uchar(commond); return(receive_uchar()); } //***************************************** // 函數(shù)功能:找出鍵值為value的按鍵的鍵號(hào) // 形式參數(shù):鍵值value // 返回值 :查到的鍵號(hào)i //***************************************** uchar get_key_number(uchar value) { uchar i; uchar KEY_CODE[]={ 0x04,0x05,0x06,0x07, 0x0c,0x0d,0x0e,0x0f, 0x14,0x15,0x16,0x17, 0x1c,0x1d,0x1e,0x1f}; //鍵值表 for(i=0;value!=KEY_CODE[i];i++); return i; } uchar Key_Scan(void) { uchar key_value,key_number; if(!key) //如果有鍵按下 { key_value=http://blog.soso.com/qz.q/read7279(CMD_READ); //讀出鍵值 key_number=get_key_number(key_value); //查出鍵號(hào) while(!key);////////////////////////////////////// /////////////////////////////////////////////////// //// return key_number; } else { return (0xff); } } //**************************************** // 函數(shù)功能:往7279發(fā)送一個(gè)帶數(shù)據(jù)的指令 // 形式參數(shù):命令commond(數(shù)碼管位子),數(shù)據(jù)Data(顯示的數(shù)據(jù)) // 返回值 :無(wú) //**************************************** void write7279(uchar commond,uchar Data) { send_uchar(commond); send_uchar(Data); } //*********************** // 函數(shù)功能:延時(shí)約8us // 形式參數(shù):無(wú) // 返回值 :無(wú) //*********************** void short_delay(void) //延時(shí)約8us { uchar i; for(i=0;i<2;i++); } //************************ // 函數(shù)功能:延時(shí)約50us // 形式參數(shù):無(wú) // 返回值 :無(wú) //************************ void long_delay(void) //延時(shí)約50us { uchar i; for(i=0;i<12;i++); } void Disp(uint k) //時(shí)間處理函數(shù) { uchar i; led_buf[0]= k%10; led_buf[1]= k%100/10; led_buf[2]= k%1000/100; led_buf[3]= k%10000/1000; for(i=0;i<4;i++) //顯示6位數(shù)碼管 { write7279(0x90+i,0); //0X90為最右邊數(shù)碼管 write7279(DECODE1+i,Led_buf[i]); //0X90為最右邊數(shù)碼管 } } void int_7279(void) { uchar i; /**********************初始化***********************************/ send_uchar(CMD_RESET); for(i=0;i<8;i++) { write7279(UNDECODE+i,1); } } ![]() |
|
來(lái)自: 金正月 > 《我的圖書(shū)館》