虚短 理解成短路,两输入端视为等电位,正负输入端电压相等。电压相等。虚断 理解成短路,两输入端视为开路,流入正负输入端电流为0,电流为0
20lg放大倍数=电压增益
双向口,推挽输出,高阻输入,开漏输出 存储器容量:数据线位数×2的地址线次方
只有超声波是 12T 时钟过去的 = 现在的;现在的 = 采集到的;
超声波(0,0)、NE555(2,1;1,5)、数码管(2,1)
串口(1,波)、NE555(2,1;0,5)、数码管(2,1)
串口在NE555:在串口发送完数据之后,再加一句“t_flag=1;”
串口(1,波)、超声波(0,0)、数码管(2,1)
EEPROM_write(ADD,wendu); Delayms(2); ADD++; if(ADD==n) ADD=0X00;
n:数据总个数+1(组)再转换为16进制(1组数据里面有1个就+1,有6个就+6)
遇到多数据存储 读出来数据不对的,可以把读存储的程序放在while循环内
双击原理:在原来长按短按的基础上修改。增加一个总计时标志位和记录按下次数的变量。
按键一按下,总计时标志位置1,总计时开始计时,直到1100毫秒结束,
并将总计时标志位置2。判断时满足两个条件:总计时标志位置2和按键松开。
然后对记录按下次数 分为 1次和2次进行判断,一次的再判断长按还是短按。
/*****************************NE555*****************************/
uchar t_flag=0;
uint zheng,fan,zheng_now,fan_now,intr, time_zheng,time_fan;//正反周期
void timer0() interrupt 1// 5微秒,关掉TR0/1
{ if(P34==0) {fan++; if(t_flag==0) {t_flag=1;zheng_now=zheng;zheng=0;} }
else if(P34==1) {zheng++; if(t_flag==1) {t_flag=0;fan_now=fan;fan=0;} } }
void timer1() interrupt 3// 1毫秒
{ intr++; if(intr==969) {TR0=1;ET0=1;}
else if(intr==999) {intr=0;TR0=0;ET0=0;T=(fan_now+zheng_now)*5;frep=1000000/T;} }
/***************************串口************************/
#include sbit TX = P1^0; sbit RX = P1^1; bit receive_over=0;
unsigned char TX_chuankou[] = "A\r\n";//发送一组数据
unsigned char RX_chuankou[4],receive_num=0,chuanshu_shuju=0;uchar receive_tt=0;
void UART1() interrupt 4 //串口1中断
{ if(RI)//RI 不为0
{ RX_chuankou[receive_num] = SBUF; receive_num++;
receive_tt=1;//每接收到一次数据,就让接收计时变量置1. RI=0; }
if(receive_over==1)//数据接收完成之后 进行判断
{ if((RX_chuankou[0]=='S')&(RX_chuankou[1]=='T')) {chuanshu_shuju=1;}
else if((RX_chuankou[0]=='A')&(RX_chuankou[1]=='A')) {chuanshu_shuju=2;} }
}
void UART_TX(unsigned char *p)//发送数据函数,发送数组的话,这里就要定义一个指针
{ unsigned char index=0; //应用于:单片机向电脑发送数据
do { SBUF=p[index++];while(TI == 0);TI = 0;//发送完,置0 } while(p[index]!=0); }
中断2中添加:if(receive_tt>=1)
{ receive_tt++; if(receive_tt>=30) {receive_tt=0;receive_over=1;//接收数据完毕} }
while循环中添加:if(chuanshu_shuju==1)
{ sprintf((char*)TX_chuankou,"ONE\r\n"); UART_TX(TX_chuankou);
chuanshu_shuju=0;receive_over=0;receive_num=0; }
else if(chuanshu_shuju==2)//查询参数指令
{ sprintf((char*)TX_chuankou,"TWO\r\n"); UART_TX(TX_chuankou);
chuanshu_shuju=0;receive_over=0;receive_num=0; }
while循环前添加:UartInit();ES=1;EA=1;
波特率生成器生成
/******超声波*****16微秒延时;0微秒定时器 注释TR0/1*******/
#include sbit TX = P1^0; sbit RX = P1^1;
unsigned int LCM_tt=0,LCM = 0,LCM_Time=0;//间隔多长时间进行一次超声波测量
bit LCM_Ref = 0 ;//超声波开始测量的标志位
中断2里面添加:if(++LCM_tt==300) {LCM_tt=0;LCM_Ref=1;}
void Send_wave() //发送超声波信号
{ uchar i=8; do{TX=1;Delay16us(); TX=0;Delay16us();} while(i--); }
void Csb_work()//这个放在 while 循环里面
{ if(LCM_Ref==1)
{ LCM_Ref=0; Send_wave(); TR1=1; while((RX==1)&&(TF1==0));
TR1=0; if(TF1==1) {TF1=0; LCM=9999;}
else
{// 定时器计数一次需要 1/1000000秒(1/12000000/12)(12M晶振),
LCM_Time = TH1;LCM_Time <<= 8;LCM_Time |= TL1;
LCM=(uint)(LCM_Time*17/1000);
// 总共计数了 LCM_Time次。LCM_Time * 1/1000000 * 17000(34000/2) 厘米
} TL1=0X00;TH1=0X00; //清零方便下次计数
}
}
iic c h
/* # I2C浠g爜鐗囨璇存槑
1. 鏈枃浠跺す涓彁渚涚殑椹卞姩浠g爜渚涘弬璧涢€夋墜瀹屾垚绋嬪簭璁捐鍙傝€冦€?
2. 鍙傝禌閫夋墜鍙互鑷缂栧啓鐩稿叧浠g爜鎴栦互璇ヤ唬鐮佷负鍩虹锛屾牴鎹墍閫夊崟鐗囨満绫诲瀷銆佽繍琛岄€熷害鍜岃瘯棰?
涓鍗曠墖鏈烘椂閽熼鐜囩殑瑕佹眰锛岃繘琛屼唬鐮佽皟璇曞拰淇敼銆?
*/
#include "iic.h"
#define DELAY_TIME 40
//
static void I2C_Delay(unsigned char n)
{
do
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
while(n--);
}
//
void I2CStart(void)
{
sda = 1;
scl = 1;
I2C_Delay(DELAY_TIME);
sda = 0;
I2C_Delay(DELAY_TIME);
scl = 0;
}
//
void I2CStop(void)
{
sda = 0;
scl = 1;
I2C_Delay(DELAY_TIME);
sda = 1;
I2C_Delay(DELAY_TIME);
}
//
void I2CSendByte(unsigned char byt)
{
unsigned char i;
for(i=0; i<8; i++){
scl = 0;
I2C_Delay(DELAY_TIME);
if(byt & 0x80){
sda = 1;
}
else{
sda = 0;
}
I2C_Delay(DELAY_TIME);
scl = 1;
byt <<= 1;
I2C_Delay(DELAY_TIME);
}
scl = 0;
}
//
unsigned char I2CReceiveByte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++){
scl = 1;
I2C_Delay(DELAY_TIME);
da <<= 1;
if(sda)
da |= 0x01;
scl = 0;
I2C_Delay(DELAY_TIME);
}
return da;
}
//
unsigned char I2CWaitAck(void)
{
unsigned char ackbit;
scl = 1;
I2C_Delay(DELAY_TIME);
ackbit = sda;
scl = 0;
I2C_Delay(DELAY_TIME);
return ackbit;
}
//
//void I2CSendAck(unsigned char ackbit)
//{
// scl = 0;
// sda = ackbit;
// I2C_Delay(DELAY_TIME);
// scl = 1;
// I2C_Delay(DELAY_TIME);
// scl = 0;
// sda = 1;
// I2C_Delay(DELAY_TIME);
//}
uchar AD_read(uchar add)
{
uchar temp;
I2CStart();
I2CSendByte(0X90);
I2CWaitAck();
I2CSendByte(add);
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0X91);
I2CWaitAck();
temp=I2CReceiveByte();
I2CStop();
return temp;
}
uchar EEPROM_read(uchar add)
{
uchar temp;
I2CStart();
I2CSendByte(0XA0);
I2CWaitAck();
I2CSendByte(add);
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0XA1);
I2CWaitAck();
temp=I2CReceiveByte();
I2CStop();
return temp;
}
void EEPROM_write(uchar add,uchar dat)// EEEPROM 瀛樺偍
{
I2CStart();
I2CSendByte(0XA0);
I2CWaitAck();
I2CSendByte(add);
I2CWaitAck();
I2CSendByte(dat);
I2CWaitAck();
I2CStop();
}
//void DA_write(uchar dat)// EEEPROM 瀛樺偍
//{
// I2CStart();
// I2CSendByte(0X90);
// I2CWaitAck();
// I2CSendByte(0X40);
// I2CWaitAck();
// I2CSendByte(dat);
// I2CWaitAck();
// I2CStop();
//}
/********************************************************************/
#ifndef _IIC_H
#define _IIC_H
#include
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit sda = P2^1;
sbit scl = P2^0;
void IIC_Start(void);
void IIC_Stop(void);
bit IIC_WaitAck(void);
void IIC_SendAck(bit ackbit);
void IIC_SendByte(unsigned char byt);
unsigned char IIC_RecByte(void);
uchar AD_read(uchar add);
uchar EEPROM_read(uchar add);
void EEPROM_write(uchar add,uchar dat);// EEEPROM 瀛樺偍
void DA_write(uchar dat);// EEEPROM 瀛樺偍
#endif
ds1302 c h
/* # DS1302浠g爜鐗囨璇存槑
1. 鏈枃浠跺す涓彁渚涚殑椹卞姩浠g爜渚涘弬璧涢€夋墜瀹屾垚绋嬪簭璁捐鍙傝€冦€?
2. 鍙傝禌閫夋墜鍙互鑷缂栧啓鐩稿叧浠g爜鎴栦互璇ヤ唬鐮佷负鍩虹锛屾牴鎹墍閫夊崟鐗囨満绫诲瀷銆佽繍琛岄€熷害鍜岃瘯棰?
涓鍗曠墖鏈烘椂閽熼鐜囩殑瑕佹眰锛岃繘琛屼唬鐮佽皟璇曞拰淇敼銆?
*/
// 7-13 琛?鑷繁鍐?
#include "ds1302.h"
sbit SCK = P1^7;
sbit SDA = P2^3;
sbit RST = P1^3;
unsigned char shijian[]={50,59,23,0,0,0,0};
//
void Write_Ds1302(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++)
{
SCK = 0;
SDA = temp&0x01;
temp>>=1;
SCK=1;
}
}
//
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
{
RST=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SCK=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
RST=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
Write_Ds1302(address);
Write_Ds1302(((dat/10)<<4)|(dat%10));
RST=0;
}
//
unsigned char Read_Ds1302_Byte ( unsigned char address )
{
unsigned char i,temp=0x00,dat1,dat2;
RST=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SCK=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
RST=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
Write_Ds1302(address);
for (i=0;i<8;i++)
{
SCK=0;
temp>>=1;
if(SDA)
temp|=0x80;
SCK=1;
}
RST=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SCK=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SCK=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
dat1=temp/16;//杩欎笁琛岀▼搴忎篃鏄?鍥哄畾 60S 涓轰竴鍛ㄦ湡
dat2=temp%16;
temp=dat1*10+dat2;
return (temp);
}
void DS_init()//鍒濆鍖栫▼搴?
{
unsigned char i,add;
add=0X80;//鍐?
Write_Ds1302_Byte(0X8E,0X00);//鎵撳紑寰€閲岄潰 鍐?鏁版嵁鐨勬搷鎺?
for(i=0;i<7;i++)
{
Write_Ds1302_Byte(add,shijian[i]);
add=add+2;
}
Write_Ds1302_Byte(0X8E,0X80);//鍏抽棴寰€閲岄潰 鍐?鏁版嵁鐨勬搷鎺?
}
void DS_get()//璇诲彇鏃堕棿绋嬪簭
{
unsigned char i,add;
add=0X81;//璇?
Write_Ds1302_Byte(0X8E,0X00);//鎵撳紑寰€閲岄潰 鍐?鏁版嵁鐨勬搷鎺?
for(i=0;i<7;i++)
{
shijian[i]=Read_Ds1302_Byte(add);
add=add+2;
}
Write_Ds1302_Byte(0X8E,0X80);//鍏抽棴寰€閲岄潰 鍐?鏁版嵁鐨勬搷鎺?
}
/***************************************************************/
#ifndef __DS1302_H
#define __DS1302_H
#include
#include
void Write_Ds1302(unsigned char temp);
void Write_Ds1302_Byte( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302_Byte( unsigned char address );
void DS_init();//初始化程序
void DS_get();
#endif
ds18b20 c h
/* # 鍗曟€荤嚎浠g爜鐗囨璇存槑
1. 鏈枃浠跺す涓彁渚涚殑椹卞姩浠g爜渚涘弬璧涢€夋墜瀹屾垚绋嬪簭璁捐鍙傝€冦€?
2. 鍙傝禌閫夋墜鍙互鑷缂栧啓鐩稿叧浠g爜鎴栦互璇ヤ唬鐮佷负鍩虹锛屾牴鎹墍閫夊崟鐗囨満绫诲瀷銆佽繍琛岄€熷害鍜岃瘯棰?
涓鍗曠墖鏈烘椂閽熼鐜囩殑瑕佹眰锛岃繘琛屼唬鐮佽皟璇曞拰淇敼銆?
*/
#include "onewire.h"
#define uchar unsigned char
#define uint unsigned int
//
void Delay_OneWire(unsigned int t)
{
unsigned char i;
while(t--){
for(i=0;i<12;i++);
}
}
//
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
}
Delay_OneWire(5);
}
//
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
{
dat |= 0x80;
}
Delay_OneWire(5);
}
return dat;
}
//
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag = DQ;
Delay_OneWire(5);
return initflag;
}
uchar Tempget()//璇诲嚱鏁皀 鑷繁鍐?
{
unsigned char low,high;//璇诲彇娓╁害鐨?浣庝綅 鍜?楂樹綅
//unsigned long temp;
unsigned char temp;
init_ds18b20();//鍒濆鍖?ds18b20
Write_DS18B20(0XCC);//蹇界暐 ROM 鎸囦护
Write_DS18B20(0X44);//寮€濮嬭繘琛屾俯搴﹁浆鎹㈢殑鍔熻兘鎸囦护
Delay_OneWire(200);//杩涜寤惰繜
//涓婇潰鎿嶄綔瀹屾垚鍚庯紝DS18B20浼氬娓╁害杩涜璇诲彇
//涓嬮潰瀵硅鍙栫殑娓╁害杩涜杞崲
init_ds18b20();//鍐嶆杩涜鍒濆鍖?
Write_DS18B20(0XCC);
Write_DS18B20(0XBE);//璇绘殏瀛樺櫒鎸囦护锛屾俯搴﹂兘鍑烘潵涔嬪悗浼氬瓨鍌ㄥ埌鏆傚瓨鍣ㄩ噷锛屾墍浠ヨ鎶婂畠璇诲嚭鏉?
low=Read_DS18B20();//璇诲彇DS18B20鐨勬俯搴︽暟鎹?
high=Read_DS18B20();
/********涓嬮潰鏄鍙栨俯搴︾殑甯﹀皬鏁板啓娉?******************/
// temp=(high&0x0f); //0000 1010; 1010 0000 鍙栨秷姝h礋鏄剧ず
// temp <<=8;
// temp|=low;
//
// temp=temp*625; //绮惧害涓?0.0625锛屽皢瀹為檯娓╁害鎵╁ぇ浜?0000鍊?
/********涓嬮潰鏄鍙栨俯搴︾殑鏁存暟鍐欐硶*******************/
temp=high<<4;//鍚戝乏绉?浣? 鍘绘帀琛ㄧず姝h礋鐨勪綅
temp|=(low>>4);//鍚戝彸绉?浣? 鍘绘帀琛ㄧず灏忔暟鐨?浣?
return temp;
}
/*******************************************************************/
#ifndef __ONEWIRE_H
#define __ONEWIRE_H
#include
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P1^4;
unsigned char rd_temperature(void);
//long Tempget();//读函数n 自己写
uchar Tempget();//读函数n 自己写
#endif
长按、短按、双击
/*
实现功能:对于S7按键,长按、短按、双击分别实现不同功能
*/
#include
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
uchar Smg_num=0;
uchar Smg[]={0,8,10,4,0,10,1,1};
uchar S7_num=0,LED_Bit=0XFF,SS7_flag=0;
bit led3_flag=0,led1_flag=0,led2_flag=0,S7_flag=0;
uint S7_tt=0,SS7_tt=0;
void Allinit();
void Delayms(uint ms);
void Keyscan();
void Keyscan16();
void Timer2Init(void); //1毫秒@12.000MHz
void main()
{
Allinit();
Timer2Init();
while(1)
{
if(led1_flag==1)
{
LED_Bit&=0XFE;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
LED_Bit|=0X02;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
LED_Bit|=0X04;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
}
else if(led2_flag==1)
{
LED_Bit&=0XFD;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
LED_Bit|=0X01;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
LED_Bit|=0X04;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
}
else if(led3_flag==1)
{
LED_Bit&=0XFB;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
LED_Bit|=0X02;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
LED_Bit|=0X01;P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;
}
Keyscan();
//Keyscan16();
//Delayms(5);
}
}
void timer2() interrupt 12
{
P0=0XFF;
P2|=0XC0;
P2&=0XDF;
P2&=0X1F;
P0=0XFF;
P2|=0XE0;
P2&=0XFF;
P2&=0X1F;
P0=(1<=100))
{
led1_flag=1;S7_tt=0;led2_flag=0;led3_flag=0;//S7_double_flag=0;
}
else if(S7_tt>=1000)
{
led2_flag=1;S7_tt=0;led1_flag=0;led3_flag=0;//S7_double_flag=0;
}
}
else if(S7_num==2)
{
led3_flag=1;S7_tt=0;led1_flag=0;led2_flag=0;S7_num=0;
}
}
if(SS7_flag==1)
{
SS7_tt++;
if(SS7_tt==1100)
{
SS7_tt=0;SS7_flag=2;
}
}
}
/*
双击原理:在原来长按短按的基础上修改。增加一个总计时标志位和记录按下次数的变量。
按键一按下,总计时标志位置1,总计时开始计时,直到1100毫秒结束,
并将总计时标志位置2。判断时满足两个条件:总计时标志位置2和按键松开。
然后对记录按下次数 分为 1次和2次进行判断,一次的再判断长按还是短按。
*/
void Timer2Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x20; //设置定时初始值
T2H = 0xD1; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IE2|=0X04;EA=1;
}
void Keyscan16()
{
uchar temp;
P3=0X7F;P42=1;P44=0;
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
Delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
temp=P3;
switch(temp)
{
case 0X7E:Smg[0]=1;break;
case 0X7D:Smg[1]=2;break;
case 0X7B:Smg[2]=3;break;
case 0X77:Smg[3]=4;break;
}
while(temp!=0X0F)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P3=0XBF;P42=0;P44=1;
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
Delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
temp=P3;
switch(temp)
{
case 0XBE:Smg[4]=5;break;
case 0XBD:Smg[5]=6;break;
case 0XBB:Smg[6]=7;break;
case 0XB7:Smg[7]=8;break;
}
while(temp!=0X0F)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P3=0XDF;P42=1;P44=1;
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
Delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
temp=P3;
switch(temp)
{
case 0XDE:Smg[0]=1;break;
case 0XDD:Smg[1]=2;break;
case 0XDB:Smg[2]=3;break;
case 0XD7:Smg[3]=4;break;
}
while(temp!=0X0F)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P3=0XEF;P42=1;P44=1;
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
Delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0X0F)
{
temp=P3;
switch(temp)
{
case 0XEE:Smg[0]=8;break;
case 0XED:Smg[1]=8;break;
case 0XEB:Smg[2]=8;break;
case 0XE7:Smg[3]=8;break;
}
while(temp!=0X0F)
{
temp=P3;
temp=temp&0X0F;
}
}
}
}
void Keyscan()
{
if(P30==0)
{
Delayms(5);
if(P30==0)
{
S7_flag=1;SS7_flag=1;
if(S7_num==0) S7_num=1;
else if(S7_num==1) S7_num=2;
}
while(!P30);
}
else if(P30==1)
{
S7_flag=0;
if(P31==0)
{
Delayms(5);
if(P31==0)
{
Smg[1]=2;
}
while(!P31);
}
else if(P32==0)
{
Delayms(5);
if(P32==0)
{
Smg[2]=3;
}
while(!P32);
}
else if(P33==0)
{
Delayms(5);
if(P33==0)
{
Smg[3]=4;
}
while(!P33);
}
}
}
void Allinit()
{
P2|=0XA0;P2&=0XBF;P0=0X00;
P2|=0X80;P2&=0X9F;P0=0XFF;
P2|=0XC0;P2&=0XDF;P0=0XFF;
P2|=0XE0;P2&=0XFF;P0=0XFF;
}
void Delayms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=910;j>0;j--);
}
其他
uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,//0-9
0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,//0.-9.
0XBF,0XFF,0X8E,0XC1};//- 关 F U
10 继电器 40 蜂鸣器 50
从左到右:LED_Bit&=~(0X01<>i);LED_Bit|=(0X80>>(i-1));