单片机程序.docx

上传人:b****2 文档编号:479629 上传时间:2023-04-29 格式:DOCX 页数:47 大小:21.54KB
下载 相关 举报
单片机程序.docx_第1页
第1页 / 共47页
单片机程序.docx_第2页
第2页 / 共47页
单片机程序.docx_第3页
第3页 / 共47页
单片机程序.docx_第4页
第4页 / 共47页
单片机程序.docx_第5页
第5页 / 共47页
单片机程序.docx_第6页
第6页 / 共47页
单片机程序.docx_第7页
第7页 / 共47页
单片机程序.docx_第8页
第8页 / 共47页
单片机程序.docx_第9页
第9页 / 共47页
单片机程序.docx_第10页
第10页 / 共47页
单片机程序.docx_第11页
第11页 / 共47页
单片机程序.docx_第12页
第12页 / 共47页
单片机程序.docx_第13页
第13页 / 共47页
单片机程序.docx_第14页
第14页 / 共47页
单片机程序.docx_第15页
第15页 / 共47页
单片机程序.docx_第16页
第16页 / 共47页
单片机程序.docx_第17页
第17页 / 共47页
单片机程序.docx_第18页
第18页 / 共47页
单片机程序.docx_第19页
第19页 / 共47页
单片机程序.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机程序.docx

《单片机程序.docx》由会员分享,可在线阅读,更多相关《单片机程序.docx(47页珍藏版)》请在冰点文库上搜索。

单片机程序.docx

单片机程序

计算器设计

#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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2