📄 26l.c
字号:
#include "iot26v.h"
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
#define anjianweikai DDRA|=(1<<7);PORTA&=~(1<<7);
#define anjianweiguan DDRA&=~(1<<7);
#define fengmingkai PORTB|=(1<<6);PORTB|=(1<<7);
#define fengmingguan PORTB&=~(1<<6);PORTB&=~(1<<7);
#define rst0 PORTB&=~(1<<5)
#define rst1 PORTB|=(1<<5)
#define sda0 DDRB|=(1<<0);PORTB&=~(1<<0);
#define sda1 DDRB|=(1<<0);PORTB|=(1<<0);
#define scl0 DDRB|=(1<<2);PORTB&=~(1<<2);
#define scl1 DDRB|=(1<<2);PORTB|=(1<<2);
#define sdawei DDRB&=~(1<<0);PORTB|=(1<<0);
unsigned char com1=6,com2=5,cnt1=0;
unsigned int temp=0,qiangdu=368;
unsigned char disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
signed char kashu[2]={3,0};
unsigned char kawei=1,jianshu=0;
uchar x24c02_read(uchar address); //从24c02的地址address中读取一个字节数据
void x24c02_write(uchar address,uchar info);//向24c02的address地址中写入一字节数据info
void x24c02_init(void); //24c02初始化子程序
void delay1(uchar x);
void x24c01_init(void);
void start(void);
void stop(void);
void writex(uchar j);
unsigned char readx(void);
void clock(void);
/*延时函数*/
void delayus(int a) //微秒级
{
do
a--;
while(a>1);
//WDR();
}
void delayms(unsigned int a) //毫秒级
{
while(a!=0)
{
delayus(250);
a--;
}
}
void fengming(unsigned char a) ////蜂鸣器
{
fengmingkai;
while(a>1)
{
a--;
delayms(1);
}
fengmingguan;
}
void x24c02_init(void)
{
scl1; delayus(1); sda1; delayus(1);
}
void start(void)
{
sda1; delayus(1); scl1;delayus(1); sda0; delayus(1); scl0; delayus(1);
}
void stop(void)
{
sda0; delayus(1); scl1; delayus(1); sda1; delayus(1);
}
void writex(uchar j)
{
uchar i,temp;
temp=j;
for (i=0;i<8;i++){
scl0; delayus(1);
if((temp&0x80)==0){sda0;}
else{sda1;}
delayus(1); scl1; delayus(1);
temp=temp<<1;
}
scl0; delayus(1); sda1; delayus(1);
}
unsigned char readx(void)
{
uchar i,j,k=0;
scl0; delayus(1); sda1;
for (i=0;i<8;i++){
delayus(1); scl1; delayus(1);
sdawei;
if ((PINB&0X01)==0){j=0;}
else {j=1;}
k=(k<<1)|j; scl0;
}
delayus(1); return(k);
}
void clock()
{
uchar i=0;
scl1; delayus(1);
sdawei;
while ((PINB&0X01!=0)&&(i<255)){i++;sdawei;}
scl0; delayus(1);
}
uchar x24c02_read(uchar address)
{
uchar i;
start(); writex(0xa0);
clock(); writex(address);
clock(); start();
writex(0xa1); clock();
i=readx(); stop();
delayus(10);
return(i);
}
void x24c02_write(uchar address,uchar info)
{
//CLI();
start(); writex(0xa0);
clock(); writex(address);
clock(); writex(info);
clock(); stop();
delayus(50);
//SEI();
}
void jiancheicka(void)//检测IC卡
{
uchar a=0;
DDRB&=~(1<<5);
PORTB|=(1<<5);
if(((PINB&0X20)==0)&(kawei==1))
{
delayus(100);
if(((PINB&0X20)==0)&(kawei==1))
{
kawei=0;
kashu[0]=x24c02_read(2);
delayus(200);
kashu[1]=x24c02_read(4);
delayus(200);
fengming(10);
}
}
if(((PINB&0X20)!=0)&(kawei==0))
{
delayus(100);
if(((PINB&0X20)!=0)&(kawei==0))
{
kawei=1;
fengming(10);
}
}
}
void xianshu(void)
{
//anjianweiguan;
DDRA=0Xff;
PORTA=0X7F;
PORTB&=~(0<<1);
PORTA=disp[kashu[0]]&0x7f;
delayms(1);
PORTB|=(0<<3);
PORTA=disp[kashu[1]]&0x7f;
PORTB&=~(0<<3);
delayms(1);
PORTB|=(0<<3);
//anjianweikai;
DDRA=0X80;
PORTA=0x7f;
;
}
void anjian(void)
{
DDRA=0X80;
PORTA=0x7f;
delayus(10);
if((PINA&0X4B)!=0x4B)
{
DDRA=0X80;
PORTA=0x7f;
delayms(1);
if((PINA&0X4b)!=0X4b)
{
fengming(10);
DDRA=0X80;
PORTA=0x7f;
if((PINA&0X40)==0) //+
{
kashu[1]++;
if(kashu[1]>9)
{
kashu[1]=0;
kashu[0]++;
if(kashu[0]>9)
{
kashu[0]=9;
kashu[1]=9;
}
}
while((PINA&0X40)==0)
{
xianshu();
}
}
if((PINA&0X08)==0) //-档
{
kashu[1]--;
if(kashu[1]<0)
{
kashu[1]=0;
kashu[0]--;
if(kashu[0]<0)
{
kashu[0]=0;
kashu[1]=0;
}
}
while((PINA&0X08)==0)
{
xianshu();
}
}
if((PINA&0X02)==0) //2档
{
jianshu=1;
while((PINA&0X02)==0)
{
xianshu();
}
}
if((PINA&0X01)==0)
{
jianshu=2;
while((PINA&0X01)==0)
{
xianshu();
}
}
}
}
//anjianweiguan;
}
void main(void) //主程序
{
MCUCR=0;
DDRA = 0XFF; /*方向输出*/
PORTA = 0X7F; /*高电平*/
DDRB = 0xCA;
PORTB = 0x35;
kashu[0]=4;
kashu[1]=5;
//WDR();
//WDTCR=0X0D; //
//SEI();
while (1)
{
jiancheicka();
anjian();
xianshu();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -