6程序分析_程序分析技术第六讲
6程序分析由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“程序分析技术第六讲”。
《单片机原理及应用》题库六
(程序分析)
程序1
流水灯程序
#include
//包含8952单片机头文件 void delaym(unsigned int t)
// 延时子程序,入口参数ms,延迟时间=t*1ms,t取值范围0~65535 {
unsigned char j;
//j取值范围0~255 while(t--){ for(j = 0;j
//j进行的内部循环,1次延迟8us } }
void main(){
unsigned int i;
while(1)
{
unsigned char a=0xfe;
for(i=0;i
{
P0=a;
delaym(200);
a
//循环左移1位
} } }
程序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;// 无键按下,返回
}
程序5 按键取值计算程序
void KeyDeal(unsigned char Key)
{
if(Key!=0)
//再次判断是否有按键按下
{
switch(Key)
//对按键的行列码译码成0~15
{
case 0x11: K=0;break;
case 0x21: K=1;break;
case 0x41: K=2;break;
case 0x81: K=3;break;
case 0x12: K=4;break;
case 0x22: K=5;break;
case 0x42: K=6;break;
case 0x82: K=7;break;
case 0x14: K=8;break;
case 0x24: K=9;break;
case 0x44: K=10;break;
case 0x84: K=11;break;
case 0x18: K=12;break;
case 0x28: K=13;break;
case 0x48: K=14;break;
case 0x88: K=15;break;
default: break;
}
if(K
{
c[7]=c[6];
//改变显示位置,显示代码顺序前移
c[6]=c[5];
c[5]=c[4];
c[4]=c[3];
c[3]=c[2];
c[2]=c[1];
c[1]=c[0];
c[0]=b[K];
//将0~15译成段码供显示
}
} } 程序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 monthn”);//要求输入月份
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 dayn”,&month,&day);//在屏幕上显示对应月份的日期
}
程序7 延时1秒子程序A void delay(void)
{ unsigned char m,n,s;//定义m,n,s为无符号字符型数值(0~255)
for(m=10;m>0;m--)
//m的用途控制第1重循环
for(n=100;n>0;n--)
for(s=124;s>0;s--);
//3个for指令总延时1mS×100× 10=1秒
延时子程序B void delay(unsigned char t){
while(t--)
// 由调用程序规定延时时间
{
unsigned char j;//j的取值范围 0~255
for(j = 0;j
} }
程序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 #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波特率
//16个
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
} }
《单片机原理及应用》题库六(程序分析)程序2 电子秒表工作程序 void main() { TMOD=0x01;//定时器T0工作在方式1 TH0=0xD8;// T0装入时间常数TL0=0xf0;EA=1;//允许 中断ET0=......
分析程序就像了解一件产品一样,我们每次想要了解一件产品首先都会问是干什么用的、具体在那些方面、具体怎么做、做得好不好…,想要了解分析程序也一样。分析程序是做什么用的......
工作分析是一项技术性很强的工作,需要做周密的准备。同时还需具有与组织人事管理活动相匹配的科学的、合理的操作程序。下图是工作分析的程序模型,工作分析通常依照该程序进行......
关于专利法对公众意见的处理程序分析1984年专利法第41条和第42条规定了异议程序的法律效力:“第四十一条 专利申请自公告之日起三个月内,任何人都可以依照本法规定向专利局对......
程序法案例分析案例12002年9月30日,河南省孟州市质量技术监督局稽查人员对河南省孟州市电业乐万家有限责任公司经销的商品进行执法检查时,发现该公司销售的“五粮液”酒防伪标......
