单片机主程序文档格式.docx

上传人:b****2 文档编号:15168064 上传时间:2022-10-28 格式:DOCX 页数:17 大小:20.25KB
下载 相关 举报
单片机主程序文档格式.docx_第1页
第1页 / 共17页
单片机主程序文档格式.docx_第2页
第2页 / 共17页
单片机主程序文档格式.docx_第3页
第3页 / 共17页
单片机主程序文档格式.docx_第4页
第4页 / 共17页
单片机主程序文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机主程序文档格式.docx

《单片机主程序文档格式.docx》由会员分享,可在线阅读,更多相关《单片机主程序文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

单片机主程序文档格式.docx

#defineR3XBYTE[0Xdf03]

#defineR4XBYTE[0Xdf04]

#defineR5XBYTE[0Xdf05]

#defineR14XBYTE[0Xdf0E]

#defineR15XBYTE[0Xdf0F]

sbitSCL=P3^4;

/*24C01SCL接脚=89C52T0P3.4*/

sbitSDA=P3^5;

/*24C01SDA接脚=89C52T1P3.5*/

sbitRST=P1^0;

bitFLAG0=0,wuxiao=0,CHF=0,CHA=0,exit;

/*设定位标号FLAG0=1键盘扫描回应*/

Charptr=0,ptr1=0;

/*PTR键盘扫描指标,ptr1显示器扫描指标*/

Chara1=0,b1=100;

/*宣告变数a1为TIMER0的中断次数,ptr为TIMER1扫描数码管指标*/

charini[6]={0x40,0x5A,0x2c,0x02,0x00,0x00};

//放置初始化数据

charcon[6]={0xcd,0xcc,0x06,0x80,0x80,0x80};

//放置控制数据

staticconstchartab[16]={0x01,0x02,0x03,0x0c,/*键盘码00,01,02,03,*/

0x04,0x05,0x06,0x0d,/*键盘码04,05,06,07,*/

0x07,0x08,0x09,0x0e,/*键盘码08,09,0a,0b,*/

0x0a,0x00,0x0b,0x0f};

/*键盘码0c,0d,0e,0f*/

staticconstcharduanxuan[17]={0x3F,0x06,0x5b,0x4F,

0x66,0x6D,0x7D,0x07,

0x7F,0x6F,0x77,0x7C,

0x39,0x5E,0x79,0x71,0x00};

charlia=0,lu=0,dot,weishu=0;

chardispel[8];

//显示值存放阵列

charbufdata[9];

charbufuart[6];

//串口接收值存放列阵

floatvdataset=220;

floatvdata[3]={220,220,220};

voiddelay(uintvalue)//延时子程序

{

while(value!

=0)value--;

//10US延时

}

voidtserial(void);

//串口serial发送子程序

voidrserial(void);

//串口serial接收子程序

voidchvolt(void);

//改变输出电压幅值子程序

voidchfre(void);

//改变输出电压频率子程序

voidxch(void);

//宣告按键存放/显示器阵列disple[]右键滚入子程序

 

二、主程序清单

main()/*主程序*/

{charI;

TMOD=0X21;

/*TIMER0工作在方式MODE1,16位定时器*/

/*TIMER1工作在MODE2,自动重新装载模式*/

/*方式寄存器TMOD*/

/*|定时器1|定时器1|*/

/*|GATE|C/T|M1|M0|GATE|C/T|M1|M0|*/

/*|||*/

TH0=(65536-3000)/256;

/*设定每隔3000us中断扫描一次数码管*/

TL0=(65536-3000)%256;

TR0=1;

/*启动TEMER0*/

TH1=(65536-9200)/256;

/*设TIMER1计数值*/

TL1=(65536-9200)%256;

TR1=1;

//启动TEMER1

//显示初始化

disple[7]=0x73;

//最左的显示器显示P,表示处于停止态

for(i=2;

i<

=6;

i++)disple[i]=0x00;

//第3-7位显示器灭

disple[1]=0x3e;

//初态第二位显示器显示U,表示电压

disple[0]=0x06;

//初态第一位显示器显示1,表示第一相

P2_0=1;

P1=0XF0;

//P1低4位为全0,高4位写入1

COM8155=3;

/*8155初始化,设定PA、PB工作在基本输出方式*/

RST=0;

//进行4828初始化;

R0=imi[0];

R1=imi[1];

R2=imi[2];

R3=imi[3];

R4=imi[4];

R5=imi[5];

R14=0;

//R0-R5装入初始化寄存器

//向8248写控制数据

R0=con[0];

R1=con[1];

R2=con[2];

R3=con[3];

R4=con[4];

R5=con[5];

R15=0;

//RO-R5装入控制寄存器

IP=0x0b;

/*中断优先级寄存器IP*/

/*|︱|PT2|PS|PT1|PX1|PT0|PX0|*/

IE=0X9f;

/*︱7654︱3210︱*/

/*|EA||ET2|ES|ET1|EX1|ET0|EX0|*/

While

(1);

//等中断

三、故障中断处理程序

Voidservice_int0()interrupt0using0/*外部中断0,为故障中断*/

{inti;

for(i=0;

=7;

i++)disple[i]=0x31;

//显示故障信息

四、键盘中断处理程序

Voidexternal_int1()interrupt2using2

//键盘中断,进行按键命令处理

chara1=0xf7,i,m,xiantai;

/*a1=0XF7行扫描初值,I行*/

bitflag1=0;

IE&

=OXFB;

Delay(1000);

//延时10ms

FLAG0=0;

/*设按键回应旗号为0,键盘扫描计数指标为0*/

ptr=0;

if(P3_2==0)/*按键仍闭合则进行键处理*/

For(i=0;

4;

i++)/*键盘4个扫描列*/

P1=a1;

/*行扫描输出,读入P1存入M,以便侦测列与侦测按键是否按下*/

m=P1;

switch(m&

0xf0)/*取P1的高4位元。

侦测那一列被按*/

case0x70:

ptr=i*4;

/*第一列被按否?

是则扫描指标=列X4*/

FLAG0=1;

/*是则设FLAG0=1表有按键输入*/

break;

/*跳出此循环*/

case0xb0:

ptr=i*4+1;

/*第二列被按否?

是则扫描指标=列X4+1*/

case0xd0:

ptr=i*4+2;

/*第三列被按否?

是则扫描指标=列X4+2*/

case0xe0:

ptr=i*4+3;

/*第四列被按否?

是则扫描指标=列X4+3*/

Default:

if(FLAG0==1)break;

/*不为1,则扫描行右移,扫描下一行*/

a1=a1>

>

1|0x80;

/*高位补1*/

if(FLAG0==0)return;

switch(tab[ptr])/*是键盘扫描计数器指标至TAB[]取到的键盘码*/

case0x0a:

/*是否是第一次按“START”,是则启动SA4828的SPWM输出,最左的显示器显示D,表示SA4828在运行*/

if(flag1==0){RST=1;

flag1=1;

dispel[7]=duanxuan[0x0D];

}break;

case0x0b:

/*是否按“STOP”是则停止SA4828的SPWM输出*/

RST=0;

flag1=0;

dispel[7]=0x73;

//最左的显示器显示P,表示处于停止态

case0x0e:

/*是否按“调压”,是则进行相应处理*/

if(CHF==0)/*调压与调频互锁,当调频时,按调压键无效*/

If(CHA==0)

{CHA=1;

for(i=2;

i++)dispel[i]=0x00;

/*进入调压状态2位-6位显示器起初为全灭*/

xiantai=disple[7];

disple[1]=0x3e;

dispel[0]=0x00;

else

{if(weishu!

=0)chvolt();

//进行改变电压控制数据的处理;

If(wuxiao==1)

{for(i=2;

i++)dispel[i]=0;

//调用显示“00000”

for(i=0;

10;

i++)delay(10000);

/*延时1秒*/

while(m==p1);

delay(1000);

weishu=0;

dot=0;

disple[7]=xiantai;

if(lia==0)disple[1]=0x3e;

elsedisple[1]=duanxuan[0x0A];

disple[0]=duanxuan[lu+1];

CHA=0;

If(wuxiao==1){wuxiao=0;

return;

Break;

case0x0f:

/*是否按“调频”,是则进行相应处理*/

if(CHA==0)/*调压与调频互锁,当调压时,按调频键无效*/

{if(CHF==0)

{CHF=1;

/*进入调频状态2位-6位显示器起初为全灭*/

disple[7]=duanxuan[0x0A];

disple[1]=duanxuan[0x0F];

disple[0]=0x00;

{

if(weishu!

=0)chfre();

//进行改变频率控制数据的处理;

if(wuxiao==1)

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1