矩形按键
P3=0xfe;//fd//db//f7
temp=P3;
temp=temp&0xf0;
if(temp != 0xf0)
{
Delay(10);
temp=P3;
temp=temp & 0xf0;
if(temp != 0xf0)
{
temp=P3;
switch(temp)
{
case 0xee: key=0;break;//第一个字母都一样,第二个edb7
case 0xde: key=1;break;
case 0xbe: key=2;break;
case 0x7e: key=3;break;
}
while(temp!=0xf0)//等待按键释放
{
temp=P3;
temp=temp&0xf0;
}
display(key);//显示
}
}
十进制,十六进制
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
数码管显示数字
显示数字“0”,abcdef亮,状态值00111111——>0x3f
显示数字“1”,bc亮,状态值00000110——>0x06
显示数字“2”,abdeg亮,状态值01011011——>0x5b
显示数字“3”,abcdg亮,状态值01001111——>0x4f
显示数字“4”,bcfg亮,状态值01100110——>0x66
显示数字“5”,acdfg亮,状态值01101101——>0x6d
显示数字“6”,acdefg亮,状态值01111101——>0x7d
显示数字“7”,abc亮,状态值00000111——>0x07
显示数字“8”,abcdefg亮,状态值01111111——>0x7f
显示数字“9”,abcdfg亮,状态值01101111——>0x6f
显示字母“A”,abcefg亮,状态值01110111——>0x77
显示字母“B”,cdefg亮,状态值01111100——>0x7c
显示字母“C”,adef亮,状态值00111001——>0x39
显示字母“D”,bcdeg亮,状态值01011110——>0x5e
显示字母“E”,adefg亮,状态值01111001——>0x79
显示字母“F”,aefg亮,状态值01110001——>0x71
选择数码管
1----fe
2----fd
3----fb
4----f7
5----ef
6----df
模板头
#include <regx52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar num;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;//定义蜂鸣器端
void delay_ms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
}
定时器
TR0=~TR0;//让计时器0 暂停or继续
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
//代码
}
void T0_time(){
TMOD=0x11;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
}
//第二个
void T1_time() interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
}
void T1_time(){
TMOD=0x11;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET1=1;
TR1=1;
}
串口传电脑(数字or字符串)
//串口初始化
void Uart_Init(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //??????
SCON = 0x50; //8???,?????
TMOD &= 0x0F; //???????
TMOD |= 0x20; //???????
TL1 = 0xFD; //???????
TH1 = 0xFD; //???????
ET1 = 0; //???????
TR1 = 1; //???1????
}
//传递数字
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
//传递字符串
void UART_SendString(const char *str) // ?????????
{
while (*str != '\0') {
SBUF = *str;
while (TI == 0);
TI = 0;
str++;
}
}
//传递字符数组
void fafafa(unsigned char *Array, unsigned int Length)
{
for (i = 0; i < Length; i++)
{
UART_SendByte(Array[i]);
}
}
//调用
void main()
{
Uart_Init();
while(1)
{
UART_SendString("hello");
}
}
串口传板子(数字)
void Uart_Init(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //??????
SCON = 0x50; //8???,?????
TMOD &= 0x0F; //???????
TMOD |= 0x20; //???????
TL1 = 0xFD; //???????
TH1 = 0xFD; //???????
ET1 = 0; //???????
TR1 = 1; //???1????
EA=1;
ES=1;
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
void UART_Routine() interrupt 4
{
if(RI==1)
{
//输入即SBUF
//代码
RI=0;
}
}
void main()
{
Uart_Init();
while(1)
{
//nothing
}
}
按键延时
if(P3_4==0)
{
delay_ms(20);
while(P3_4==0);
delay_ms(20);
P1_0=~P1_0;
}
亮一个table
uchar code table[]={
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F
};
数码管显示(动态and静态)
//静态先wela 0x wela 再dula table dula
wela=1;
P0=0xfd;
wela=0;
P0=0xff;
dula=1;
P0=table[ge];
dula=0;
delay_ms(1);
//动态先dula table dula 再wela 0x wela
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay_ms(1);
1602头
#include<regx52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="Hello everyone!0";//?????
uchar code table1[]="Welcome to here!";//?????
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;//定义蜂鸣器端
uchar num;
void delay_ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms--){
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay_ms(5);
lcden=1;
delay_ms(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay_ms(5);
lcden=1;
delay_ms(5);
lcden=0;
}
void init()
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
init();
write_com(0x80);//左开始
write_com(0x80+0x10);//右开始
for(num=0;num<sizeof(table)-1;num++)
{
write_data(table[num]);
delay_ms(1);
}
for(num=0;num<16;num++)
{
write_com(0x18);
delay_ms(200);
}
write_com(0x80+0x40);//左开始
write_com(0x80+0x50);//右开始
for(num=0;num<sizeof(table1)-1;num++)
{
write_data(table1[num]);
delay_ms(1);
}
///如果又开始需要
for(num=0;num<16;num++)
{
write_com(0x18);
delay_ms(200);
}
///
while(1);
}
时钟
void write_sfm(uchar add,uchar date)//写时分秒函数
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);//设置显示位置
write_data(0x30+shi);//送液晶显示十位
write_data(0x30+ge);//送液晶显示个位
}