单片机程序.docx
- 文档编号:479629
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:47
- 大小:21.54KB
单片机程序.docx
《单片机程序.docx》由会员分享,可在线阅读,更多相关《单片机程序.docx(47页珍藏版)》请在冰点文库上搜索。
单片机程序
计算器设计
#include
sbitLOCK=P3^2;
//unsignedcharzxm[]={0x03,0xf3,0x26,0x62,0xd2,0x4a,0x0a,0xe3,0x02,0x42};//实验板
unsignedcharzxm[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//proteus
unsignedcharcnt,KeyValue,state,option;
longdata1,data2;
bitkey_mark;
voidSendData(unsignedcharn)
{
SBUF=n;
while(!
TI);
TI=0;
}
voiddelay()
{
unsignedchari,j;
for(i=0;i<4;i++)
for(j=0;j<100;j++);
}
voiddisp(longn)
{
unsignedchari,t[6]={0xff,0xff,0xff,0xff,0xff,0xff};
bitf;
i=0;
f=0;
if(n<0)//处理负数情况
{
f=1;
n=-n;
}
elseif(n==0)//当要显示的数据是0时,只显示一个0
t[0]=zxm[0];
while(n)//取数
{
t[i++]=zxm[n%10];
n/=10;
if(i>6)
break;
}
if(f)
t[i]=0xfd;//-
if(i>6)
{
charj;
for(j=0;j<6;j++)
t[j]=zxm[8];
}
for(i=0;i<6;i++)
{
SendData(t[i]);
}
LOCK=0;
LOCK=1;
}
unsignedcharscankey()
{
if(KeyValue==0xe7)//on/c
return'C';
elseif(KeyValue==0xb7)//equ
return'E';
elseif(KeyValue==0x77)//+
return'+';
elseif(KeyValue==0x7b)//-
return'-';
elseif(KeyValue==0x7d)//*
return'*';
elseif(KeyValue==0x7e)///
return'/';
elseif(KeyValue==0xd7)//0
return'0';
elseif(KeyValue==0xeb)//1
return'1';
elseif(KeyValue==0xdb)//2
return'2';
elseif(KeyValue==0xbb)//3
return'3';
elseif(KeyValue==0xed)//4
return'4';
elseif(KeyValue==0xdd)//5
return'5';
elseif(KeyValue==0xbd)//6
return'6';
elseif(KeyValue==0xee)//7
return'7';
elseif(KeyValue==0xde)//8
return'8';
elseif(KeyValue==0xbe)//9
return'9';
else
return'';
}
voidkey()
{
unsignedchart;
t=scankey();
if(state==0)
{
if(t=='C')
{
data1=0;
state=0;
disp(data1);
}
elseif(t>='0'&&t<='9')
{
data1=data1*10+t-48;
disp(data1);
}
elseif(t!
='E')
{
state=1;
data2=0;
option=t;
}
}
elseif(state==1)
{
if(t=='C')
{
data1=0;
state=0;
disp(data1);
}
elseif(t>='0'&&t<='9')
{
data2=data2*10+t-48;
disp(data2);
}
else
{
if(option=='+')
data1+=data2;
elseif(option=='-')
data1-=data2;
elseif(option=='*')
data1*=data2;
elseif(option=='/')
data1/=data2;
disp(data1);
if(t!
='E')
option=t;
else
option='+';
data2=0;
}
}
}
voidmain()
{
disp(0);
P2=0XFF;
P2=0XF0;
while
(1)
{
if((P2!
=0XF0)&&!
key_mark)
{
delay();
if(P2!
=0XF0)
{
KeyValue=P2;
P2=0XFF;
P2=0X0F;
KeyValue+=P2;
key();
key_mark=1;
P2=0XFF;
P2=0XF0;
}
}
elseif(P2==0XF0)
key_mark=0;
}
}
电压表设计
#include
sbitSET=P2^0;
sbitADD=P2^1;
sbitSUB=P2^2;
sbitLOCK=P3^2;
sbita=P2^0;
sbitb=P2^1;
sbitc=P2^2;
sbitSTART=P2^3;
sbitCLOCK=P2^4;//不超过640KHz
sbitEOC=P2^5;
sbitOE=P2^6;
unsignedchari,cnt,DispBuf[6];
unsignedintAD;
//unsignedcharzxm[]={0x03,0xf3,0x26,0x62,0xd2,0x4a,0x0a,0xe3,0x02,0x42};//实验板
unsignedcharcodezxm[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//proteus
bitKeyMark,sec;
voidDisplay();
unsignedcharReadAd(charchannel);
voidDelay()
{
unsignedchari,j;
for(i=0;i<4;i++)
for(j=0;j<100;j++);
}
voidT0Ser()interrupt1
{
TH0=-50000>>8;
TL0=-50000;
if(++cnt>9)
{
cnt=0;
sec=1;
}
}
voidT1Ser()interrupt3
{
TH1=0XFF;
TL1=0X80;
CLOCK=!
CLOCK;
}
voidKey()
{
if(!
SET)
{
}
elseif(!
ADD)
{
}
elseif(!
SUB)
{
}
}
voidInitTimer()
{
TMOD=0X11;
IE|=0X8a;
TR0=1;
TR1=1;
}
voidSendData(unsignedcharn)
{
SBUF=n;
while(!
TI);
TI=0;
}
voidDisplay()
{
for(i=0;i<6;i++)
{
if(i!
=2)
SendData(zxm[DispBuf[i]]);
else
SendData(zxm[DispBuf[i]]&0xfe);
}
LOCK=0;
LOCK=1;
}
unsignedcharReadAd(charchannel)
{
c=channel/4;
b=channel%4/2;
a=channel%2;
START=1;
START=0;
while(!
EOC);//等待转换结束,在EOC端接非门否则会出现非法电平信号
OE=1;
returnP1;
}
voidmain()
{
InitTimer();
Display();
while
(1)
{
if(sec)
{
sec=0;
//添加你自己的程序
AD=ReadAd(0);
AD=AD*500.0/255.0;
DispBuf[2]=AD/100;
DispBuf[1]=AD%100/10;
DispBuf[0]=AD%10;
Display();
}
}
}
电压表设计(实验五)
#include
sbitSET=P2^0;
sbitADD=P2^1;
sbitSUB=P2^2;
sbitLOCK=P3^2;
sbita=P2^0;
sbitb=P2^1;
sbitc=P2^2;
sbitSTART=P2^3;
sbitCLOCK=P2^4;//不超过640KHz
sbitEOC=P2^5;
sbitOE=P2^6;
unsignedchari,cnt,DispBuf[6];
unsignedintAD;
//unsignedcharzxm[]={0x03,0xf3,0x26,0x62,0xd2,0x4a,0x0a,0xe3,0x02,0x42};//实验板
unsignedcharcodezxm[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//proteus
bitKeyMark,sec;
voidDisplay();
unsignedcharReadAd(charchannel);
voidDelay()
{
unsignedchari,j;
for(i=0;i<4;i++)
for(j=0;j<100;j++);
}
voidT0Ser()interrupt1
{
TH0=-50000>>8;
TL0=-50000;
if(++cnt>9)
{
cnt=0;
sec=1;
}
}
voidT1Ser()interrupt3
{
TH1=0XFF;
TL1=0X80;
CLOCK=!
CLOCK;
}
voidKey()
{
if(!
SET)
{
}
elseif(!
ADD)
{
}
elseif(!
SUB)
{
}
}
voidInitTimer()
{
TMOD=0X11;
IE|=0X8a;
TR0=1;
TR1=1;
}
voidSendData(unsignedcharn)
{
SBUF=n;
while(!
TI);
TI=0;
}
voidDisplay()
{
for(i=0;i<6;i++)
{
if(i!
=2)
SendData(zxm[DispBuf[i]]);
else
SendData(zxm[DispBuf[i]]&0xfe);
}
LOCK=0;
LOCK=1;
}
unsignedcharReadAd(charchannel)
{
c=channel/4;
b=channel%4/2;
a=channel%2;
START=1;
START=0;
while(!
EOC);//等待转换结束,在EOC端接非门否则会出现非法电平信号
OE=1;
returnP1;
}
voidmain()
{
InitTimer();
Display();
while
(1)
{
if(sec)
{
sec=0;
//添加你自己的程序
AD=ReadAd(0);
AD=AD*500.0/255.0;
DispBuf[2]=AD/100;
DispBuf[1]=AD%100/10;
DispBuf[0]=AD%10;
Display();
}
}
}
串行通信
#include
unsignedcharcnt,n,hour,minute,second;
bitsec;
voidputchar(unsignedcharn);
voidcrlf();
voidt0()interrupt1
{
TH0=-50000>>8;
TL0=-50000;
if(++cnt>19)
{
cnt=0;
sec=1;
}
}
voidputs(unsignedchar*p)
{
while(*p)
putchar(*p++);
}
voiddisplay()
{
unsignedchart[8]={0};
t[0]=hour/10+'0';
t[1]=hour%10+'0';
t[2]=':
';
t[3]=minute/10+'0';
t[4]=minute%10+'0';
t[5]=':
';
t[6]=second/10+'0';
t[7]=second%10+'0';
puts(t);
crlf();
}
voidcrlf()
{
putchar(0x0d);
putchar(0x0a);
}
voidcom()interrupt4
{
unsignedchart;
if(RI)
{
t=SBUF;
if(t=='S')
n=0;
RI=0;
}
voidputchar(unsignedcharn)
{
SBUF=n;
while(!
TI);
TI=0;
}
voidinit_t0()
{
TH0=-50000>>8;
TL0=-50000;
TMOD|=0X01;
IE|=0X82;
}
voidinit_com()
{
//11.0592MHZ
//208232244250253
//120024004800960019200
//SM0SM1SM2RENTB8RB8TIRI
SCON=0x50;
IE|=0X90;
PCON=0X80;
TMOD|=0X20;
TH1=250;
TR1=1;
TMOD|=0X01;
TR0=1;
}
main()
{
init_t0();
init_com();
puts("CurrentTimeIs:
");
crlf();
hour=12;
while
(1)
{
if(sec)
{
sec=0;
if(++second==60)
{
second=0;
if(++minute==60)
{
minute=0;
if(++hour==24)
hour=0;
}
}
display();
}
}
}
88点阵驱动演示
#include
sbitdat=P2^5;
sbitclk=P2^4;
sbitlock=P2^3;
charcnt,pos,*p;
bitsec;
//centry六号字取字模
unsignedcharcodeMatrix001[8]=
{
/*------------------------------------------------------------------------------
;源文件/文字:
0
;宽×高(像素):
8×5
------------------------------------------------------------------------------*/
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff
};
voidt0()interrupt1
{
TH0=-50000>>8;
TL0=-50000;
if(++cnt>19)
{
cnt=0;
sec=1;
}
}
voidsend_595(unsignedcharn)
{
unsignedchari;
for(i=0;i<8;i++)
{
if(n&0X80)//如果先送低位后送高位,会出现什么样的效果,分析原因
dat=1;
else
dat=0;
clk=0;
clk=1;
n<<=1;
}
lock=0;
lock=1;
}
voidt1()interrupt3
{
TH1=-60000>>8;
TL1=-60000;
if(++pos>7)
pos=0;
send_595(0);//注释掉本句话,试验效果,分析原因
P2=7-pos;//如果不用7-pos而是直接写pos,效果会如何
send_595((*(p+pos)));
lock=0;
lock=1;
}
voidinit_t0()
{
TH0=-50000>>8;
TL0=-50000;
TMOD|=0X01;
IE|=0X82;
}
voidinit_t1()
{
TMOD|=0X10;
IE|=0X88;
}
main()
{
init_t0();
init_t1();
TR0=TR1=1;
p=Matrix001;
while
(1)
{
}
}
88点阵显示0到99
#include"reg51.h"
sbitdat=P2^5;
sbitclk=P2^4;
sbitlock=P2^3;
unsignedcharline;
bitfresh,sec;
intcnt,n;
unsignedchardisp[][8]={{0xf0,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0},//0{0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd},//1{0xf0,0xfe,0xfe,0xf0,0xf7,0xf7,0xf7,0xf0},//2{0xf0,0xfe,0xfe,0xf0,0xfe,0xfe,0xfe,0xf0},//3{0xf6,0xf6,0xf6,0xf0,0xfe,0xfe,0xfe,0xfe},//4{0xf0,0xf7,0xf7,0xf0,0xfe,0xfe,0xfe,0xf0},//5{0xf0,0xf7,0xf7,0xf0,0xf6,0xf6,0xf6,0xf0},//6{0xf0,0xf6,0xf6,0xfe,0xfe,0xfe,0xfe,0xfe},//{0xf0,0xf6,0xf6,0xf0,0xf6,0xf6,0xf6,0xf0},//8
{0xf0,0xf6,0xf6,0xf0,0xfe,0xfe,0xfe,0xf0}//9
};
voidinit_t0()
{
IE=0x82;
TMOD=0x01;
TH0=-2000>>8;
TL0=-2000;
TR0=1;
}
voidt0(void)interrupt1
{
TH0=-2000>>8;
TL0=-2000;
fresh=1;
if(++cnt>500)
{
cnt=0;
sec=1;
}
}
voidsend_595(unsignedcharn)
{
unsignedchari;
for(i=0;i<8;i++)
{
if(n&0X80)//如果先送低位后送高位,会出现什么样的效果,分析原因
dat=1;
else
dat=0;
clk=0;
clk=1;
n<<=1;
}
lock=0;
lock=1;
}
voidmain()
{
init_t0();
while
(1)
{
if(sec)
{
sec=0;
if(++n>99)
n=0;
}
if(fresh)
{
fresh=0;
if(++line>7)
line=0;
send_595(0);
P2=line;
send_595(~((disp[n/10][7-line]<<4)+(disp[n%10][7-line]&0x0f)));
}
}
}
调速实现电子显示
#include
sbitSET=P3^5;
sbitADD=P3^6;
sbitSUB=P3^7;
sbitLOCK=P3^2;
sbitDAT=P3^0;
sbitCLK=P3^1;
unsignedcharcnt,cnt2,line,*p;
charspeed;
bitsec,key_mark;
unsignedcharcodeMatrix001[32]=
{
/*------------------------------------------------------------------------------
;源文件/文字:
汉
;宽×高(像素):
15×15
------------------------------------------------------------------------------*/
0x20,0x00,0x10,0x00,0x17,0xFC,0x02,0x08,
0x82,0x08
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 程序