資源簡介
51單片機 CH452驅動數碼管,按鍵,按鍵控制,簡單的按鍵控制程序

代碼片段和文件信息
/******************************************************************************?*?標題:?SYZX_DZ02單片機最小系統板調試源程序?*?*?日期:?2011-07-01?*?*?描述:?在數碼管上顯示‘12345678‘A鍵按下右端兩位顯示按鍵值
B鍵按下循環顯示F鍵按下蜂鳴器報警.(切換前先復位)?*?******************************************************************************/
?#include
#include
#include
#define?CH452_I2C_ADDR1?0x60
#define?CH452_I2C_MASK?0x3E
#define?CH452_GET_KEY?0x0700
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit?P15=P1^5;
sfr?P1M1=0x91;
sfr?P1M0=0x92;
#define?CH452_DIG0?0x0800?//數碼管位0顯示
#define?CH452_DIG1?0x0900?//數碼管位1顯示
#define?CH452_DIG2?0x0a00?//數碼管位2顯示
#define?CH452_DIG3?0x0b00?//數碼管位3顯示
#define?CH452_DIG4?0x0c00?//數碼管位4顯示
#define?CH452_DIG5?0x0d00?//數碼管位5顯示
#define?CH452_DIG6?0x0e00?//數碼管位6顯示
#define?CH452_DIG7?0x0f00?//數碼管位7顯示
sbit?CH452_SDA=P1^6;
sbit?CH452_SCL=P1^7;
sbit?CH452_INT=P3^2;
volatile?uchar?keycode;
volatile?uchar?M;
volatile?uchar?N;
volatile?bit?flag;
void?DELAY_1US()
{
_nop_();
}
void?DELAYms(uint?ms)
{
uchar?i;
while(ms--)
{
for(i=0;i<124;i++);?}
}
void?CH452_I2c_Start(void)//芯片啟動程序?時序
{
EX0=0;
CH452_SDA=1;
CH452_SCL=1;
DELAY_1US();
CH452_SDA=0;
DELAY_1US();
CH452_SCL=0;
DELAY_1US();
}
void?CH452_I2c_Stop(void)
{
CH452_SDA=0;
DELAY_1US();
CH452_SCL=1;
DELAY_1US();
CH452_SDA=1;
DELAY_1US();
DELAY_1US();
EX0=1;
}
void?CH452_I2c_WrByte(unsigned?char?dat)?{
uchar?i;
for(i=0;i!=8;i++)
{
if(dat&0x80)?{CH452_SDA=1;}
?else?
?{CH452_SDA=0;
?}?
DELAY_1US();
CH452_SCL=1;
dat<<=1;
DELAY_1US();
DELAY_1US();
CH452_SCL=0;
DELAY_1US();
}
CH452_SDA=1;
DELAY_1US();
CH452_SCL=1;
DELAY_1US();
DELAY_1US();
CH452_SCL=0;
DELAY_1US();
}
unsigned?char?CH452_I2c_RdByte(void)
{
uchar?dati;
CH452_SDA=1;
dat=0;
for(i=0;i!=8;i++)
{
CH452_SCL=1;
DELAY_1US();
DELAY_1US();
dat<<=1;
if(CH452_SDA)?dat++;
CH452_SCL=0;
DELAY_1US();
DELAY_1US();
}
CH452_SDA=1;
DELAY_1US();
CH452_SCL=1;
DELAY_1US();
DELAY_1US();
CH452_SCL=0;
DELAY_1US();
return(dat);
}
void?CH452_Write(unsigned?short?cmd)
{
CH452_I2c_Start();
CH452_I2c_WrByte((uchar)(cmd>>7)&CH452_I2C_MASK|CH452_I2C_ADDR1);
?CH452_I2c_WrByte((uchar)cmd);
CH452_I2c_Stop();
}
unsigned?char?CH452_Read(void)
{
CH452_I2c_Start();
CH452_I2c_WrByte((uchar)(CH452_GET_KEY>>7)&CH452_I2C_MASK|0x01|CH452_I2C_ADDR1);
keycode=CH452_I2c_RdByte();
CH452_I2c_Stop();
return(keycode);
}
void?CH452_bcd(uchar?ds_bcd)
{
switch(ds_bcd)
{
case?0x40:?M=0x00;?break;?//按鍵0被按下
case?0x41:?M=0x01;?break;??//按鍵1被按下以此類推,主板從下到上,從左到右
case?0x42:?M=0x02;?break;
case?0x43:?M=0x03;?break;
case?0x48:?M=0x04;?break;
case?0x49:?M=0x05;?break;
case?0x4A:?M=0x06;?break;
case?0x4B:?M=0x07;?break;
case?0x50:?M=0x08;?break;
case?0x51:?M=0x09;?break;
case?0x52:?M=0x0A;?break;
case?0x53:?M=0x0B;?break;
case?0x58:?M=0x0C;?break;
case?0x59:?M=0x0D;?break;
case?0x5A:?M=0x0E;?break;
case?0x5B:?M=0x0F;?break;
default:return;
}
}
void?CH452_inter()?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4220??2015-05-17?09:47??實驗按鍵\2.c
?????文件????????8727??2015-05-17?14:42??實驗按鍵\2.LST
?????文件???????13446??2015-05-17?14:42??實驗按鍵\2.OBJ
?????文件???????12203??2015-05-24?13:12??實驗按鍵\anjian
?????文件??????????36??2015-05-17?14:40??實驗按鍵\anjian.__i
?????文件????????4275??2015-05-24?13:12??實驗按鍵\anjian.c
?????文件????????1977??2015-05-24?13:12??實驗按鍵\anjian.hex
?????文件??????????55??2015-05-24?13:12??實驗按鍵\anjian.lnp
?????文件????????8998??2015-05-17?14:40??實驗按鍵\anjian.LST
?????文件???????16508??2015-05-24?13:12??實驗按鍵\anjian.M51
?????文件?????????182??2015-05-29?18:14??實驗按鍵\anjian.plg
?????文件???????56149??2015-05-29?18:15??實驗按鍵\anjian.uvopt
?????文件???????13524??2015-05-15?14:27??實驗按鍵\anjian.uvproj
?????文件???????56153??2015-05-29?15:06??實驗按鍵\anjian_uvopt.bak
?????文件???????????0??2015-05-15?13:58??實驗按鍵\anjian_uvproj.bak
?????文件????????6376??2009-05-07?14:37??實驗按鍵\STARTUP.A51
?????文件???????14043??2015-05-17?14:42??實驗按鍵\STARTUP.LST
?????文件?????????749??2015-05-17?14:42??實驗按鍵\STARTUP.OBJ
評論
共有 條評論