资源简介

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

评论

共有 条评论