单片机测试程序文档格式.docx

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

单片机测试程序文档格式.docx

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

单片机测试程序文档格式.docx

⑶实现效果逐个闪烁,逐个消隐,键盘控制改变数据并移动,与预期相同,工作状态正常。

﹑再利用单片机内部时钟中断,编写数码管时钟程序,使数码管能够实现计时功能,键盘能够控制时分秒。

系统综合功能设计

综合单片机开发板上的各个功能模块,以实现一个完整的系统功能:

⑴根据前面对各模块功能的理解和程序编写,结合各个模块实现一个整体系统,把各模块功能综合起来。

⑵设计一综合系统,使数码管实现数字钟且可右移﹑闪烁,液晶屏实现时间、日期的显示且可移屏,键盘能够控制系统,蜂鸣器与键盘且可整点报时,可实现串口通信功能。

鸣器调试程序

本程序根据蜂鸣器与单片机口相连设计,可以验证单片机及下载功能的正确.

#include<

>

sbitbuz=P3^3;

unsignedcharflag;

voiddelayms(unsignedcharms)

/*延时子程序*/

{

unsignedchari;

while(ms--)

{

for(i=0;

i<

120;

i++);

}

}

/*主程序*/

main()

{

TMOD=0x01;

flag=0x00;

TH0=0x00;

TL0=0xff;

TR0=1;

IE=0x82;

while

(1)

flag++;

delayms

(1);

/*中断控制*/

voidtimer0()interrupt1using1

TH0=0xfe;

TL0=frq;

buz=~buz;

串口通信调试程序(单片机到PC机)

此为串口通信程序,可在电脑上的超级终端显示相关语句,实现单片机与电脑的相互通信。

遇到的问题:

在进行单片机传信息到电脑终端时,可是利用宏文件,直接调用printf.但是在实际的运用中占用大量的空间资源,而且容易出现错误,让程序的工作不正常,因此我们改用字节的传送,利用串口一个字节一个字节的传送,这样就大大增加了程序的可读性。

/*specialfunctionregisterdeclarations*/

/*fortheintended8051derivative*/

/*prototypedeclarationsforI/Ofunctions*/

#ifdefMONITOR51/*DebuggingwithMonitor-51needs*/

charcodereserve[3]_at_0x23;

/*spaceforserialinterruptif*/

#endif/*StopExectionwithSerialIntr.isenabled*/

/*------------------------------------------------

ThemainCfunction.Programexecutionstarts

hereafterstackinitialization.

------------------------------------------------*/

voidmain(void){

Setuptheserialportfor1200baudat12MHz.

#ifndefMONITOR51

SCON=0x50;

/*SCON:

mode1,8-bitUART,enablercvr*/

TMOD|=0x20;

/*TMOD:

timer1,mode2,8-bitreload*/

TH1=0xe6;

/*TH1:

reloadvaluefor1200baud@12MHz*/

TR1=1;

/*TR1:

timer1run*/

TI=1;

/*TI:

setTItosendfirstcharofUART*/

#endif

Notethatanembeddedprogramneverexits(because

thereisnooperatingsystemtoreturnto).It

mustloopandexecuteforever.

while

(1){

printf("

liujinglong\n"

);

/*Print"

liujinglong"

*/

串口通信调试程序(PC机到单片机)

#include<

#defineucharunsignedchar

#defineuintunsignedint

UchardataReceiveBuffer[16]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,

0x20,0x20,0x20,0x20,0x20,0x20,0x20};

//设置16字节的串行通信接收缓冲区

uchardataBufferPointer=0;

//串行通信接收缓冲区指针,初始为0

bitdataOnReceive=0;

//串行通信接收事件标志位

voidSend(uchardatadat);

/*以下为串行通信接收中断处理函数*/

voidserialport(void)interrupt4using2

{

uchardatac,i;

if(RI)

{

c=SBUF;

//读取接收到的数据

if(BufferPointer<

16)

{

ReceiveBuffer[BufferPointer]=c;

//将接收到的数据存入接收缓冲区

BufferPointer++;

}

else

for(i=0;

i<

15;

i++)

{

ReceiveBuffer[i]=ReceiveBuffer[i+1];

//将缓冲区数据左移

}

ReceiveBuffer[15]=c;

RI=0;

//清空接收标志

Send(c);

//发送接收到的数据,以便回显

OnReceive=1;

//接收事标志位置1

}

/*以下为串口初始化函数*/

voidInitserialport(void)

TMOD=0x20;

SCON=0x50;

reloadvaluefor1200baud@16MHz*/

ES=1;

//允许串口中断

EA=1;

/*TR1:

timer1run*/

voidSend(uchardatadat)

SBUF=dat;

while(TI==0);

TI=0;

voidmain(void)//主函数

uchardatai;

LcdReset();

//初始化LCD

Initserialport();

//初始化串口

DisplayListChar(0,0,"

ReceiveData:

"

13);

if(OnReceive)

16;

i++)//接收显示

DispOneChar(i,1,ReceiveBuffer[i]);

OnReceive=0;

液晶移屏显示程序

实现LCD1602的基本显示功能,以及使其能够实现移屏功能。

ucharcodedispcode1[]={"

happynewyear!

!

};

ucharcodedispcode2[]={"

thankseveryday!

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

voiddelay(uintt)

uintk,l;

for(k=t;

k>

0;

k--)

for(l=0;

l<

=10;

l++);

voidwcom()

RS=0;

RW=0;

E=0;

delay(1000);

E=1;

voidwdata()

RS=1;

voidinit()//初始化子程序

//uinti;

//for(i=0;

20;

P0=0x38;

wcom();

//指令码设置16×

2显示,8位数据接口

P0=0x0c;

//开显示,不显示光标,不闪烁光标

P0=0x06;

//读或写一个字符后地址累加器加一,光标加一

P0=0x01;

//清屏

voidmain()//主函数显示

uchari;

init();

P0=0x80;

wcom();

for(i=0;

=15;

P0=dispcode1[i];

wdata();

P0=0xC0;

P0=dispcode2[i];

=40;

P0=0x1c;

delay(100);

ZLG7289控制键盘及数码管显示程序

本程序根据ZLG7289芯片资料,来实现其对数码管和键盘的控制。

首先在数码管上显示0-7八位数,然后循环左右各移八次,再分别左移右移各两次,而后实现闪烁﹑消隐功能,再是按键时可以在数码管显示按键值,如没有按键则显示时钟,而且可用键盘对时钟的时分秒进行校对。

/*端口定义*/

sbitCS=P1^0;

sbitCLK=P1^1;

sbitDIO=P1^2;

sbitKEY=P3^2;

//需要在INT区把KEY用跳线冒跳到INT0,其余四个跳到VCC

//这样,P3^2就相当于直接连接到key

bdataucharcom_data;

//定义8位数据data

sbitmos_bit=com_data^7;

sbitlow_bit=com_data^0;

/*变量定义*/

ucharhalf_hign;

ucharhalf_low;

ucharsl,sh,ml,mh,hh,hl;

ucharsecond=0;

ucharminute=0;

ucharhour=12;

uints_cnt,key;

voiddelay_8us()

for(i=0;

i<

1;

i++){;

voiddelay_50us()

6;

voiddelay_50ms()

uchari,j;

for(j=0;

j<

50;

j++)

125;

i++){;

voiddelay_1s()

uchari=20;

while(i--)

delay_50ms();

voiddelay_2s()

uchari=40;

voiddelay_5s()

uchari=100;

/*发送单字节指令*/

voidsend(ucharsebuf)

com_data=sebuf;

CLK=0;

CS=0;

delay_50us();

8;

delay_8us();

DIO=mos_bit;

CLK=1;

com_data=com_data<

<

CLK=0;

DIO=0;

/*接收数据*/

ucharreceive(void)

uchari,rebuf;

CLK=1;

low_bit=DIO;

rebuf=com_data;

DIO=1;

CS=1;

returnrebuf;

/*复位*/

voidreset(void)

DIO=1;

delay_50ms();

send(0xa4);

/*7289数码管显示,addr为显示位置范围0~7,dat为现实内容*/

voiddisplay(ucharaddr,uchardat)

if(addr<

0||addr>

7)

return;

send(0xc8+addr);

send(dat);

/*功能:

执行ZLG7289纯指令参数:

cmd:

命令字*/

voidZLG(uchart)

CS=0;

send(t);

CS=1;

/*发送双字节命令*/

voidsendcommand(ucharaddr,uchardat)

send(addr);

/*获取键盘的位置码*/

uchargetkeycode(uchardat)

ucharkey;

switch(dat)

case0x00:

key=0x00;

break;

case0x01:

key=0x01;

case0x02:

key=0x02;

case0x03:

key=0x03;

case0x04:

key=0x04;

case0x05:

key=0x05;

case0x06:

key=0x06;

case0x07:

key=0x07;

case0x08:

key=0x08;

case0x09:

key=0x09;

case0x0a:

key=0x10;

case0x0b:

key=0x11;

case0x0c:

key=0x12;

case0x0d:

key=0x13;

case0x0e:

key=0x14;

case0x0f:

key=0x15;

default:

key=0xee;

returnkey;

/*7289按键指令*/

ZLG7289_Key()

ucharkey,dat;

send(0x15);

delay_50us();

dat=receive();

key=getkeycode(dat);

/*按键设定时分加一*/

voidSet_time(void)//设定时间

{if(key==0x00)//按键0,控制时

if(key==0x00)

hour++;

if(hour==24)

hour=0;

}

hl=hour%10;

hh=hour/10;

if(key==0x01)//按键1,控制分

if(key==0x01)

minute++;

if(minute==60)

minute=0;

ml=minute%10;

mh=minute/10;

if(key==0x02)//按键2,控制秒

if(key==0x02)

second++;

if(second==60)

second=0;

sl=second%10;

sh=second/10;

hh=hour/10;

ml=minute%10;

sh=second/10;

sl=second%10;

}

/*定时器中断初始化*/

voidInit(void)//初始化子程序

IP=0x02;

EX0=1;

TMOD=0x02;

//

TH0=0x06;

TL0=0x06;

ET0=1;

TR0=1;

voidservice_int0()interrupt0

EX0=0;

TR0=0;

key=ZLG7289_Key();

Set_time();

delay_1s();

voidtime0()interrupt1

s_cnt++;

if(s_cnt==400)//1s

s_cnt=0

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

当前位置:首页 > 外语学习 > 日语学习

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

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