人人范文网 范文大全

6程序分析

发布时间:2020-03-03 22:50:37 来源:范文大全 收藏本文 下载本文 手机版

《单片机原理及应用》题库六

(程序分析)

程序2 电子秒表工作程序 void main() { TMOD=0x01;

//定时器T0工作在方式1 TH0=0xD8;

// T0装入时间常数

TL0=0xf0;

EA=1;

//允许 中断

ET0=1;

//允许 定时器T0中断

TR0=1;

//启动定时器T0

while(1)

//无条件循环

{

for(k=0;k

{

P0=b[k];

//送出数码管段码

P2=k;

//送出数码管位选码

delaym(3); //调用延时函数

} } } } time0_int(void) interrupt 1

//T0中断服务程序 {

TH0=0xD8;

TL0=0xF0;

i++;

if(i==100)

//到1秒

{

i=0;

second1++;

}

if(second1==10) //到10秒

{

second2++;

second1=0;

}

if(second2==10) //到100秒

{second3++;

second2=0;

second1=0;

}

b[2]=a[second3]; //转换为段码显示

b[1]=a[second2];

b[0]=a[second1];

} 程序3 电子时钟程序 void main() { TMOD=0x01;

//定时器T0工作在方式1 TH0=0xD8;

// T0延时长度延时10mS TL0=0xf0;

EA=1;

//允许中断

ET0=1;

//允许定时器T0中断 TR0=1; while(1) {

for(k=0;k

//显示时钟的分秒

{

P0=b[k];

P2=k;

delaym(3);

} } } time0_int(void) interrupt 1

//T0中断服务程序 {

TH0=0xD8;

TL0=0xF0;

i++;

if(i==100)

//到1秒

{

i=0;

second++;

}

if(second==60) //到1分钟

{second=0;

fen++;

}

w=fen/10;

x=fen%10;

y=second/10;

z=second%10;

b[4]=a[w];

//显示分十位段码

b[3]=a[x];

//显示分个位段码

b[2]=0xbf;

//数码管显示“-”

b[1]=a[y];

//显示秒十位段码

b[0]=a[z];

//显示秒个位段码

}

程序4

矩阵式按键扫描,读取按键的行列编码。 unsigned char Keycan(void) {

unsigned char rcode, ccode;

P1 = 0xF0;

// P1口对键盘输出 键盘扫描信号

if((P1&0xF0) != 0xF0)

{

delay(1);// 调用岩石函数函数实现软件去抖动

if((P1&0xF0) != 0xF0)

//如果不相等说明 有键按下

{ rcode = 0xFE;

// 逐行扫描初值

while((rcode&0x10) != 0)

{

P1 = rcode;

// 输出行扫描码

if((P1&0xF0) != 0xF0) //

{

ccode = (P1&0xF0)|0x0F; //取入列代码

//do{;}

while((P1&0xF0) != 0xF0); //等待键释放

return ((~rcode) + (~ccode)); // 返回

}

else

rcode = (rcode

}

}

return 0; // 无键按下,返回

} 程序6 从计算机键盘输入月份,通过计算机串口显示相应的日子。#include

//包含8952单片机头文件 #include

//包含计算机串口头文件 #define uint unsigned int void main() { uint month; uint day; SCON=0x50;

//串行口工作在方式1,允许接收。

TMOD=0x20; //定时器1工作在方式2

TCON=0x40; TH1=0xE8;

//装入波特率对应的时间常数

TL1=0xE8; TI=1; TR1=1;

}

printf(\"input month\\n\");//要求输入月份

scanf(\"%d\",&month); //读取键盘输入的月份数值。

switch(month) //查阅月份

{ case 1: case 3: case 5: case 7: case 8: case 10: case 12:day=31; //

1、

3、

5、

7、

8、

10、12上显示31日

break; case 4: case 6: case 9: case 11:day=30; //

4、

6、

9、11显示30日

break; case 2:day=28; //2月份显示28日

break; default:day=1; //都不是,日期1

} printf(\"month,has day\\n\",&month,&day); //在屏幕上显示对应月份的日期

}

程序8 数码显示程序 unsigned char b[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; 数码管段码,加1个全灭段码

unsigned char c[8]; //规定显示段码数组为8

void display()

{ unsigned char i;

for(i=0;i

{

P0=c[i]; //送出段码

P2=i; //送出位选码

delay(2);

} } 程序96 串口接收程序

#include

//16个

#define uchar unsigned char uchar idata buf[8]; main() { uchar i; SCON= 0x50;

//规定串口工作方式1,允许接收。

,

PCON=0;

//SMOD=0 TMOD= 0x20;

//定时器1 工作在定时方式2

TH1= 0xe6;

//12MHz 1200波特率 TL1= 0xe6; TR1= 1;

//启动钉子定时器1

while(1)

//不断接收数据 { for (i=0;i

{

while( RI==0)

//查询接收一帧数据完毕否

RI=0;

buf[i]=SBUF;

//从串口接收数据存入数组 buf[]

} } } 程序10 串口发送程序,发送89S51 #include #define uchar unsigned char #define uint unsigned int uchar idata trdata[]={\'8\',\'9\',\'S\',\'5\',\'1\',0x0d,0x0a,0x00}; main() { uchar i;

uint j; SCON= 0x40;

//规定串口工作在方式1,发送数据

PCON=0;

//SMOD=0 TMOD= 0x20;

//定时器1工作在方式2

TH1= 0xe6;

//12MHz 1200波特率 TL1= 0xe6; TR1= 1;

//启动定时器1

while(1)

//不断发送数据

{

i=0;

while(trdata[i]!=0x00)

//00结束 { SBUF=trdata[i];

//将数据送到串口发送器SBUF

while(TI==0);

TI=0;

i++;

}

for (j=0;j

} } //延时8μS×50000 =0.4秒

6程序分析

6 辞退程序

程序标6

典礼程序6

电力行业分析.6

入党宣誓仪式程序(6)

模块6案例分析

案例分析1~6

【专题6】分析简答专题

婚礼准备程序前6个月

6程序分析
《6程序分析.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档