百度
360搜索
搜狗搜索

单片机实例100例,单片机C语言程序设计实训100例:基于8051+Proteus仿真的内容简介详细介绍

本文目录一览: o你好,能给我发一份《单片机C语言程序设计实训100例

【程序80】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
1.程序分析:
2.程序源代码:
main()
{int i,m,j,k,count;
for(i=4;i<10000;i+=4)
{ count=0;
m=i;
for(k=0;k<5;k++)
{
 j=i/4*5+1;
 i=j;
 if(j%4==0)
  count++;
 else
  break;
}
 i=m;
 if(count==4)
 {printf("%d\n",count);
  break;}
}
}
【程序81】
题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
1.程序分析:
2.程序源代码:
output(long b,long i)
{ printf("\n%ld/%ld=809*%ld+%ld",b,i,i,b%i);
}
main()
{long int a,b,i;
a=809;
for(i=10;i<100;i++)
{b=i*a+1;
if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)
output(b,i); }
}
==============================================================
【程序82】
题目:八进制转换为十进制
1.程序分析:           
2.程序源代码:
main()
{ char *p,s[6];int n;
p=s;
gets(p);
n=0;
while(*(p)!='\0')
{n=n*8+*p-'0';
p++;}
printf("%d",n);
}
==============================================================
【程序83】
题目:求0—7所能组成的奇数个数。
1.程序分析:
2.程序源代码:
main()
{
long sum=4,s=4;
int j;
for(j=2;j<=8;j++)/*j is place of number*/ { printf("\n%ld",sum);
if(j<=2)
s*=7;
else
s*=8;
sum+=s;}
printf("\nsum=%ld",sum);
}
==============================================================
【程序84】
题目:一个偶数总能表示为两个素数之和。
1.程序分析:
2.程序源代码:
#i nclude "stdio.h"
#i nclude "math.h"
main()
{ int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{ for(c=2;c<=sqrt(b);c++)
if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
else
break;
for(c=2;c<=sqrt(d);c++)
if(d%c==0) break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
}
}
==============================================================
【程序85】
题目:判断一个素数能被几个9整除
1.程序分析:
2.程序源代码:
main()
{ long int m9=9,sum=9;
int zi,n1=1,c9=1;
scanf("%d",&zi);
while(n1!=0)
{ if(!(sum%zi))
n1=0;
else
{m9=m9*10;
sum=sum+m9;
c9++;
}
}
printf("%ld,can be divided by %d \"9\"",sum,c9);
}
==============================================================
【程序86】
题目:两个字符串连接程序
1.程序分析:
2.程序源代码:
#i nclude "stdio.h"
main()
{char a[]="acegikm";
char b[]="bdfhjlnpq";
char c[80],*p;
int i=0,j=0,k=0;
while(a[i]!='\0'&&b[j]!='\0')
{if (a[i] { c[k]=a[i];i++;}
else
c[k]=b[j++];
k++;
}
c[k]='\0';
if(a[i]=='\0')
p=b+j;
else
p=a+i;
strcat(c,p);
puts(c);
}
==============================================================
【程序87】
题目:回答结果(结构体变量传递)
1.程序分析:     
2.程序源代码:
#i nclude "stdio.h"
struct student
{ int x;
char c;
} a;
main()
{a.x=3;
a.c='a';
f(a);
printf("%d,%c",a.x,a.c);
}
f(struct student b)
{
b.x=20;
b.c='y';
}
==============================================================
【程序88】
题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
1.程序分析:
2.程序源代码:
main()
{int i,a,n=1;
while(n<=7)
{ do {
   scanf("%d",&a);
   }while(a<1||a>50);
for(i=1;i<=a;i++)
 printf("*");
printf("\n");
n++;}
getch();
}
==============================================================
【程序89】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
1.程序分析:
2.程序源代码:
main()
{int a,i,aa[4],t;
scanf("%d",&a);
aa[0]=a%10;
aa[1]=a%100/10;
aa[2]=a%1000/100;
aa[3]=a/1000;
for(i=0;i<=3;i++)
 {aa[i]+=5;
 aa[i]%=10;
 }
for(i=0;i<=3/2;i++)
 {t=aa[i];
 aa[i]=aa[3-i];
 aa[3-i]=t;
 }
for(i=3;i>=0;i--)
printf("%d",aa[i]);
}
==============================================================
【程序90】
题目:专升本一题,读结果。
1.程序分析:
2.程序源代码:
#i nclude "stdio.h"
#define M 5
main()
{int a[M]={1,2,3,4,5};
int i,j,t;
i=0;j=M-1;
while(i {t=*(a+i);
*(a+i)=*(a+j);
*(a+j)=t;
i++;j--;
}
for(i=0;i printf("%d",*(a+i));
}
【程序91】
题目:时间函数举例1
1.程序分析:
2.程序源代码:
#i nclude "stdio.h"
#i nclude "time.h"
void main()
{ time_t lt; /*define a longint time varible*/ lt=time(NULL);/*system time and date*/ printf(ctime(<)); /*english format output*/ printf(asctime(localtime(<)));/*tranfer to tm*/ printf(asctime(gmtime(<))); /*tranfer to Greenwich time*/ }
==============================================================
【程序92】
题目:时间函数举例2
1.程序分析:           
2.程序源代码:
/*calculate time*/ #i nclude "time.h"
#i nclude "stdio.h"
main()
{ time_t start,end;
int i;
start=time(NULL);
for(i=0;i<3000;i++)
{ printf("\1\1\1\1\1\1\1\1\1\1\n");}
end=time(NULL);
printf("\1: The different is %6.3f\n",difftime(end,start));
}
==============================================================
【程序93】
题目:时间函数举例3
1.程序分析:
2.程序源代码:
/*calculate time*/ #i nclude "time.h"
#i nclude "stdio.h"
main()
{ clock_t start,end;
int i;
double var;
start=clock();
for(i=0;i<10000;i++)
{ printf("\1\1\1\1\1\1\1\1\1\1\n");}
end=clock();
printf("\1: The different is %6.3f\n",(double)(end-start));
}
==============================================================
【程序94】
题目:时间函数举例4,一个猜数游戏,判断一个人反应快慢。
1.程序分析:
2.程序源代码:
#i nclude "time.h"
#i nclude "stdlib.h"
#i nclude "stdio.h"
main()
{char c;
clock_t start,end;
time_t a,b;
double var;
int i,guess;
srand(time(NULL));
printf("do you want to play it.('y' or 'n') \n");
loop:
while((c=getchar())=='y')
{
i=rand()%100;
printf("\nplease input number you guess:\n");
start=clock();
a=time(NULL);
scanf("%d",&guess);
while(guess!=i)
{if(guess>i)
{printf("please input a little smaller.\n");
scanf("%d",&guess);}
else
{printf("please input a little bigger.\n");
scanf("%d",&guess);}
}
end=clock();
b=time(NULL);
printf("\1: It took you %6.3f seconds\n",var=(double)(end-start)/18.2);
printf("\1: it took you %6.3f seconds\n\n",difftime(b,a));
if(var<15)
printf("\1\1 You are very clever! \1\1\n\n");
else if(var<25)
printf("\1\1 you are normal! \1\1\n\n");
else
printf("\1\1 you are stupid! \1\1\n\n");
printf("\1\1 Congradulations \1\1\n\n");
printf("The number you guess is %d",i);
}
printf("\ndo you want to try it again?(\"yy\".or.\"n\")\n");
if((c=getch())=='y')
goto loop;
}
==============================================================
【程序95】
题目:家庭财务管理小程序
1.程序分析:
2.程序源代码:
/*money management system*/ #i nclude "stdio.h"
#i nclude "dos.h"
main()
{
FILE *fp;
struct date d;
float sum,chm=0.0;
int len,i,j=0;
int c;
char ch[4]="",ch1[16]="",chtime[12]="",chshop[16],chmoney[8];
pp: clrscr();
sum=0.0;
gotoxy(1,1);printf("|---------------------------------------------------------------------------|");
gotoxy(1,2);printf("| money management system(C1.0) 2000.03 |");
gotoxy(1,3);printf("|---------------------------------------------------------------------------|");
gotoxy(1,4);printf("| -- money records -- | -- today cost list -- |");
gotoxy(1,5);printf("| ------------------------ |-------------------------------------|");
gotoxy(1,6);printf("| date: -------------- | |");
gotoxy(1,7);printf("| | | | |");
gotoxy(1,8);printf("| -------------- | |");
gotoxy(1,9);printf("| thgs: ------------------ | |");
gotoxy(1,10);printf("| | | | |");
gotoxy(1,11);printf("| ------------------ | |");
gotoxy(1,12);printf("| cost: ---------- | |");
gotoxy(1,13);printf("| | | | |");
gotoxy(1,14);printf("| ---------- | |");
gotoxy(1,15);printf("| | |");
gotoxy(1,16);printf("| | |");
gotoxy(1,17);printf("| | |");
gotoxy(1,18);printf("| | |");
gotoxy(1,19);printf("| | |");
gotoxy(1,20);printf("| | |");
gotoxy(1,21);printf("| | |");
gotoxy(1,22);printf("| | |");
gotoxy(1,23);printf("|---------------------------------------------------------------------------|");
i=0;
getdate(&d);
sprintf(chtime,"%4d.%02d.%02d",d.da_year,d.da_mon,d.da_day);
for(;;)
{
gotoxy(3,24);printf(" Tab __browse cost list Esc __quit");
gotoxy(13,10);printf(" ");
gotoxy(13,13);printf(" ");
gotoxy(13,7);printf("%s",chtime);
j=18;
ch[0]=getch();
if(ch[0]==27)
break;
strcpy(chshop,"");
strcpy(chmoney,"");
if(ch[0]==9)
{
mm:i=0;
fp=fopen("home.dat","r+");
gotoxy(3,24);printf(" ");
gotoxy(6,4);printf(" list records ");
gotoxy(1,5);printf("|-------------------------------------|");
gotoxy(41,4);printf(" ");
gotoxy(41,5);printf(" |");
while(fscanf(fp,"%10s%14s%f\n",chtime,chshop,&chm)!=EOF)
{ if(i==36)
{ getch();
i=0;}
if ((i%36)<17)
{ gotoxy(4,6+i);
printf(" ");
gotoxy(4,6+i);}
else
if((i%36)>16)
{ gotoxy(41,4+i-17);
printf(" ");
gotoxy(42,4+i-17);}
i++;
sum=sum+chm;
printf("%10s %-14s %6.1f\n",chtime,chshop,chm);}
gotoxy(1,23);printf("|---------------------------------------------------------------------------|");
gotoxy(1,24);printf("| |");
gotoxy(1,25);printf("|---------------------------------------------------------------------------|");
gotoxy(10,24);printf("total is %8.1f$",sum);
fclose(fp);
gotoxy(49,24);printf("press any key to.....");getch();goto pp;
}
else
{
while(ch[0]!='\r')
{ if(j<10)
{ strncat(chtime,ch,1);
j++;}
if(ch[0]==8)
{
len=strlen(chtime)-1;
if(j>15)
{ len=len+1; j=11;}
strcpy(ch1,"");
j=j-2;
strncat(ch1,chtime,len);
strcpy(chtime,"");
strncat(chtime,ch1,len-1);
gotoxy(13,7);printf(" ");}
gotoxy(13,7);printf("%s",chtime);ch[0]=getch();
if(ch[0]==9)
goto mm;
if(ch[0]==27)
exit(1);
}
gotoxy(3,24);printf(" ");
gotoxy(13,10);
j=0;
ch[0]=getch();
while(ch[0]!='\r')
{ if (j<14)
{ strncat(chshop,ch,1);
j++;}
if(ch[0]==8)
{ len=strlen(chshop)-1;
strcpy(ch1,"");
j=j-2;
strncat(ch1,chshop,len);
strcpy(chshop,"");
strncat(chshop,ch1,len-1);
gotoxy(13,10);printf(" ");}
gotoxy(13,10);printf("%s",chshop);ch[0]=getch();}
gotoxy(13,13);
j=0;
ch[0]=getch();
while(ch[0]!='\r')
{ if (j<6)
{ strncat(chmoney,ch,1);
j++;}
if(ch[0]==8)
{ len=strlen(chmoney)-1;
strcpy(ch1,"");
j=j-2;
strncat(ch1,chmoney,len);
strcpy(chmoney,"");
strncat(chmoney,ch1,len-1);
gotoxy(13,13);printf(" ");}
gotoxy(13,13);printf("%s",chmoney);ch[0]=getch();}
if((strlen(chshop)==0)||(strlen(chmoney)==0))
continue;
if((fp=fopen("home.dat","a+"))!=NULL);
fprintf(fp,"%10s%14s%6s",chtime,chshop,chmoney);
fputc('\n',fp);
fclose(fp);
i++;
gotoxy(41,5+i);
printf("%10s %-14s %-6s",chtime,chshop,chmoney);
}}}
==============================================================
【程序96】
题目:计算字符串中子串出现的次数
1.程序分析:
2.程序源代码:
#i nclude "string.h"
#i nclude "stdio.h"
main()
{ char str1[20],str2[20],*p1,*p2;
int sum=0;
printf("please input two strings\n");
scanf("%s%s",str1,str2);
p1=str1;p2=str2;
while(*p1!='\0')
{
if(*p1==*p2)
{while(*p1==*p2&&*p2!='\0')
{p1++;
p2++;}
}
else
p1++;
if(*p2=='\0')
sum++;
p2=str2;
}
printf("%d",sum);
getch();}
==============================================================
【程序97】
题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
1.程序分析:     
2.程序源代码:
#i nclude "stdio.h"
main()
{ FILE *fp;
char ch,filename[10];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{printf("cannot open file\n");
exit(0);}
ch=getchar();
ch=getchar();
while(ch!='#')
{fputc(ch,fp);putchar(ch);
ch=getchar();
}
fclose(fp);
}
==============================================================
【程序98】
题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。
1.程序分析:
2.程序源代码:
#i nclude "stdio.h"
main()
{FILE *fp;
char str[100],filename[10];
int i=0;
if((fp=fopen("test","w"))==NULL)
{ printf("cannot open the file\n");
exit(0);}
printf("please input a string:\n");
gets(str);
while(str[i]!='!')
{ if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
fputc(str[i],fp);
i++;}
fclose(fp);
fp=fopen("test","r");
fgets(str,strlen(str)+1,fp);
printf("%s\n",str);
fclose(fp);
}
==============================================================
【程序99】
题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
1.程序分析:
2.程序源代码:
#i nclude "stdio.h"
main()
{ FILE *fp;
int i,j,n,ni;
char c[160],t,ch;
if((fp=fopen("A","r"))==NULL)
{printf("file A cannot be opened\n");
exit(0);}
printf("\n A contents are :\n");
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{c[i]=ch;
putchar(c[i]);
}
fclose(fp);
ni=i;
if((fp=fopen("B","r"))==NULL)
{printf("file B cannot be opened\n");
exit(0);}
printf("\n B contents are :\n");
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{c[i]=ch;
putchar(c[i]);
}
fclose(fp);
n=i;
for(i=0;i
<n;i++)
for(j=i+1;j
<n;j++)
if(c[i]>c[j])

{t=c[i];c[i]=c[j];c[j]=t;}

printf("\n C file is:\n");

fp=fopen("C","w");

for(i=0;i
<n;i++)
{ putc(c[i],fp);

putchar(c[i]);

}

fclose(fp);

}

==============================================================

【程序100】

题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

1.程序分析:

2.程序源代码:

#i nclude "stdio.h"

struct student

{ char num[6];

char name[8];

int score[3];

float avr;

} stu[5];

main()

{int i,j,sum

发给我一份源代码特别是综合部分的

已发

可以给我也发一个吗?52510712@qq.com

有C的程序要么?
</n;i++)
</n;j++)
</n;i++)

阅读更多 >>>  猴子最讨厌什么线

《单片机C语言程序设计实训100例——基于8051+Proteus仿真》 第03篇源代码

单片机c语言编程100个实例目录1
函数的使用和熟悉
实例3:用单片机控制第一个灯亮
实例4:用单片机控制一个灯闪烁:认识单片机的工作频率
实例5:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能
实例6:使用P3口流水点亮8位LED
实例7:通过对P3口地址的操作流水点亮8位LED
实例8:用不同数据类型控制灯闪烁时间
实例9:用P0口、P1 口分别显示加法和减法运算结果
实例10:用P0、P1口显示乘法运算结果
实例11:用P1、P0口显示除法运算结果
实例12:用自增运算控制P0口8位LED流水花样
实例13:用P0口显示逻辑"与"运算结果
实例14:用P0口显示条件运算结果
实例15:用P0口显示按位"异或"运算结果
实例16:用P0显示左移运算结果
实例17:"万能逻辑电路"实验
实例18:用右移运算流水点亮P1口8位LED
实例19:用if语句控制P0口8位LED的流水方向
实例20:用swtich语句的控制P0口8位LED的点亮状态
实例21:用for语句控制蜂鸣器鸣笛次数
实例22:用while语句控制LED
实例23:用do-while语句控制P0口8位LED流水点亮
实例24:用字符型数组控制P0口8位LED流水点亮
实例25: 用P0口显示字符串常量
实例26:用P0 口显示指针运算结果
实例27:用指针数组控制P0口8位LED流水点亮
实例28:用数组的指针控制P0 口8 位LED流水点亮
实例29:用P0 、P1口显示整型函数返回值
实例30:用有参函数控制P0口8位LED流水速度
实例31:用数组作函数参数控制流水花样
实例32:用指针作函数参数控制P0口8位LED流水点亮
实例33:用函数型指针控制P1口灯花样
实例34:用指针数组作为函数的参数显示多个字符串
单片机c语言编程100个实例目录2
实例35:字符函数ctype.h应用举例
实例36:内部函数intrins.h应用举例
实例37:标准函数stdlib.h应用举例
实例38:字符串函数string.h应用举例
实例39:宏定义应用举例2
实例40:宏定义应用举例2
实例41:宏定义应用举例3
* 中断、定时器中断、定时器 *中断、定时器*中断、定时器 /
实例42:用定时器T0查询方式P2口8位控制LED闪烁
实例43:用定时器T1查询方式控制单片机发出1KHz音频
实例44:将计数器T0计数的结果送P1口8位LED显示
实例45:用定时器T0的中断控制1位LED闪烁
实例46:用定时器T0的中断实现长时间定时
实例47:用定时器T1中断控制两个LED以不同周期闪烁
实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频
实例49:用定时器T0的中断实现"渴望"主题曲的播放
实例50-1:输出50个矩形脉冲
实例50-2:计数器T0统计外部脉冲数
实例51-2:定时器T0的模式2测量正脉冲宽度
实例52:用定时器T0控制输出高低宽度不同的矩形波
实例53:用外中断0的中断方式进行数据采集
实例54-1:输出负脉宽为200微秒的方波
实例54-2:测量负脉冲宽度
实例55:方式0控制流水灯循环点亮
实例56-1:数据发送程序
实例56-2:数据接收程序
实例57-1:数据发送程序
实例57-2:数据接收程序
实例58:单片机向PC发送数据
实例59:单片机接收PC发出的数据
*数码管显示*数码管显示 数码管显示数码管显示*/
实例60:用LED数码显示数字5
实例61:用LED数码显示器循环显示数字0~9
实例62:用数码管慢速动态扫描显示数字"1234"
实例63:用LED数码显示器伪静态显示数字1234
实例64:用数码管显示动态检测结果
实例65:数码秒表设计
实例66:数码时钟设计
实例67:用LED数码管显示计数器T0的计数值
实例68:静态显示数字“59”
单片机c语言编程100个实例目录3
键盘控制*键盘控制* *键盘控制 *键盘控制 */
实例69:无软件消抖的独立式键盘输入实验
实例70:软件消抖的独立式键盘输入实验
实例71:CPU控制的独立式键盘扫描实验
实例72:定时器中断控制的独立式键盘扫描实验
实例73:独立式键盘控制的4级变速流水灯
实例74:独立式键盘的按键功能扩展:"以一当四"
实例75:独立式键盘调时的数码时钟实验
实例76:独立式键盘控制步进电机实验
实例77:矩阵式键盘按键值的数码管显示实验
//实例78:矩阵式键盘按键音
实例79:简易电子琴
实例80:矩阵式键盘实现的电子密码锁
液晶显示LCD*液晶显示LCD *液晶显示LCD * *液晶显示LCD*液晶显示LCD *液晶显示LCD */
实例81:用LCD显示字符'A'
实例82:用LCD循环右移显示"Welcome to China"
实例83:用LCD显示适时检测结果
实例84:液晶时钟设计
*一些芯片的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 红外遥控/
实例85:将数据"0x0f"写入AT24C02再读出送P1口显示
实例86:将按键次数写入AT24C02,再读出并用1602LCD显示
实例87:对I2C总线上挂接多个AT24C02的读写操作
实例88:基于AT24C02的多机通信 读取程序
实例89:基于AT24C02的多机通信 写入程序
实例90:DS18B20温度检测及其液晶显示
实例91:将数据"0xaa"写入X5045再读出送P1口显示
实例92:将流水灯控制码写入X5045并读出送P1口显示
实例93:对SPI总线上挂接多个X5045的读写操作
实例94:基于ADC0832的数字电压表
实例95:用DAC0832产生锯齿波电压
实例96:用P1口显示红外遥控器的按键值
实例97:用红外遥控器控制继电器
实例98:基于DS1302的日历时钟
实例99:单片机数据发送程序
实例100:电机转速表设计
模拟霍尔脉冲
http://www.dzkfw.com.cn/myxin/51c_language.chm 单片机c语言一百例子

单片机C语言程序设计实训100例的内容简介

基于AVR Studio+WinAVR(GCC)组合环境和Proteus硬件仿真平台,精心安排了100个AVR单片机C程序设计案例。全书提供了所有寨例完整的C语言源程序,各案例设计了难易适中的实训目标。基础设计类案例涵盏AVR单片机最基本的端口编程、定时/计数器应用、中断程序设计、A/D转换、比较器程序设计、EEPROM、Flash、USART及看门狗程序设计;硬件应用类案例涉及单片机存储器扩展、接口扩展、译码、编码、驱动、光电、机电、传感器、IsC/TWl及SPl接口器件、MMC、红外等器件;综合设计类案例涉及消费类电子产品、仪器仪表及智能控制设备相关技术,相关案例涉及485及RTL8019的应用。本书适合用作大专院校学生学匀实践AVR单片机C语言程序设计技术的参考书,也可用作电子工程技术人员、单片机技术爱好者的学习参考书。

单片机C语言程序设计实训100例:基于8051+Proteus仿真的目录

第1章8051单片机C语言程序设计概述11.1 8051单片机引脚11.2 数据与程序内存21.3 特殊功能寄存器31.4 外部中断、定时/计数器及串口应用41.5 有符号与无符号数应用、数位分解、位操作51.6 变量、存储类型与存储模式71.7 数组、字符串与指针91.8 流程控制111.9 可重入函数和中断函数111.10 C语言在单片机系统开发中的优势12第2章Proteus操作基础132.1 Proteus操作界面简介132.2 仿真电路原理图设计142.3 元件选择162.4 调试仿真202.5 Proteus与? V3的联合调试21第3章 基础程序设计223.1 闪烁的LED 223.2 从左到右的流水灯233.3 左右来回循环的流水灯253.4 花样流水灯263.5 LED模拟交通灯283.6 单只数码管循环显示0~9 303.7 8只数码管滚动显示单个数字313.8 8只数码管显示多个不同字符333.9 数码管闪烁显示353.10 8只数码管滚动显示数字串363.11 K1~K4控制LED移位373.12 K1~K4按键状态显示393.13 K1~K4分组控制LED 403.14 K1~K4控制数码管移位显示423.15 K1~K4控制数码管加减演示443.16 4×4键盘矩阵控制条形LED显示463.17 数码管显示4×4键盘矩阵按键483.18 开关控制LED 513.19 继电器控制照明设备523.20 数码管显示拨码开关编码533.21 开关控制报警器553.22 按键发音563.23 播放音乐583.24 INT0中断计数593.25 INT0中断控制LED 613.26 INT0及INT1中断计数633.27 TIMER0控制单只LED闪烁663.28 TIMER0控制流水灯683.29 TIMER0控制4只LED滚动闪烁703.30 T0控制LED实现二进制计数723.31 TIMER0与TIMER1控制条形LED 733.32 10s的秒表753.33 用计数器中断实现100以内的按键计数773.34 10 000s以内的计时程序783.35 定时器控制数码管动态显示813.36 8×8 LED点阵屏显示数字833.37 按键控制8×8 LED点阵屏显示图形853.38 用定时器设计的门铃873.39 演奏音阶893.40 按键控制定时器选播多段音乐913.41 定时器控制交通指示灯933.42 报警器与旋转灯963.43 串行数据转换为并行数据983.44 并行数据转换为串行数据993.45 甲机通过串口控制乙机LED闪烁1013.46 单片机之间双向通信1043.47 单片机向主机发送字符串1083.48 单片机与PC串口通信仿真110第4章 硬件应用1154.1 74LS138译码器应用1154.2 74HC154译码器应用1164.3 74HC595串入并出芯片应用1184.4 用74LS148扩展中断1214.5 I2C-24C04与蜂鸣器1234.6 I2C-24C04与数码管1274.7 用6264扩展内存1324.8 用8255实现接口扩展1344.9 555的应用1364.10 BCD译码数码管显示数字1384.11 MAX7221控制数码管动态显示1394.12 1602字符液晶滚动显示程序1424.13 1602液晶显示的DS1302实时时钟1484.14 12864LCD图像滚动显示1544.15 160128LCD图文演示1604.16 2×20串行字符液晶显示1674.17 开关控制12864LCD串行模式显示1694.18 ADC0832模数转换与显示1754.19 用ADC0808控制PWM输出1784.20 ADC0809模数转换与显示1814.21 用DAC0832生成锯齿波1834.22 用DAC0808实现数字调压1844.23 PCF8591模数与数模转换1864.24 DS1621温度传感器输出显示1934.25 DS18B20温度传感器输出显示1984.26 正反转可控的直流电动机2034.27 正反转可控的步进电动机2054.28 键控看门狗208第5章 综合设计2115.1 可以调控的走马灯2115.2 按键选播电子音乐2145.3 可演奏的电子琴2165.4 1602LCD显示仿手机键盘按键字符2195.5 1602LCD显示电话拨号键盘按键2225.6 12864LCD显示计算器键盘按键2255.7 数码管随机模拟显示乘法口诀2315.8 1602LCD随机模拟显示乘法口诀2345.9 用数码管设计的可调式电子钟2365.10 用1602LCD设计的可调式电子钟2395.11 用DS1302与数码管设计的可调式电子表2435.12 用DS1302与1602LCD设计的可调式电子日历与时钟2475.13 用DS1302与12864LCD设计的可调式中文电子日历2525.14 用PG12864LCD设计的指针式电子钟2575.15 高仿真数码管电子钟2665.16 1602LCD显示的秒表2695.17 数码管显示的频率计2745.18 字符液晶显示的频率计2765.19 用ADC0832调节频率输出2795.20 用ADC0832设计的两路电压表2815.21 用数码管与DS18B20设计的温度报警器2845.22 用1602LCD与DS18B20设计的温度报警器2895.23 数码管显示的温控电动机2955.24 温度控制直流电动机转速2985.25 用ADC0808设计的调温报警器3035.26 160128LCD中文显示温度与时间3065.27 用DAC0808设计的直流电动机调速器3095.28 160128液晶中文显示ADC0832两路模数转换结果3105.29 160128液晶曲线显示ADC0832两路模数转换结果3135.30 串口发送数据到2片8×8点阵屏滚动显示3155.31 用74LS595与74LS154设计的16×16点阵屏3185.32 用8255与74LS154设计的16×16点阵屏3205.33 8×8 LED点阵屏仿电梯数字滚动显示3235.34 用24C04与1602LCD设计电子密码锁3255.35 光耦控制点亮和延时关闭照明设备3315.36 12864LCD显示24C08保存的开机画面3345.37 12864LCD显示EPROM2764保存的开机画面3405.38 160128液晶显示当前压力3425.39 单片机系统中自制硬件字库的应用3445.40 用8051与1601LCD设计的整数计算器3495.41 模拟射击训练游戏357参考文献363

阅读更多 >>>  为什么桃子李子不能一起吃

单片机C语言程序设计实训100例:基于8051+Proteus仿真的内容简介

《单片机C语言程序设计实训100例:基于8051+Proteus仿真》讲述了:第一章用简短篇幅介绍8051单片机的特点、应用,以及Keil C语言程序设计,在语言程序设计中重点介绍8051内部资源;第二章介绍Proteus的入门操作;第三~五章全部为单片机的C程序设计案例;第三章为基础案例,涉及C语言基础部分,基本IO部分,中断与定时器,串口控制,模数与数模转换部分等;第四章在前面的基础上对扩展的外围硬件应用进行编程,包括译码器、串并转换芯片、存储器、中英文液晶屏、IIC等;第五章是综合设计部分,涉及一些具体的应用型产品的设计。读者对象:《单片机C语言程序设计实训100例:基于8051+Proteus仿真》适用于计算机专业或电子类专业在校学生,特别是职业技术院校学生,实验室投入不足的学校,电子工程技术人员,以及社会上希望学习单片机技术但还没有购置单片机硬件实验设备的人员。

求51单片机控制2个数码管的程序

两只数码管段码分别由P0,P2输出控制,P0是十位,P2是个位。P3.2,P3.4分别接两只按键,P32.清0,P3.4计数。
以上程序来自《单片机C语言程序设计实训100例——基于8051+Proteus仿真》
#include

#define uchar unsigned char

#define uint unsigned int

uchar DSY_CODE[]=

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

};

uchar Count = 0;

void main()

{

P0 = 0x00;

P2 = 0x00;

TMOD = 0x06;

TH0=255;

TL0=255;

ET0=1;

EX0=1;

EA =1;

IP =0x02;

IT0=1;

TR0=1;

while(1)

{

P0 = DSY_CODE[Count/10];

P2 = DSY_CODE[Count%10];

}

}

void Clear_Counter() interrupt 0

{

Count = 0;

}

void Key_Counter() interrupt 1

{

Count = (Count + 1) %100;

}

单片机C语言程序设计实训100例:基于PIC+Proteus仿真的目录

第1章PIC单片机C语言程序设计概述1.1 PIC单片机简介1.2 MPLAB+C语言程序开发环境安装及应用1.3 PICC/PICC18/MCC18程序设计基础1.4 PIC单片机内存结构1.5 PIC单片机配置位1.6 基本的I/O端口编程1.7 中断服务程序设计1.8 PIC单片机外设相关寄存器1.9 C语言程序设计在PIC单片机应用系统开发中的优势第2章PROTEUS操作基础2.1 PROTEUS操作界面简介2.2 仿真电路原理图设计2.3 元件选择2.4 仿真运行2.5 MPLAB IDE与PROTEUS的联合调试2.6 PROTEUS在PIC单片机应用系统开发中的优势第3章 基础程序设计3.1 闪烁的LED3.2 用双重循环控制LED左右来回滚动显示3.3 多花样流水灯3.4 LED模拟交通灯3.5 单只数码管循环显示0~93.6 4只数码管滚动显示单个数字3.7 8只数码管扫描显示多个不同字符3.8 K1~K5控制两位数码管的开关、加减与清零操作3.9 数码管显示4×4键盘矩阵按键3.10 数码管显示拨码开关编码3.11 继电器及双向可控硅控制照明设备3.12 INT中断计数3.13 RB端口电平变化中断控制两位数码管开关与加减显示3.14 TIMER0控制单只LED闪烁3.15 TIMER0控制流水灯3.16 TIMER0控制数码管扫描显示3.17 TIMER1控制交通指示灯3.18 TIMER1与TIMER2控制十字路口秒计时显示屏3.19 用工作于同步计数方式的TMR1实现按键或脉冲计数3.20 用定时器设计的门铃3.21 报警器与旋转灯3.22 用工作于捕获方式的CCP1设计的频率计3.23 用工作于比较模式的CCP1控制音阶播放3.24 CCP1 PWM模式应用3.25 模拟比较器测试3.26 数码管显示两路A/D转换结果3.27 EEPROM读写与数码管显示3.28 睡眠模式及看门狗应用测试3.29 单片机与PC双向串口通信仿真3.30 PIC单片机并行从动端口PSP读写测试第4章 硬件应用4.1 74HC138与74HC154译码器应用4.2 74HC595串入并出芯片应用4.3 用74HC164驱动多只数码管显示4.4 数码管BCD解码驱动器7447与4511应用4.5 8×8LED点阵屏显示数字4.6 8位数码管段位复用串行驱动芯片MAX6951应用4.7 串行共阴显示驱动器MAX7219与7221应用4.8 14段与16段数码管串行驱动显示4.9 16键解码芯片74C922应用4.10 1602LCD字符液晶测试程序4.11 1602液晶显示DS1302实时时钟4.12 1602液晶工作于4位模式实时显示当前时间4.13 带RAM内存的实时时钟与日历芯片PCF8583应用4.14 2×20串行字符液晶演示4.15 LGM12864液晶显示程序4.16 PG160128A液晶图文演示4.17 TG126410液晶串行模式显示4.18 HDG12864系列液晶演示4.19 Nokia7110液晶菜单控制程序4.20 8通道模拟开关74HC4051应用测试4.21 用带I2C接口的MCP23016扩展16位通用I/O端口4.22 用带SPI接口的MCP23S17扩展16位通用I/O端口4.23 用I2C接口控制MAX6953驱动4片5×7点阵显示器4.24 用I2C接口控制MAX6955驱动16段数码管显示4.25 用带SPI接口的数/模转换器MCP4921生成正弦波形4.26 用带SPI接口的数/模转换器MAX515控制LED亮度循环变化4.27 正反转可控的直流电机4.28 PWM控制MOSFET搭建的H桥电路驱动直流电机运行4.29 正反转可控的步进电机4.30 用L297+L298控制与驱动步进电机4.31 PC通过RS-485器件MAX487远程控制单片机4.32 I2C接口DS1621温度传感器测试4.33 SPI接口温度传感器TC72应用测试4.34 温度传感器LM35全量程应用测试4.35 K型热电偶温度计4.36 用铂电阻温度传感器PT100设计的测温系统4.37 DS18B20温度传感器测试4.38 SHT75温湿度传感器测试4.39 1-Wire式可寻址开关DS2405应用测试4.40 光敏电阻应用测试4.41 MPX4250压力传感器测试4.42 用I2C接口读写存储器AT24C044.43 用SPI接口读写AT25F10244.44 PIC18 I2C接口存储器及USART接口测试程序4.45 PIC18 SPI接口存储器测试程序4.46 PIC18定时器及A/D转换测试4.47 用PIC18控制Microwire接口继电器驱动器MAX48204.48 MMC存储卡测试4.49 ATA硬盘数据访问4.50 微芯VLS5573液晶显示屏驱动器演示第5章 综合设计5.1 用DS1302/DS18B20+MAX6951设计的多功能电子日历牌5.2 用PCF8583设计高仿真数码管电子钟5.3 用4×20LCD与DS18B20设计的单总线多点温度监测系统5.4 用内置EEPROM与1602液晶设计的加密电子密码锁5.5 用PIC单片机与1601LCD设计的计算器5.6 电子秤仿真设计5.7 数码管显示的GP2D12仿真测距警报器5.8 GPS全球定位系统仿真5.9 能接收串口信息的带中英文硬字库的80×16点阵显示屏5.10 用M145026与M145027设计的无线收发系统5.11 红外遥控收发仿真5.12 交流电压检测与数字显示仿真5.13 带位置感应器的直流无刷电机PMW控制仿真5.14 3端可调正稳压器LM317应用测试5.15 模拟射击训练游戏5.16 带触摸屏的国际象棋游戏仿真5.17 温室监控系统仿真5.18 PIC单片机MODBUS总线通信仿真5.19 PIC单片机内置CAN总线通信仿真5.20 基于PIC18+Microchip TCP/IP协议栈的HTTP服务器应用参考文献

单片机C语言程序设计实训100例综合设计中的用1602LCD与DS18B20设计的温度报警器中源程序,求急用!

#include

#include

#define uchar unsigned char

#define uint unsigned int

void Initialize_LCD();

void DelayMS(uint ms);

void ShowString(uchar,uchar,uchar *);

sbit K1=P3^0;

sbit K2=P3^1;

sbit K3=P3^2;

uchar code Prompt[]="Press K1 - K3 To Start Demo Prog";

//待滚动显示的信息段落,每行不超过80个字符,共6行

uchar const Line_Count=6;

uchar code Msg[][80]=

{

"Many CAD users dismiss schematic capture as a necessary evil in the ",

"process of creating PCB layout but we have always disputed this point ",

"of view. With PCB layout now offering automation of both component ",

"can often be the most time consuming element of the exercise.",

"And if you use circuit simulation to develop your ideas, ",

"you are going to spend even more time working on the schematic."

};

//显示缓冲(2行)

uchar Disp_Buffer[32];

//垂直滚动显示

void V_Scroll_Display()

{

uchar i,j,k=0;

uchar *p=Msg[0];

uchar *q=Msg[Line_Count]+strlen(Msg[Line_Count]);

//以下仅使用显示缓冲的前16字节空间

while(p
<q)
{

for(i=0;i<16&&p
<q;i++)
{ //消除显示缓冲中待显示行首尾可能出现的空格

if((i==0||i==15)&&*p==' ') p++;

if(*p!='\0')

{

Disp_Buffer[i]=*p++;

}

else

{

if(++k>Line_Count) break;

p=Msg[k]; //p指向下一串的首地址

Disp_Buffer[i]=*p++;

}

}

//不足16个字符时空格补充

for(j=i;j<16;j++) Disp_Buffer[j]=' ';

//垂直滚动显示

while(F0) DelayMS(5);

ShowString(0,0," ");

DelayMS(150);

while(F0) DelayMS(5);

ShowString(0,1,Disp_Buffer);

DelayMS(150);

while(F0) DelayMS(5);

ShowString(0,0,Disp_Buffer);

ShowString(0,1," ");

DelayMS(150);

}

//最后清屏

ShowString(0,0," ");

ShowString(0,1," ");

}

//水平滚动显示

void H_Scroll_Display()

{

uchar i,j,k=0,L=0;

uchar *p=Msg[0];

uchar *q=Msg[Line_Count]+strlen(Msg[Line_Count]);

//将32个字符的显示缓冲前16个字符设为空格

for(i=0;i<16;i++) Disp_Buffer[i]=' ';

while(p
<q)
{

//忽略缓冲中首尾可能出现的空格

if((i==16||i==31)&&*p==' ') p++;

for(i=16;i<32&&p
<q;i++)
{

if(*p!='\0')

{

Disp_Buffer[i]=*p++;

}

else

{

if(++k>Line_Count) break;

p=Msg[k]; //p指向下一串的首地址

Disp_Buffer[i]=*p++;

}

}

//不足32个字符时空格补充

for(j=i;j<32;j++) Disp_Buffer[j]=' ';

//水平滚动显示

for(i=0;i<=16;i++)

{

while(F0) DelayMS(5);

ShowString(0,L,Disp_Buffer+i);

while(F0) DelayMS(5);

DelayMS(20);

}

L=(L==0)?1:0; //行号在0,1间交替

DelayMS(300);

}

//如果显示结束时停留在第0行,则清除第1行的内容

if(L==1) ShowString(0,1," ");

}

//外部中断0,由K3控制暂停与继续显示

void EX_INT0() interrupt 0

{

F0=!F0; //暂停与继续显示控制标志位

}

//主程序

void main()

{

uint Count=0;

IE=0x81; //允许外部中断0

IT0=1; //下降沿触发

F0=0; //暂停与继续显示控制标志位

Initialize_LCD();

ShowString(0,0,Prompt);

ShowString(0,1,Prompt+16);

while(1)

{

if(K1==0)

{

V_Scroll_Display();

DelayMS(300);

}

else

if(K2==0)

{

H_Scroll_Display();

DelayMS(300);

}

}

}

//LCD1602.c

/* 名称:液晶控制与显示程序

说明:本程序是通用的1602液晶控制程序。

*/

#include

阅读更多 >>>  那些中国的水果外国没有

#include

#define uchar unsigned char

#define uint unsigned int

sbit RS=P2^0;

sbit RW=P2^1;

sbit EN=P2^2;

//延时

void DelayMS(uint ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

//忙检查

uchar Busy_Check()

{

uchar LCD_Status;

RS=0; //寄存器选择

RW=1; //读状态寄存器

EN=1; //开始读

DelayMS(1);

LCD_Status=P0;

EN=0;

return LCD_Status;

}

//写LCD命令

void Write_LCD_Command(uchar cmd)

{

while((Busy_Check()&0x80)==0x80); //忙等待

RS=0; //选择命令寄存器

RW=0; //写

EN=0;

P0=cmd;EN=1;DelayMS(1);EN=0;

}

//发送数据

void Write_LCD_Data(uchar dat)

{

while((Busy_Check()&0x80)==0x80); //忙等待

RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;

}

//LCD初始化

void Initialize_LCD()

{

Write_LCD_Command(0x38);DelayMS(1);

Write_LCD_Command(0x01);DelayMS(1); //清屏

Write_LCD_Command(0x06);DelayMS(1); //字符进入模式:屏幕不动,字符后移

Write_LCD_Command(0x0c);DelayMS(1); //显示开,光标关

}

//显示字符串

void ShowString(uchar x,uchar y,uchar *str)

{

uchar i=0;

if(y==0) Write_LCD_Command(0x80|x); //设置显示起始位置

if(y==1) Write_LCD_Command(0xc0|x);

for(i=0;i<16;i++) //输出字符串

{

Write_LCD_Data(str[i]);

}

}

</q;i++)
</q)
</q;i++)
</q)

单片机应用题,用c或汇编编程都可以。请把程序编写出来!谢谢!

单片机的P1口接八个LED,
INT0(P3.2)、INT1(P3.3)接开关S1与S2,当开关合上时INT0与INT1即接地。
当两个开关都断开时单片机控制P1口所接的八个LED灯一秒钟亮一秒暗地闪烁,
当开关S1合上D1~D4LED灯亮另四个暗,
当S2合上D5~D8LED灯亮另四个暗(如果S1、S2同时合上S1有优先控制权),
focs=6MHZ,要求定时器完成1秒定时,用中断来响应S1与S2动作。
==============
主程序,
……
初始化:
……
三个中断:
……
……
……
规模较大。需要编写一段时间。
翻译延时函数部分:
DELAY:
DL0: MOV R6,#100;
DL1: DJNZ R6,DL1
DL2: DJNZ R7,DL0;
RET
举例:
if(JCBZ==1) //解除状态
{
DHKZ=0; //发动机点火允许
CMBF=0; //关闭车门开启检测
}
翻译为:
JB JCBZ ,L_JIECHU
LJMP NEXT
JIECHU:
CLR DHKZ ;
CLR CMBF;
NEXT: .....

网站数据信息

"单片机实例100例,单片机C语言程序设计实训100例:基于8051+Proteus仿真的内容简介"浏览人数已经达到21次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:单片机实例100例,单片机C语言程序设计实训100例:基于8051+Proteus仿真的内容简介的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!