📄 中断.c
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#define CS(ADDR) XBYTE[ADDR]
typedef unsigned int uint;
typedef unsigned char uchar;
sbit CS=P1^4;
sbit CLK=P1^7;
sbit DIO=P1^6;
sbit KEY=P3^2;
uchar half_hign;
uchar half_low;
bdata uchar com_data;
sbit mos_bit=com_data^7;
sbit low_bit=com_data^0;
void delay_50us()
{
uchar i;
for (i=0; i<6; i++){;}
}
void delay_8us()
{
uchar i;
for (i=0; i<1; i++){;}
}
void delay_50ms()
{
uchar i,j;
for(j=0;j<50;j++)
for(i=0;i<125;i++){;}
}
void send(uchar sebuf)
{
uchar i;
com_data=sebuf;
CLK=0;
CS=0;
delay_50us();
for(i=0;i<8;i++)
{
delay_8us();
DIO=mos_bit;
CLK=1;
delay_8us();
com_data=com_data<<1;
CLK=0;
}
DIO=0;
}
uchar receive(void)
{
uchar i,rebuf;
CLK=1;
delay_50us();
for(i=0;i<8;i++)
{
com_data=com_data<<1;
low_bit=DIO;
CLK=1;
delay_8us();
CLK=0;
delay_8us();
}
rebuf=com_data;
DIO =1;
CS=1;
return rebuf;
}
void reset(void)
{
DIO=1;
delay_50ms();
send(0xa4);
CS=1;
}
/* 7289显示程序 */
/* addr为显示位置 范围0~7 */
/* dat为现实内容 */
void display(uchar addr,uchar dat)
{
if(addr<0 || addr >7)
return;
send(0xc8 + addr);
delay_50us();
send(dat);
CS=1;
}
void main()
{
uchar dat,dbit = 0;
reset();
while(1)
{
dat = CS(0x0000) & 0x1f; //读取中断状态
dbit = dat & 0x10;
if(dbit == 0x10) //判断每一位的状态
display(0,1);
else
display(0,0);
dbit = dat & 0x08;
if(dbit == 0x08)
display(1,1);
else
display(1,0);
dbit = dat & 0x04;
if(dbit == 0x04)
display(2,1);
else
display(2,0);
dbit = dat & 0x02;
if(dbit == 0x02)
display(3,1);
else
display(3,0);
dbit = dat & 0x01;
if(dbit == 0x01)
display(4,1);
else
display(4,0);
delay_50ms();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -