📄 课设控制平台测试程序.c
字号:
/*******************/
/* 键盘显示程序 */
/* */
/*******************/
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define tim 65536-2000
sbit dis0 =P2^4;
sbit dis1 =P2^5;
sbit dis2 =P2^6;
sbit dis3 =P2^7;
sbit dis4 =P3^3;
sbit key3 =P2^0;
sbit key2 =P2^1;
sbit key1 =P2^2;
sbit key0 =P2^3;
uchar disp[8];
uchar key,keyx,ts;
int para[10],ptr;
uchar code ledtab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0xed,0x6b,0x0f,0xe3,0x4f,0x4d};
void time(uint t)
{
uint i;
for(i=0;i<t;i++);
}
void distran()
{
disp[3]=distab[para[ptr]%10];
disp[2]=distab[(para[ptr]/10)%10];
disp[1]=distab[(para[ptr]/100)%10];
disp[0]=distab[(para[ptr]/1000)%10];
disp[4]=~ledtab[ptr];
}
void display()
{
static dis=0;
dis=(dis+1)%5;
dis0=1;dis1=1;dis2=1;dis3=1;dis4=1;
P0=disp[dis];
switch(dis)
{
case 0: dis0=0; break;
case 1: dis1=0; break;
case 2: dis2=0; break;
case 3: dis3=0; break;
case 4: dis4=0; break;
}
if(!key0) keyx=dis+1;
if(!key1) keyx=dis+5;
if(!key2) keyx=dis+9;
if(!key3) keyx=dis+13;
}
void modi(uchar p,uchar x)
{
para[p]=(para[p]%1000)*10+x;
}
void keyproc()
{
if(key>0)
{
switch(key)
{
case 1: modi(ptr,0);break;
case 2: modi(ptr,1);break;
case 3: modi(ptr,2);break;
case 4: modi(ptr,3);break;
case 5: modi(ptr,4);break;
case 6: modi(ptr,5);break;
case 7: modi(ptr,6);break;
case 8: modi(ptr,7);break;
case 9: modi(ptr,8);break;
case 10:modi(ptr,9);break;
case 11:if(ptr<7) ptr++;break;
case 12:if(ptr>0) ptr--;break;
case 13:para[ptr]+=1;break;
case 14:para[ptr]-=1;break;
case 15:para[ptr]+=10;break;
case 16:para[ptr]-=10;break;
}
}
key=0;
}
////////////////////////////////////////////////////////
sbit DACS =P3^6;
sbit CLK =P3^5;
sbit DAT1 =P3^4;
sbit DAT3 =P1^3;
sbit DAT2 =P1^4;
sbit ADCS =P3^7;
void TLC5620(uchar ch,uchar x)
{
uchar i,p;
p=ch<<6; //p=(ch*2+1)<<5;
CLK=0;
for (i=0; i<3; i++)
{
p=p<<1; DAT1=CY;
CLK=1; CLK=0;
}
p=x;
for (i=0; i<8; i++)
{
p=p<<1; DAT1=CY;
CLK=1; CLK=0;
}
DACS=0; DACS=1; CLK=1;
}
uint TLC1543(uchar p)
{
uint res=0;
uchar i; CLK=0;
ADCS=0; p=p<<4;
for (i=0;i<10;i++) //把通道号打入1543
{
p=p<<1; DAT3=CY;
CLK=1; CLK=0;
}
ADCS=1; //等待AD转换
time(50);
ADCS=0;
for (i=0;i<10;i++) //取D9--D5
{
CLK=1; res<<=1;
DAT2=1; if(DAT2) res++;
CLK=0;
}
ADCS=1; CLK=1;
return res;
}
///////////////////////////////////////////////////////
void timer0() interrupt 1
{
static mt=0;
TH0=tim>>8; TL0=tim; display();
if(mt++>50)
{
mt=0;
TLC5620(0,0x10);
TLC5620(1,0x40);
TLC5620(2,0x80);
TLC5620(3,0xff);
para[1]=TLC1543(0);
para[2]=TLC1543(1);
para[3]=TLC1543(2);
para[4]=TLC1543(3);
}
}
void main()
{
TMOD=0x11;IE=0x82;
TH0=tim>>8; TL0=tim; TR0=1;
ptr=0;
distran();
for(;;)
{
if(keyx>0)
{
key=keyx;
while(keyx!=0)
{keyx=0; time(3000);}
keyproc();
}
time(1000);
distran();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -