单片机程序源代码

合集下载

单片机c语言实例程序300篇

单片机c语言实例程序300篇

单片机c语言实例程序300篇单片机C语言【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:main(){inti,j,k;printf("\n");for(i=1;i<5;i++)/某以下为三重循环某/for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k)/某确保i、j、k三位互不相同某/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。

注意定义时需把奖金定义成长整型。

2.程序源代码:main()单片机C语言{longinti;intbonu1,bonu2,bonu4,bonu6,bonu10,bonu;canf("%ld",&i);bonu1=100000某0.1;bonu2=bonu1+100000某0.75;bonu4=bonu2+200000某0.5;bonu6=bonu4+200000某0.3;bonu10=bonu6+400000某0.15;if(i<=100000)bonu=i某0.1;eleif(i<=200000)bonu=bonu1+(i-100000)某0.075;eleif(i<=400000)bonu=bonu2+(i-200000)某0.05;eleif(i<=600000)bonu=bonu4+(i-400000)某0.03;eleif(i<=1000000)bonu=bonu6+(i-600000)某0.015;elebonu=bonu10+(i-1000000)某0.01;printf("bonu=%d",bonu);}============================================================ ==【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

单片机源代码

单片机源代码
TR1=1;
num=0;
while(1)
{
p2_0=num;
}
}
void int_1()interrupt 3
{
unsigned char n;
TH1=0x3c;
TL1=0xb0;
TR1=1;
n++;
if(n==10)
{
num=~num;
n=0;}
}
左右跑马灯
for(j=255;j>0;j--);
}
二进制加法实验
#include<reg52.h>
void delay(unsigned int i);//声明延时 函数
main()
{
unsigned char Num=oxff;
while(1)
{
p2=Num;
delay(1000);
#include<Function.h>
bit ISendstr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
{
unsigned char i;
start_12c();//启动总线
sendByte(sla);//发送器件地址
SendByte(suba);//发送器件子地址
if(ack==0)return(0);
for(i==o;i<no;i++)
{
SendByte(*s);//发送数据
if(ack==0)return(0);

52单片机源程序c语言版

52单片机源程序c语言版

一、1602液晶试验程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rs=P3^5;sbit lcden=P3^4;sbit dula=P2^6;sbit wela=P2^7;sbit rw=P3^6;uchar table1[]="CC-DZ MCU"; uchar table2[]="1234567654321"; void delay(uint x){uint a,b;for(a=x;a>0;a--)for(b=10;b>0;b--);}void delay1(uint x){uint a,b;for(a=x;a>0;a--)for(b=100;b>0;b--);}void write_com(uchar com){P0=com;rs=0;rw = 0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void write_date(uchar date){P0=date;rs=1;rw = 0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void init(){rw=0;dula=0;wela=0;write_com(0x38);delay(20);write_com(0x0f);delay(20);write_com(0x06);delay(20);write_com(0x01);delay(20);}void main(){uchar a;init();write_com(0x80+17);delay(20);for(a=0;a<9;a++){write_date(table1[a]);delay(20);}write_com(0xc0+17);delay(50);for(a=0;a<13;a++){write_date(table2[a]);delay(40);}for(a=0;a<16;a++){write_com(0x18);delay1(200);}while(1);}二、单键识别程序include <reg52.h>sbit BY1=P3^4; //定义按键的输入端S2键unsigned char count; //按键计数,每按一下,count加1 unsigned char temp;unsigned char a,b;void delay10ms(void) //延时程序{unsigned char i,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}key() //按键判断程序{if(BY1==0) //判断是否按下键盘{delay10ms(); //延时,软件去干扰if(BY1==0) //确认按键按下{count++; //按键计数加1if(count==8) //计8次重新计数{count=0; //将count清零}}while(BY1==0);//按键锁定,每按一次count只加1.}}move() //广告灯向左移动移动函数{a=temp<<count;b=temp>>(8-count);P1=a|b;}main(){count=0; //初始华参数设置temp=0xfe;P1=0xff;P1=temp;while(1) //永远循环,扫描判断按键是否按下{key(); //调用按键识别函数move(); //调用广告灯移动函数}}三、定时器试验#include <reg52.h>sbit p1=P1^0;int t;void main(){ t=0;EA=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(1){ if(TH0==0){t++;TH0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(t==20){t=0;p1=~p1;}}}}四、流水灯//flow light and beep#include <reg51.h>#include <intrins.h> unsigned char a,b,k,j;sbit beep=P2^3;void delay10ms(){for(a=100;a>0;a--)for(b=225;b>0;b--);}void main(){k=0xfe;while(1){delay10ms();beep=0;delay10ms();beep=1;j=_crol_(k,1);k=j;P1=j;}}五、数码管试验#include<reg52.h>sbit dula=P2^6;sbit wela=P2^7; unsigned char num; unsigned code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(unsigned int y) {unsigned int a,b;for(a=y;a>0;a--)for(b=0;b<500;b++);}void main(){EA=1;IT0=0;EX0=1;wela=1;P0=0x00;wela=0;while(1){for(num=0;num<16;num++){dula=1;P0=table[num];dula=0;delay(200);}}}。

单片机程序流程图及源代码

单片机程序流程图及源代码

单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。

实验内容:1)输出实验:假定4个端口全部连接发光二极管,编程实现所有发光二极管同时亮,延迟一定时间(自定)后,又同时灭,如此循环。

2)输入:从P0口输入某个数据到累加器A,打开观察窗口观察数据是否进入累加器A。

实现方式:通过peripherals实现端口数据观察实验。

程序流程图:将P0到P3端口先赋值为0,调用延迟后,再赋1,然后循环执行。

源代码:ORG 0000H ;程序入口地址LJMP MAIN ;跳转到主程序ORG 0300H ;主程序地址MAIN:MOV P0,#00H;MOV P1 ,#00H;MOV P2 ,#00H;MOV P3 ,#00H ;P0~P3均赋值为0ACALL DEL;调用延迟MOV P0 ,#0FFH;MOV P1 ,#0FFH;MOV P2 ,#0FFH;MOV P3 ,#0FFH;P0~P3均设为1MOV A,P0;将P0口值赋给累加器ACALL DEL;AJMP MAIN;跳转到主程序入口ORG 0200H;延迟程序入口地址DEL:MOV R5,#04H;寄存器实现延迟,F3:MOV R6,#0FFH;若主频为12MHZ则F2:MOV R7,#0FFH;延时为256*256*4F1:DJNZ R7,F1;0.26S,人眼可分辨DJNZ R6,F2;DJNZ R5,F3;RET;从延迟程序返回END;结束3.假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字0~9(采用软件延时)。

程序流程图:将数码管的真值编码0~9依次赋给P0并调用延迟,然后循环运行程序即可。

源代码:ORG 0000H; 程序入口SJMP MAIN; 跳转到主程序ORG 0300H; 主程序入口地址MAIN:MOV P0,#0FCH; 将数码管0的编码赋给P0口ACALL DELAY; 调用延迟,使数码管亮0持续0.33SMOV P0,#60H; show 1ACALL DELAY;MOV P0,#0DAH; show 2ACALL DELAY;MOV P0,#0F2H; show 3ACALL DELAY;MOV P0,#66H; show 4ACALL DELAY;MOV P0,#0B6H; show 5ACALL DELAY;MOVP0,#0BEH; show 6ACALL DELAY;MOV P0,#0E0H; show 7ACALL DELAY;MOV P0,#0FEH; show 8ACALL DELAY;MOV P0,#0F6H; show 9ACALL DELAY;AJMP LOOP; 跳转到主程序入口ORG 0200H; 延迟程序入口DEL:MOV R5,#05H; 采用软件延迟,若主频为12MHz,则DEL1:MOV R6,#0FFH; 定时时间为256*256*5*1uS=0.33S,DEL2:MOV R7,#0FFH; 人眼可分辨。

基于51单片机的源代码

基于51单片机的源代码

基于51单片机的源代码JIN1 EQU P1.0JIN2 EQU P1.1JIN3 EQU P1.2JIN4 EQU P1.3INH EQU P2.3CP EQU P2.2ORG 0000HAJMP MAINORG 0100HMAIN: MOV SP,#70HMOV TMOD,#20H ;自动重装MOV SCON,#50HMOV PCON,#80H ;双倍波特率SMOD=1 MOV TH1,#0FFH ;57600MHZ波特率初值MOV TL1,#0FFHMOV P1,#00HMOV P2,#00HSETB TR1SETB P2.1LOOP: LCALL keepLCALL SHUCHUACALL QINGLINGAJMP LOOP QINGLING: CJNE R0,#17,QINGLING1MOV R0,#00H QINGLING1: CJNE R1,#9,FANHUIMOV R1,#00HFANHUI: RETSHUCHU: ACALL SHUAACALL SHUBACALL SHUCACALL SHUDSHUA: MOV R3,#4SETB JIN1LLS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN1CLR INHLLS1: LJMP keepSETB CPCLR CPDJNZ R2,LLS1DJNZ R3,LLSRET SHUB: MOV R3,#4SETB JIN2 QQS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN2CLR INH QQS1: LJMP keepSETB CPINC R0CLR CPDJNZ R2,QQS1DJNZ R3,QQSRET SHUC: MOV R3,#4SETB JIN3 JJS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN3CLR INH JJS1: LJMP keepSETB CPINC R0CLR CPDJNZ R2,JJS1DJNZ R3,JJSRET SHUD: MOV R3,#4SETB JIN4 KKS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN4CLR INH KKS1: LJMP keepINC R0CLR CPDJNZ R2,KKS1DJNZ R3,KKSRETkeep: JB P2.1,KEEOCLR P2.1CJNE R1,#1,PAN1MOV R1,#00HLJMP KEEP1KEEO: RETPAN1: CJNE R1,#2,PAN2LJMP KEEP2PAN2: CJNE R1,#3,PAN3LJMP KEEP3PAN3: CJNE R1,#4,PAN4LJMP KEEP4PAN4: CJNE R1,#5,PAN5LJMP KEEP5PAN5: CJNE R1,#6,PAN6LJMP KEEP6PAN6: CJNE R1,#7,PAN7LJMP KEEP7PAN7: CJNE R1,#8,PAN8LJMP KEEP8PAN8: CJNE R1,#9,PAN9LJMP KEEP9PAN9: CJNE R1,#10,PAN10LJMP KEEP10 PAN10: CJNE R1,#11,PAN11LJMP KEEP11 PAN11: CJNE R1,#12,PAN12LJMP KEEP12 PAN12: CJNE R1,#13,PAN13LJMP KEEP13 PAN13: CJNE R1,#14,PAN14LJMP KEEP14 PAN14: CJNE R1,#15,PAN15LJMP KEEP15 PAN15: CJNE R1,#16,KEEOLJMP KEEP16KEEP1: CJNE R0,#1,LL1MOV R0,#00HLJMP SONGCHU LL1: CJNE R0,#2,LL2MOV R0,#00HMOV A,#02HLJMP SONGCHU LL2: CJNE R0,#3,LL3MOV R0,#00HMOV A,#03HLJMP SONGCHU LL3: CJNE R0,#4,LL4MOV R0,#00HMOV A,#04HLJMP SONGCHU LL4: CJNE R0,#5,LL5MOV R0,#00HMOV A,#05HLJMP SONGCHU LL5: CJNE R0,#6,LL6MOV R0,#00HMOV A,#06HLJMP SONGCHU LL6: CJNE R0,#7,LL7MOV R0,#00HMOV A,#07HLJMP SONGCHU LL7: CJNE R0,#8,LL8MOV R0,#00HMOV A,#08HLJMP SONGCHULL8: RETKEEP2: CJNE R0,#1,LL9MOV R0,#00HMOV A,#9LJMP SONGCHU LL9: CJNE R0,#2,LL10MOV R0,#00HMOV A,#10LJMP SONGCHU LL10: CJNE R0,#3,LL11MOV R0,#00HMOV A,#11LJMP SONGCHU LL11: CJNE R0,#4,LL12MOV A,#12LJMP SONGCHU LL12: CJNE R0,#5,LL13MOV R0,#00HMOV A,#13LJMP SONGCHU LL13: CJNE R0,#6,LL14MOV R0,#00HMOV A,#14LJMP SONGCHU LL14: CJNE R0,#7,LL15MOV R0,#00HMOV A,#15LJMP SONGCHU LL15: CJNE R0,#8,LL16MOV R0,#00HMOV A,#16LJMP SONGCHULL16: RETKEEP3: CJNE R0,#1,LL17MOV R0,#00HMOV A,#17LJMP SONGCHU LL17: CJNE R0,#2,LL18MOV R0,#00HMOV A,#18LJMP SONGCHU LL18: CJNE R0,#3,LL19MOV R0,#00HMOV A,#19LJMP SONGCHU LL19: CJNE R0,#4,LL20MOV R0,#00HMOV A,#20LJMP SONGCHU LL20: CJNE R0,#5,LL21MOV R0,#00HMOV A,#21LJMP SONGCHU LL21: CJNE R0,#6,LL22MOV R0,#00HMOV A,#22LJMP SONGCHULL22: CJNE R0,#7,LL23MOV R0,#00HMOV A,#23LJMP SONGCHU LL23: CJNE R0,#8,LL24MOV R0,#00HMOV A,#24LJMP SONGCHULL24: RETKEEP4: CJNE R0,#1,LL25MOV R0,#00HMOV A,#25LJMP SONGCHU LL25: CJNE R0,#2,LL26MOV R0,#00HMOV A,#26LJMP SONGCHU LL26: CJNE R0,#3,LL27MOV R0,#00HMOV A,#27LJMP SONGCHU LL27: CJNE R0,#4,LL28MOV R0,#00HMOV A,#28LJMP SONGCHU LL28: CJNE R0,#5,LL29MOV R0,#00HMOV A,#29LJMP SONGCHU LL29: CJNE R0,#6,LL30MOV R0,#00HMOV A,#30LJMP SONGCHU LL30: CJNE R0,#7,LL31MOV R0,#00HMOV A,#31LJMP SONGCHU LL31: CJNE R0,#8,LL32MOV R0,#00HMOV A,#32LJMP SONGCHULL32: RETKEEP5: CJNE R0,#1,KK1MOV R0,#00HLJMP SONGCHU KK1: CJNE R0,#2,KK2MOV R0,#00HMOV A,#34LJMP SONGCHU KK2: CJNE R0,#3,KK3MOV R0,#00HMOV A,#35LJMP SONGCHU KK3: CJNE R0,#4,KK4MOV R0,#00HMOV A,#36LJMP SONGCHU KK4: CJNE R0,#5,KK5MOV R0,#00HMOV A,#37LJMP SONGCHU KK5: CJNE R0,#6,KK6MOV R0,#00HMOV A,#38LJMP SONGCHU KK6: CJNE R0,#7,KK7MOV R0,#00HMOV A,#39LJMP SONGCHU KK7: CJNE R0,#8,KK8MOV R0,#00HMOV A,#40LJMP SONGCHUKK8: RETKEEP6: CJNE R0,#1,KK9MOV R0,#00HMOV A,#41LJMP SONGCHU KK9: CJNE R0,#2,KK10MOV R0,#00HMOV A,#42LJMP SONGCHU KK10: CJNE R0,#3,KK11MOV R0,#00HMOV A,#43LJMP SONGCHU KK11: CJNE R0,#4,KK12MOV A,#44LJMP SONGCHU KK12: CJNE R0,#5,KK13MOV R0,#00HMOV A,#45LJMP SONGCHU KK13: CJNE R0,#6,KK14MOV R0,#00HMOV A,#46LJMP SONGCHU KK14: CJNE R0,#7,KK15MOV R0,#00HMOV A,#47LJMP SONGCHU KK15: CJNE R0,#8,KK16MOV R0,#00HMOV A,#48LJMP SONGCHUKK16: RETKEEP7: CJNE R0,#1,KK17MOV R0,#00HMOV A,#49LJMP SONGCHU KK17: CJNE R0,#2,KK18MOV R0,#00HMOV A,#50LJMP SONGCHU KK18: CJNE R0,#3,KK19MOV R0,#00HMOV A,#51LJMP SONGCHU KK19: CJNE R0,#4,KK20MOV R0,#00HMOV A,#52LJMP SONGCHU KK20: CJNE R0,#5,KK21MOV R0,#00HMOV A,#53LJMP SONGCHU KK21: CJNE R0,#6,KK22MOV R0,#00HMOV A,#54LJMP SONGCHUKK22: CJNE R0,#7,KK23MOV R0,#00HMOV A,#55LJMP SONGCHU KK23: CJNE R0,#8,KK24MOV R0,#00HMOV A,#56LJMP SONGCHUKK24: RETKEEP8: CJNE R0,#1,KK25MOV R0,#00HMOV A,#57LJMP SONGCHU KK25: CJNE R0,#2,KK26MOV R0,#00HMOV A,#58LJMP SONGCHU KK26: CJNE R0,#3,KK27MOV R0,#00HMOV A,#59LJMP SONGCHU KK27: CJNE R0,#4,KK28MOV R0,#00HMOV A,#60LJMP SONGCHU KK28: CJNE R0,#5,KK29MOV R0,#00HMOV A,#61LJMP SONGCHU KK29: CJNE R0,#6,KK30MOV R0,#00HMOV A,#62LJMP SONGCHU KK30: CJNE R0,#7,KK31MOV R0,#00HMOV A,#63LJMP SONGCHU KK31: CJNE R0,#8,KK32MOV R0,#00HMOV A,#64LJMP SONGCHUKK32: RETKEEP9: CJNE R0,#1,JJ1MOV R0,#00HMOV A,#65LJMP SONGCHU JJ1: CJNE R0,#2,JJ2MOV R0,#00HMOV A,#66LJMP SONGCHU JJ2: CJNE R0,#3,JJ3MOV R0,#00HMOV A,#67LJMP SONGCHU JJ3: CJNE R0,#4,JJ4MOV R0,#00HMOV A,#68LJMP SONGCHU JJ4: CJNE R0,#5,JJ5MOV R0,#00HMOV A,#69LJMP SONGCHU JJ5: CJNE R0,#6,JJ6MOV R0,#00HMOV A,#70LJMP SONGCHU JJ6: CJNE R0,#7,JJ7MOV R0,#00HMOV A,#71LJMP SONGCHU JJ7: CJNE R0,#8,JJ8MOV R0,#00HMOV A,#72LJMP SONGCHUJJ8: RETKEEP10: CJNE R0,#1,JJ9MOV R0,#00HMOV A,#73LJMP SONGCHU JJ9: CJNE R0,#2,JJ10MOV R0,#00HMOV A,#74LJMP SONGCHU JJ10: CJNE R0,#3,JJ11MOV R0,#00HMOV A,#75LJMP SONGCHU JJ11: CJNE R0,#4,JJ12MOV R0,#00HMOV A,#76LJMP SONGCHU JJ12: CJNE R0,#5,JJ13MOV R0,#00HMOV A,#77LJMP SONGCHU JJ13: CJNE R0,#6,JJ14MOV R0,#00HMOV A,#78LJMP SONGCHU JJ14: CJNE R0,#7,JJ15MOV R0,#00HMOV A,#79LJMP SONGCHU JJ15: CJNE R0,#8,JJ16MOV R0,#00HMOV A,#80LJMP SONGCHUJJ16: RETKEEP11: CJNE R0,#1,JJ17MOV R0,#00HMOV A,#81LJMP SONGCHU JJ17: CJNE R0,#2,JJ18MOV R0,#00HMOV A,#82LJMP SONGCHU JJ18: CJNE R0,#3,JJ19MOV R0,#00HMOV A,#83LJMP SONGCHU JJ19: CJNE R0,#4,JJ20MOV R0,#00HMOV A,#84LJMP SONGCHU JJ20: CJNE R0,#5,JJ21MOV R0,#00HMOV A,#85LJMP SONGCHU JJ21: CJNE R0,#6,JJ22MOV R0,#00HMOV A,#86LJMP SONGCHUJJ22: CJNE R0,#7,JJ23MOV R0,#00HMOV A,#87LJMP SONGCHU JJ23: CJNE R0,#8,JJ24MOV R0,#00HMOV A,#88LJMP SONGCHUJJ24: RETKEEP12: CJNE R0,#1,JJ25MOV R0,#00HMOV A,#89LJMP SONGCHU JJ25: CJNE R0,#2,JJ26MOV R0,#00HMOV A,#90LJMP SONGCHU JJ26: CJNE R0,#3,JJ27MOV R0,#00HMOV A,#91LJMP SONGCHU JJ27: CJNE R0,#4,JJ28MOV R0,#00HMOV A,#92LJMP SONGCHU JJ28: CJNE R0,#5,JJ29MOV R0,#00HMOV A,#93LJMP SONGCHU JJ29: CJNE R0,#6,JJ30MOV R0,#00HMOV A,#94LJMP SONGCHU JJ30: CJNE R0,#7,JJ31MOV R0,#00HMOV A,#95LJMP SONGCHU JJ31: CJNE R0,#8,JJ32MOV R0,#00HMOV A,#96LJMP SONGCHUJJ32: RETKEEP13: CJNE R0,#1,MM1MOV R0,#00HLJMP SONGCHU MM1: CJNE R0,#2,MM2MOV R0,#00HMOV A,#98LJMP SONGCHU MM2: CJNE R0,#3,MM3MOV R0,#00HMOV A,#99LJMP SONGCHU MM3: CJNE R0,#4,MM4MOV R0,#00HMOV A,#100LJMP SONGCHU MM4: CJNE R0,#5,MM5MOV R0,#00HMOV A,#101LJMP SONGCHU MM5: CJNE R0,#6,MM6MOV R0,#00HMOV A,#102LJMP SONGCHU MM6: CJNE R0,#7,MM7MOV R0,#00HMOV A,#103LJMP SONGCHU MM7: CJNE R0,#8,MM8MOV R0,#00HMOV A,#104LJMP SONGCHUMM8: RETKEEP14: CJNE R0,#1,MM9MOV R0,#00HMOV A,#105LJMP SONGCHU MM9: CJNE R0,#2,MM10MOV R0,#00HMOV A,#106LJMP SONGCHU MM10: CJNE R0,#3,MM11MOV R0,#00HMOV A,#107LJMP SONGCHU MM11: CJNE R0,#4,MM12MOV A,#108LJMP SONGCHU MM12: CJNE R0,#5,MM13MOV R0,#00HMOV A,#109LJMP SONGCHU MM13: CJNE R0,#6,MM14MOV R0,#00HMOV A,#110LJMP SONGCHU MM14: CJNE R0,#7,MM15MOV R0,#00HMOV A,#111LJMP SONGCHU MM15: CJNE R0,#8,MM16MOV R0,#00HMOV A,#112LJMP SONGCHUMM16: RETKEEP15: CJNE R0,#1,MM17MOV R0,#00HMOV A,#113LJMP SONGCHU MM17: CJNE R0,#2,MM18MOV R0,#00HMOV A,#114LJMP SONGCHU MM18: CJNE R0,#3,MM19MOV R0,#00HMOV A,#115LJMP SONGCHU MM19: CJNE R0,#4,MM20MOV R0,#00HMOV A,#116LJMP SONGCHU MM20: CJNE R0,#5,MM21MOV R0,#00HMOV A,#117LJMP SONGCHU MM21: CJNE R0,#6,MM22MOV R0,#00HMOV A,#118LJMP SONGCHUMM22: CJNE R0,#7,MM23MOV R0,#00HMOV A,#119LJMP SONGCHU MM23: CJNE R0,#8,MM24MOV R0,#00HMOV A,#120LJMP SONGCHUMM24: RETKEEP16: CJNE R0,#1,MM25MOV R0,#00HMOV A,#121LJMP SONGCHU MM25: CJNE R0,#2,MM26MOV R0,#00HMOV A,#122LJMP SONGCHU MM26: CJNE R0,#3,MM27MOV R0,#00HMOV A,#123LJMP SONGCHU MM27: CJNE R0,#4,MM28MOV R0,#00HMOV A,#124LJMP SONGCHU MM28: CJNE R0,#5,MM29MOV R0,#00HMOV A,#125LJMP SONGCHU MM29: CJNE R0,#6,MM30MOV R0,#00HMOV A,#126LJMP SONGCHU MM30: CJNE R0,#7,MM31MOV R0,#00HMOV A,#127LJMP SONGCHU MM31: CJNE R0,#8,MM32MOV R0,#00HMOV A,#128LJMP SONGCHUMM32: RET SONGCHU: MOV SBUF,AYY1: JBC TI,YYAJMP YY1 YY: RETEND。

STM32单片机红外遥控

STM32单片机红外遥控

STM32单片机红外遥控红外遥控接口电路STM32单片机红外遥控程序源代码#include "sys.h"#define LED_RED PBout(12) //红色发光二极管控制管脚初始化PB12 #define LED_GREEN PBout(13) //绿色发光二极管控制管脚初始化PB13 #define LED_YELLOW PBout(14) //黄色发光二极管控制管脚初始化PB14 #define LED_BLUE PBout(15) //蓝色发光二极管控制管脚初始化PB15 #define BEEP PBout(5) //蜂鸣器端口定义PB5#define RDATA PAin(1) //红外数据输入脚//红外遥控识别码(ID),每款遥控器的该值基本都不一样,但也有一样的//我们选用的遥控器识别码为0#define REMOTE_ID 0static u8 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数void delay_init(u8 SYSCLK);void delay_ms(u16 nms);void delay_us(u32 nus);void Led_Init(void); //发光二极管控制管脚初始化void Red_Led_Light(void); //点亮红色发光二极管void Green_Led_Light(void); //点亮绿色发光二极管void Yellow_Led_Light(void); //点亮黄色发光二极管void Blue_Led_Light(void); //点亮蓝色发光二极管void Red_Led_Goout(void); //熄灭红色发光二极管void Green_Led_Goout(void); //熄灭绿色发光二极管void Yellow_Led_Goout(void); //熄灭黄色发光二极管void Blue_Led_Goout(void); //熄灭蓝色发光二极管void Beep_Init(void);void Beep_Tweet(void);void Beep_Silent(void);extern u8 Remote_Cnt; //按键次数,此次按下键的次数extern u8 Remote_Rdy; //红外接收到数据extern u32 Remote_Odr; //命令暂存处u32 Remote_Odr=0; //命令暂存处u8 Remote_Cnt=0; //按键次数,此次按下键的次数u8 Remote_Rdy=0; //红外接收到数据void Remote_Init(void); //红外传感器接收头引脚初始化u8 Remote_Process(void); //红外接收到数据处理u8 Pulse_Width_Check(void); //检查脉宽extern u8 USART_RX_BUF[64]; //接收缓冲,最大63个字节.末字节为换行符extern u8 USART_RX_STA; //接收状态标记//如果想串口中断接收,请不要注释以下宏定义//#define EN_USART1_RX //使能串口1接收void uart_init(u32 pclk2,u32 bound);/*************************************************************开发板上电后,用红外遥控器对着开发板上的红外接收头。

c51单片机测转速源程序

c51单片机测转速源程序
out=1;
bjing=1;//报警
}
}
disp[3]=(zs%10000)/1000;//显示转速
disp[2]=(zs%1000)/100; disp来自1]=(zs%100)/10;
disp[0]=zs%10;
{uchar t;
//////
if(key_set==0){///0 非设置状态
time0++;
TL0=0xaf; //50ms
TH0=0x3c; /*计数初值重装*/
TR0=1;
/*启动T1*/
t=time0%20;
if(t==0){en_bj=0;}
if(time0>1200)//超时
TH0=0x3c; /*计数初值重装*/
TR0=1;
time0=0;
EA=1;
}
else
{
EA=0;
TR0=0;
begin1=0;
if(time0==0)
{
t1=1000000-t0;
t0=60*js*t0;
zs=60*js+t0/t1;
if(zs>6000){zs=0;}
if(zs<count)
{
if(en_bj==1)
{
if(bhtm>=bh)
{
out=1;
begin1=1;
js=0;
TR1=0;
TL1=0xaf; //50ms
TH1=0x3c; /*计数初值重装*/
TR1=1; /*启动T1*/
}
/*启动T0*/

单片机的温度采集系统 源代码

单片机的温度采集系统 源代码
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
void tmpwritebyte(uchar dat) //写一个字节到DS18B20里
{
uint i;uchar j;bit testb;
for(j=1;j<=8;j++)
temp=tt*10+0.5; //放大十倍,将小数点后第一位转换为可显示数字,再四舍五入
return temp;
}
uchar tmpread(void) //读一个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P3^3; //定义DS18B20接口
int temp; //全局温度变量
{
dsreset(); //初始化DS18B20
tmpwritebyte(0xcc); //跳过序列号命令
tmpwritebyte(0x44); //发送温度转换命令
}
int tmp() //获得温度
{
float tt;uchar a,b;
dsreset();
{
P2=0; //LED段选,共阴极 送1点亮某段

51单片机C语言程序设计源代码

51单片机C语言程序设计源代码

新概念51单片机C语言教程----入门、提高、开发、拓展全攻略郭天祥编著电子工业出版社例2.2.1编写程序,点亮第一个发光二极管(part2_1.c P27)#include <reg52.h> //52系列单片机头文件sbit led1=P1^0; //声明单片机P1口的第一位void main() //主函数{led1=0; /*点亮第一个发光二极管*/}例2.2.2编写程序,点亮P1口的若干二极管(part2_2.c P39)#include <reg52.h> //52系列单片机头文件void main() //主函数{P1=0xaa;//while(1);}例2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(part2_3.c P42)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位uint i,j;void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);led1=1; /*关闭第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);}}- 2 - 例2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。

(part2_4.c P48)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位void delay1s(); //声明子函数void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/delay1s(); //调用延时子函数led1=1; /*关闭第一个发光二极管*/delay1s(); //调用延时子函数}}void delay1s() //子函数体{uint i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);}例2.7.1编写程序使第一个二极管以亮200ms、灭800ms的方式闪动。

51单片机流水灯C语言源代码

51单片机流水灯C语言源代码

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};uchar code table2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; uchar code table3[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};uchar code table4[]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff}; uchar code table5[]={0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff};uchar code table6[]={0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1();void lsd2();void lsd3();void lsd4();void lsd5();void lsd6();void lsd7();void lsd8();void lsd9();void lsd10();void lsd11();void lsd12();main(){while(1){lsd1();lsd2();lsd3();lsd4();lsd5();lsd6();lsd7();lsd8();lsd9();lsd10();lsd11();lsd12();}}void delay(uchar x) //延时函数{uint i,j;for(i=x;i>0;i--)for(j=250;j>0;j--);}void lsd1() //lsd1 单个流水灯双程模式1 {uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);for(i=0;i<7;i++) //仅单个灯亮从上往下流{a=_crol_(a,1);P0=a;delay(z);}P0=0xff;a=0xfe;P2=a;delay(z);for(j=0;j<7;j++){a=_crol_(a,1);P2=a;delay(z);}P2=0xff;a=0xfe;P3=a;delay(z);for(k=0;k<7;k++){a=_crol_(a,1);P3=a;delay(z);}P3=0xff;a=0xfe;P1=a;delay(z);for(l=0;l<7;l++){a=_crol_(a,1);P1=a;delay(z);}a=0xbf;P1=a;delay(z);for(l1=0;l1<6;l1++) //l1==6 仅单个灯亮从下往上流{a=_cror_(a,1);P1=a;delay(z);}P1=0xff;a=0x7f;P3=a;delay(z);for(k1=0;k1<7;k1++) {a=_cror_(a,1);P3=a;delay(z);}P3=0xff;a=0x7f;P2=a;delay(z);for(j1=0;j1<7;j1++) {a=_cror_(a,1);P2=a;delay(z);}P2=0xff;a=0x7f;P0=a;delay(z);for(i1=0;i1<7;i1++){a=_cror_(a,1);P0=a;delay(z);}P0=0xff;}void lsd2() //lsd2 两个灯流水双程模式1 {uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);a=a<<1;P0=a;delay(z);for(i=0;i<6;i++){a=_crol_(a,1);P0=a;delay(z);}P0=0x7f;P2=0xfe;delay(z);P0=0xff;a=0xfc;P2=a;delay(z);for(j=0;j<6;j++) {a=_crol_(a,1);P2=a;delay(z);}P2=0x7f;P3=0xfe;delay(z);P2=0xff;a=0xfc;delay(z);for(k=0;k<6;k++) {a=_crol_(a,1);P3=a;delay(z);}P3=0x7f;P1=0xfe;delay(z);P3=0xff;a=0xfc;P1=a;delay(z);for(l=0;l<6;l++) {a=_crol_(a,1);P1=a;delay(z);}P1=0x7f;P1=0xff;delay(z);a=0x7f;P1=a;delay(z);a=a>>1;P1=a;delay(z);for(l1=0;l1<6;l1++) {a=_cror_(a,1);P1=a;delay(z);}P1=0xfe;P3=0x7f;delay(z);P1=0xff;a=0x3f;P3=a;delay(z);for(k1=0;k1<6;k1++) {a=_cror_(a,1);P3=a;delay(z);}P3=0xfe;P2=0x7f;delay(z);P3=0xff;a=0x3f;P2=a;delay(z);for(j1=0;j1<6;j1++) {a=_cror_(a,1);P2=a;delay(z);}P2=0xfe;P0=0x7f;delay(z);a=0x3f;P0=a;delay(z);for(i1=0;i1<6;i1++){a=_cror_(a,1);P0=a;delay(z);}P0=0xfe;delay(z);P0=0xff;delay(z);}void lsd3() //lsd3 两个灯流水双程模式2 {uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);a=a<<1;delay(z);for(i=0;i<6;i++) //_crol_与_cror_混合使用{a=_crol_(a,1);P0=a;delay(z);}P0=0x7f;a=0x7f;P2=a;delay(z);P0=f;a=a>>1;P2=a;delay(z);for(j=0;j<6;j++){a=_cror_(a,1);P2=a;delay(z);}a=0xfe;P3=a;delay(z);P2=f;a=a<<1;P3=a;delay(z);for(k=0;k<6;k++) {a=_crol_(a,1);P3=a;delay(z);}P3=0x7f;a=0x7f;P1=a;delay(z);P3=f;a=a>>1;P1=a;delay(z);for(l=0;l<6;l++){a=_cror_(a,1);P1=a;delay(z);}P1=0xfe;delay(z);P1=f;delay(z);a=0xfe;P1=a;delay(z);a=a<<1;P1=a;delay(z);for(l1=0;l1<6;l1++) //l1==6 {a=_crol_(a,1);P1=a;delay(z);}P1=0x7f;a=0x7f;P3=a;delay(z);P1=f;a=a>>1;P3=a;for(k1=0;k1<6;k1++) {a=_cror_(a,1);P3=a;delay(z);}P3=0xfe;a=0xfe;P2=a;delay(z);P3=f;a=a<<1;P2=a;delay(z);for(j1=0;j1<6;j1++){a=_crol_(a,1);P2=a;delay(z);}P2=0x7f;a=0x7f;P0=a;delay(z);P2=f;a=a>>1;P0=a;delay(z);for(i1=0;i1<6;i1++) {a=_cror_(a,1);P0=a;delay(z);}P0=0xfe;delay(z);P0=f;delay(z);}void lsd4() //lsd4{uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);for(i=0;i<7;i++){a=a<<1; //单个灯依次点亮所有灯,从上往下P0=a;delay(z);}a=0xfe;P2=a;delay(z);for(j=0;j<7;j++){a=a<<1;P2=a;delay(z);}a=0xfe;P3=a;delay(z);for(k=0;k<7;k++){a=a<<1;P3=a;delay(z);}a=0xfe;P1=a;delay(z);for(l=0;l<7;l++){a=a<<1;P1=a;delay(z);}for(l1=0;l1<8;l1++) //l1==8{P1=table1[l1]; //单个灯依次熄灭所有灯,从下往上delay(z);}for(k1=0;k1<8;k1++){P3=table1[k1];delay(z);}for(j1=0;j1<8;j1++){P2=table1[j1];delay(z);}for(i1=0;i1<8;i1++){P0=table1[i1];delay(z);}}void lsd5() //lsd5 {uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);for(i=0;i<7;i++){a=a<<1;P0=a;delay(z);}for(j=0;j<8;j++) //单个灯依次点亮所有灯,从下往上{P2=table2[j];delay(z);}a=0xfe;P3=a;delay(z);for(k=0;k<7;k++){a=a<<1;P3=a;delay(z);}for(l=0;l<8;l++){P1=table2[l];delay(z);}for(l1=0;l1<8;l1++) //单个灯依次熄灭所有灯,从上往下{P1=table3[l1];delay(z);}for(k1=0;k1<8;k1++){P3=table1[k1];delay(z);}for(j1=0;j1<8;j1++) //单个灯依次熄灭所有灯,从上往下{P2=table3[j1];delay(z);}for(i1=0;i1<8;i1++){P0=table1[i1];delay(z);}}void lsd6() //每组为单位同亮同灭从左向右再向左{P0=0x00;delay(z);P0=0xff;P2=0x00;delay(z);P2=0xff;P3=0x00;delay(z);P3=0xff;P1=0x00;delay(z);P3=0x00;P1=0xff;delay(z);P2=0x00;P3=0xff;delay(z);P0=0x00;P2=0xff;delay(z);P0=0xff;delay(z);}void lsd7() //lsd7 全亮全灭{uchar i;for(i=0;i<2;i++){P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(z);P0=0xff;P1=0xff;.P2=0xff;P3=0xff;delay(z);}}void lsd8() //每组仅两个灯,从中间往两边再往中间{uchar i;for(i=0;i<8;i++){P0=table4[i];P1=table4[i];P2=table4[i];P3=table4[i];delay(z);}}void lsd9() //每组两个灯引亮所有灯再引灭,从中间带两边再到中间{uchar i;for(i=0;i<8;i++){P0=table5[i];P1=table5[i];P2=table5[i];P3=table5[i];delay(z);}}void lsd10(){uchar a,i,j;a=0xfe;P0=a;P1=a;P2=a;P3=a;delay(z);for(i=0;i<7;i++) //仅单个灯亮从上往下流{a=_crol_(a,1);P0=a;P1=a;P2=a;P3=a;delay(z);}for(j=0;j<7;j++) //仅单个灯亮从上往下流{a=_cror_(a,1);P0=a;P1=a;P2=a;P3=a;delay(z);}P0=f;P1=f;P2=f;P3=f;delay(z);}void lsd11(){uchar a,i,j;a=0xfe;P0=a;P1=a;P2=a;P3=a;delay(z);for(i=0;i<7;i++) {a=a<<1;P0=a;P1=a;P2=a;P3=a;delay(z);}for(j=0;j<8;j++) {P0=table1[j];P1=table1[j];P2=table1[j];P3=table1[j];delay(z);}}void lsd12(){uchar a,i,j,k,l;a=0xfe;P0=a;P1=a;delay(z);for(i=0;i<7;i++){a=a<<1;P0=a;P1=a;delay(z);}a=0x7f;P2=a;P3=a;delay(z);for(j=0;j<7;j++){a=a>>1;P2=a;P3=a;delay(z);}for(k=0;k<8;k++){P2=table3[k];P3=table3[k];delay(z);}for(l=0;l<8;l++){P0=table1[l];P1=table1[l];delay(z);}while(1);}。

单片机程序源代码完整版.doc

单片机程序源代码完整版.doc
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=120;j>0;j--);
}
void main()
{
uint i;
while(1)
{
P1=0xff;
delay(500);
for(i=0;i<4;i++)
{
P1=table[i];
delay(500);
{uint j;
for(j=0;j<120;j++);
}
}
void main()
{
while(1)
{
P0=0xfe;
while(P0!=0x7f)
{
//P1=temp;
//delayms(500);
P0=_crol_(P0,1);
delayms(250);
}
temp=0x7f;
while(P0!=0xfe)
利用89c51单片机的端口控制8个LED(D0~D7)循环点亮,刚开始时D0点亮,延时片刻后,接着D1点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7,然后再点亮D7->D6->D5->D4 ->D3->D2->lt;reg52.h>
#include <intrins.h>
}
for(i=3;i>0;i--)
{
P1=table[i-1];
delay(500);
}
}
}
任务四:复杂广告灯的设计
利用89c51单片机的端口实现8个LED(D0~D7)复杂广告灯的控制,要求显示规律为:正向流水->反向流水->隔灯闪烁3次->高四盏、低四盏闪烁2次->隔两盏闪烁3次,再重复循环。

51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表

51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表

51单片机智能小车PWM调速前进程序源代码、电路原理图、电路器件表从控制电路角度划分,智能小车电路板分为核心板和驱动板。

核心板上的处理器的芯片型号是:STC15W4K56S4,这是一款51单片机。

驱动板上有电源电路、电机驱动电路以及一些功能模块接口。

智能小车前进只要控制智能小车四个轮子向前转动就可以了。

智能小车四个轮子由四个直流减速电机驱动。

直流减速电机驱动芯片采用L293D,一片电机驱动芯片L293D可以驱动两个直流减速电机,智能小车用到4个直流减速电机,需要用到两片L293D电机驱动芯片。

但有时候我们需要控制智能小车的速度,不希望智能小车全速前进。

比如在“智能小车循迹实验”中,如果智能小车速度过快,来不及反应做出方向的调整,智能小车会很容易跑离轨迹,这样就需要调整控制智能小车的速度了。

那么怎么样实现智能小车前进速度的调节呢?调节智能小车的速度,实际上是调节电机的运转速度,PWM调速是目前电机的主流调速方式。

智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。

在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。

不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。

这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。

这样,改变L293D使能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。

智能小车PWM调速前进程序如下:首先,定义了2个变量,这2个变量用于设置智能小车的速度。

unsigned char pwmval_left_init=6; //调节此值可以调节小车的速度。

unsigned char pwmval_right_init=6; //调节此值可以调节小车的速度。

通过以下函数初始化定时器0,每1毫秒中断一次。

void Timer0_Init(void) //定时器0初始化{TMOD=0x01;TH0=0xf8;TL0=0xcd;TR0=1;ET0=1;EA=1;}下面我们看定时器0的中断处理函数。

51单片机EEPROM读写已调试源程序代码

51单片机EEPROM读写已调试源程序代码

#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define AddWr 0xa0 //器件地址选择及写标志#define AddRd 0xa1 //器件地址选择及读标志/*有关全局变量*/sbit Sda= P3^7; //串行数据sbit Scl= P3^6; //串行时钟sbit WP= P3^5; //硬件写保护void mDelay(uchar j){uint i;for(;j>0;j--){for(i=0;i<125;i--){;}}}/*起始条件*/void Start(void){Sda=1;Scl=1;_nop_();_nop_();_nop_();_nop_();Sda=0;_nop_();_nop_();_nop_();_nop_();}/*停止条件*/void Stop(void){Sda=0;Scl=1;_nop_();_nop_();_nop_();_nop_();Sda=1;_nop_();_nop_();_nop_();_nop_();}/*应答位*/void Ack(void){Sda=0;_nop_();_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();Scl=0;}/*反向应答位*/void NoAck(void){Sda=1;_nop_();_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();Scl=0;}/*发送数据子程序,Data为要求发送的数据*/void Send(uchar Data){uchar BitCounter=8; //位数控制uchar temp; //中间变量控制do{temp=Data;Scl=0;_nop_();_nop_();_nop_();_nop_();if((temp&0x80)==0x80)//如果最高位是1 Sda=1;elseSda=0;Scl=1;temp=Data<<1; //RLCData=temp;BitCounter--;}while(BitCounter);Scl=0;}/*读一个字节的数据,并返回该字节值*/uchar Read(void){uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;do{Scl=0;_nop_();_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();if(Sda) //如果Sda=1temp=temp|0x01; //temp的最低位置1 elsetemp=temp&0xfe; //否则temp的最低位清0 if(BitCounter-1){temp1=temp<<1;temp=temp1;}BitCounter--;}while(BitCounter);return(temp);}void WrToROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start(); //发送启动信号Send(0xa0); //发送SLA+WAck();Send(Address+i); //发送地址Ack();Send(*(PData+i));Ack();Stop();mDelay(20);}}void RdFromROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0xa0);Ack();Send(Address+i);Ack();Start();Send(0xa1);Ack();*(PData+i)=Read();Scl=0;NoAck();Stop();}}void main(){uchar Number[4]={1,2,3,4};WP= 1;WrToROM(Number,4,4); //将初始化后的数值写入EEPROM mDelay(20);Number[0]=0;Number[1]=0;Number[2]=0;Number[3]=0; //将数组中的值清掉,以验证读出的数是否正确RdFromROM(Number,4,4);}。

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码/***************DHT11温湿度监测+液晶LCD1602显示程序源代码******************单片机型号:STC15W4K56S4,内部晶振:22.1184M。

功能:DHT11温湿度监测+液晶LCD1602显示。

操作说明:通过温湿度传感器DHT11监测温湿度数值,并将温湿度数值显示在液晶LCD1602上。

**************************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙sbit LCD_D0 = P0^0; //LCD_D0对应P0.0sbit LCD_D1 = P0^1; //LCD_D1对应P0.1sbit LCD_D2 = P0^2; //LCD_D2对应P0.2sbit LCD_D3 = P0^3; //LCD_D3对应P0.3sbit LCD_D4 = P0^4; //LCD_D4对应P0.4sbit LCD_D5 = P0^5; //LCD_D5对应P0.5sbit LCD_D6 = P0^6; //LCD_D6对应P0.6sbit LCD_D7 = P0^7; //LCD_D7对应P0.7sbit LCD_RS = P1^0; //LCD_RS对应P1.0sbit LCD_RW = P1^1; //LCD_RW对应P1.1sbit LCD_EN = P3^4; //LCD_EN对应P3.4sbit DHT11_PIN = P4^0; //DHT11管脚对应P4.0void delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //5Ms延时函数void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(void); //LCD初始化void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);//LCD显示一个字符void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); //LCD显示一个字符串void DHT11_Init(void); //初始化DHT11void DHT11_Delay(unsigned int j); //延时函数,用于DHT11 void DHT11_Delay_10us(void); //延时函数,用于DHT11 void COM(void);void RH(unsigned char *temp,unsigned char *humi);void DHT11_Display(void);unsigned char code welcome[] = {"DHT 11"}; //LCD显示内容DHT 11 unsigned char code Dht11[] = {"T: H: "}; //LCD显示内容T: H: unsigned char code Space[] = {" "};//LCD显示内容空白unsigned char U8FLAG,k;unsigned char U8count,U8temp;unsigned char U8T_data_H_temp,U8T_data_L_temp;unsigned char U8RH_data_H_temp,U8RH_data_L_temp;unsigned char U8checkdata_temp;unsigned char U8comdata;unsigned char temperature;unsigned char humidity;unsigned char disbuff_T[4]={0,0,0,0};unsigned char disbuff_H[4]={0,0,0,0};void delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i = 3;while(i--) delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--){delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P0M1 = P3M1&0x00;P0M0 = P3M0&0x00;P1M1 = P3M1&0xfc;P1M0 = P3M0&0xfc;P3M1 = P4M1&0xef;P3M0 = P4M0&0xef;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 1; //LCD管脚E设置成高电平while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 0; //LCD管脚RW设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时P0 = WCLCD; //将数据送入P0口,即写入指令或地址 _nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 1; //LCD管脚RS设置成高电平LCD_RW = 0; //LCD管脚RW设置成低电平P0 = WDLCD; //将数据送入P0口_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void LCDInit(void) //LCD初始化{WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(DData); //发送数据}void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}void DHT11_Init(void) //初始化DHT11 {P4M1 = P4M1&0xfe;P4M0 = P4M0&0xfe;}void DHT11_Delay(unsigned int j){unsigned char i;for(;j>0;j--){for(i=0;i<250;i++);}}void DHT11_Delay_10us(void){unsigned char i;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;}void COM(void){unsigned char i;for(i=0;i<8;i++){U8FLAG=2;while((!DHT11_PIN)&&U8FLAG++);DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();U8temp=0;if(DHT11_PIN)U8temp=1;U8FLAG=2;while((DHT11_PIN)&&U8FLAG++); //超时则跳出for循环if(U8FLAG==1)break;//判断数据位是0还是1,如果高电平高过预定0高电平值则数据位为 1U8comdata<<=1;U8comdata|=U8temp;}}void RH(unsigned char *temp,unsigned char *humi){DHT11_PIN = 0;DHT11_Delay(180);DHT11_PIN = 1; //总线由上拉电阻拉高主机延时20us DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us(); //主机设为输入判断从机响应信号DHT11_PIN = 1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!DHT11_PIN){U8FLAG=2;//判断从机是否发出 80us 的低电平响应信号是否结束while((!DHT11_PIN)&&U8FLAG++);U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while((DHT11_PIN)&&U8FLAG++); //数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DHT11_PIN=1; //数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp){*temp = U8T_data_H_temp;*humi = U8RH_data_H_temp;}}}void DHT11_Display(void){RH(&temperature,&humidity);disbuff_T[2]=temperature/100+0x30;disbuff_T[1]=temperature/10%10+0x30;disbuff_T[0]=temperature%10+0x30;disbuff_H[2]=humidity/100+0x30;disbuff_H[1]=humidity/10%10+0x30;disbuff_H[0]=humidity%10+0x30;DisplayOneChar(2,1,disbuff_T[2]);delay_ms(10); //延时DisplayOneChar(3,1,disbuff_T[1]);delay_ms(10); //延时DisplayOneChar(4,1,disbuff_T[0]);delay_ms(10); //延时DisplayOneChar(8,1,disbuff_H[2]);delay_ms(10); //延时DisplayOneChar(9,1,disbuff_H[1]);delay_ms(10); //延时DisplayOneChar(10,1,disbuff_H[0]);delay_ms(10); //延时}void main(void){GPIO_1602_Configuration(); //LCD1602液晶IO口初始化delay_ms(10); //延时LCDInit(); //LCD1602初始化delay_ms(10); //延时DHT11_Init(); //初始化DHT11DisplayListChar(5,0,welcome); //LCD1602显示Hello My Friends delay_ms(10); //延时while(1){DisplayListChar(0,1,Space); //LCD1602显示P: K1delay_ms(10); //延时DisplayListChar(0,1,Dht11); //LCD1602显示delay_ms(10); //延时DHT11_Display();delay_ms(200); //延时}}程序源代码是编译通过的DHT11温湿度监测模块接口电路图该程序的实际运行效果。

PIC16F917单片机c语言源程序ad变换,pwm输出,数码显示

PIC16F917单片机c语言源程序ad变换,pwm输出,数码显示

PIC16F917单片机c语言源程序ad变换,pwm输出,数码显示//说明:完整的PIC16F917编写的c语言程序,通过编译,内容包含有ad变换,pwm输出,数码显示(通过串口移位显示),串行口通讯等#include;#define uchar unsigned char#define uint unsigned int__CONFIG(0x20e4);#define choose1 RC4#define choose2 RC3#define power_high RA6#define power_low RA4#define relay_w RE2#define relay_v RB5#define relay_u RA0#define data1 RD0#define clk1 RA7#define bell RD3#define power_supply RD6#define pha RB2#define phb RB3#define phc RB4#define spa RB0#define spb RB1#define up RC1#define down RC2#define up1 RD2#define down1 RC0#define safe RD7#define start RD5 #define speeder RD4 #define KDF RD1#define test_num1 1 #define test_num2 2 #define test_num3 3 #define test_num4 4 #define test_num5 5 #define test_num6 6 #define test_num7 7 #define test_num8 8 #define test_num9 9 #define test_num10 10#define test_num11 11 #define test_num12 12 #define test_num13 13 #define test_num14 14 #define test_num15 15 #define test_num16 16 #define test_num17 17 #define test_num18 18 #define test_num19 19 #define test_num20 20 #define test_num21 21 #define test_num22 22 #define test_num23 23 #define test_num24 24 #define test_num25 25 #define test_num26 26 #define test_num27 27 #define test_num28 28 #define hold 29#define stop 30#define setout 31#define test_err 32#define power 33#define TEST_5045 34#define TEST_5046 35#define TEST_5055B 36#define power1 37#define setout1 38#define setout2 39#define disp_refresh 100const uchartable[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0, 0xfe,0xf6,0xee,0xfe,0x9c,0xfc,0x9e,0x8e,2,0x10,0x 80,4};const uchartable1[]={0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1 ,0xff,0xf7,0xef,0xff,0x9d,0xfd,0x9f,0x8f,0x6f,0x0 d};ucharkeyvalue=1,keystate=0,keypull=0,status=setout,rcd ata1=0x55,rcdata2=0x55,rcdata3=0x55,status2=0; ucharerr_status=0,disp_run=0,ad_test=0,test15_tmp1=0,t est15_tmp2=0,test15_tmp3=0,test15_tmp4=0,disp_mod=0,disp_hold=0;uint rcdata,disp_time1=0,ad_data1,ad_data2; volatile unsigned intkeytime=0,bell_time=0,test_time=0,err_time=0,disp _time=0,tx_time=0;void disp(uchar num1,uchar num2,uchar num3); // 76usvoid disp10(uchar j); // 314usvoid keyscan(void);void key1(void);void init(void);void delaye(uint x);void outpwm(uchar x);void addisp(uint a);void addisp_8(uchar a);void disp20(uchar i,uchar j);void disp16(uint j);void err_disp(uchar j);void disp21(uchar i,uchar j);uint ad(uchar x);//3次加和一个除法 87usvoid main(){uchar tx_conut=0;init();while(1){if(status==setout1){if(disp_time>;disp_refresh){disp(table[18],table[18],table[18]);disp_time=0;}power_supply=0;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;spa=1;spb=1;pha=1;phb=1;phc=0;up=0;down=0;safe=0; up1=0;down1=0;}else if(status==setout2){if(disp_time>;disp_refresh){disp(table[19],table[19],table[19]);disp_time=0;}power_supply=0;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;spa=1;spb=1;pha=1;phb=1;phc=0;up=0;down=0;safe=0; up1=0;down1=0;}else if(status==setout){if(disp_time>;disp_refresh){disp(table[16],table[16],table[16]);disp_time=0;}power_supply=0;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;spa=1;spb=1;pha=1;phb=1;phc=0;up=0;down=0;safe=0; up1=0;down1=0;// TRISC7=0;// RC7=1;// speeder=1;if(keypull==1){bell=0;bell_time=0;keypull=0;status=power1;test_time=0;}}else if(status==power1){if(status2==TEST_5055B){TRISC7=1;TXSTA=0x26;RCSTA=0x90;SPBRG=103; //4.8k波特率power_supply=1;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;spa=1;spb=1;pha=1;phb=1;phc=0;up=0;down=0;safe=0; up1=0;down1=0;speeder=1;if(tx_time>;50&&TRMT==1){if(tx_conut==0){TXREG=0xfe;tx_time=0;tx_conut=1;}else if(tx_conut==1){TXREG=0xfd;tx_time=0;tx_conut=2;}else if(tx_conut==2){TXREG=0xfc;tx_time=0;tx_conut=3;}else if(tx_conut==3){TXREG=0xfb;tx_time=0;tx_conut=4;}else if(tx_conut==4){TXREG=0xfa;tx_time=0;tx_conut=0;}}if(rcdata1==0xaa)status=power;if(test_time>;1500)status=setout2; }elseif(status2==TEST_5046||status2==TEST_5045)status= power;}else if(status==power){power_supply=1;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;spa=1;spb=1;pha=1;phb=1;phc=0;up=0;down=0;safe=0; up1=0;down1=0;if(disp_time>;disp_refresh){disp(table[17],table[17],table[17]);disp_time=0;}if(status2==TEST_5046||status2==TEST_5045){TRISC7=0;RC7=1;speeder=1;}if(keypull==1){bell=0;bell_time=0;keypull=0;status=test_num1;TRISC7=1;TXSTA=0x26;RCSTA=0x90;SPBRG=103; //4.8k波特率test_time=0;disp_run=1;disp_time1=0;ad_test=1;ADCON0=0x85; //通道1ADCON1=0x50;}}else if(status==test_num1){spa=1;spb=1;pha=1;phb=1;phc=1;up=1;down=1;safe=1;up1=0;down1=0;power_supply=1;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;speeder=1;if(test_time>;100&&test_time;1000){status=test_err;err_status=1;err_time=0;disp_hold=1;}}else if(status==test_num2){spa=0;spb=0;pha=0;phb=0;phc=0;up=0;down=0;safe=0; up1=0;down1=0;power_supply=1;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;speeder=1;if(test_time>;100&&test_time;1000){status=test_err;err_status=2;err_time=0;disp_hold=1;}}else if(status==test_num3){if(status2==TEST_5046){spa=1;spb=1;pha=1;phb=0;phc=0;up=1;down=1;safe=1; up1=1;down1=1;power_supply=1;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;speeder=1;if(test_time>;100&&test_time;1000){status=test_err;err_status=3;err_time=0;disp_hold=1;}}else if(status2==TEST_5055B||status2==TEST_5045) {outpwm(200);test_time=0;status=test_num5;}}else if(status==test_num4){spa=0;spb=0;pha=0;phb=0;phc=0;up=0;down=0;safe=0; up1=0;down1=0;power_supply=1;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;speeder=1;if(test_time>;100&&test_time;1000){status=test_err;err_status=4;err_time=0;disp_hold=1;}}else if(status==test_num5){speeder=0;power_supply=1;power_high=0;power_low=0 ;relay_u=0;relay_v=0;relay_w=0;spa=1;spb=0;pha=0;phb=0;phc=0;up=0;down=0;safe=0; up1=0;down1=0;if(test_time>;100&&test_time;172&&rcdata1;172&&rc data2;172&&rcdata3;1000){status=test_err;err_status=5;err_time=0;disp_hold=1;}}else if(status==test_num6){speeder=0;power_supply=1;power_high=0;power_low=0 ;relay_u=0;relay_v=0;relay_w=0;spa=1;spb=0;pha=0;phb=0;phc=0;up=0;down=0;safe=0; up1=0;down1=0;if(test_time>;100&&test_time;101&&rcdata1;101&&rc data2;101&&rcdata3;1000){status=test_err;err_status=6;err_time=0;disp_hold=1;}}else if(status==test_num7){speeder=0;power_supply=1;power_high=0;power_low=0 ;relay_u=0;relay_v=0;relay_w=0;spa=1;spb=0;pha=0;phb=0;phc=0;up=0;down=0;safe=0; up1=0;down1=0;if(test_time>;100&&test_time;70&&rcdata1;70&&rcda ta2;70&&rcdata3;1000){status=test_err;err_status=7;err_time=0;disp_hold=1;}}else if(status==test_num8){speeder=0;power_supply=1;power_high=0;power_low=0 ;relay_u=0;relay_v=0;relay_w=0;spa=1;spb=0;pha=0;phb=0;phc=0;up=0;down=0;safe=0; up1=0;down1=0;if(test_time>;100&&test_time;14&&rcdata1;14&&rcda ta2;14&&rcdata3;1000){status=test_err;err_status=8;err_time=0;disp_hold=1;}}else if(status==test_num9) //2.4---2.53{if(test_time;=200&&test_time;=500&&test_time;=500 &&test_time;500&&ad_data1;500&&ad_data2;=1100) {status=test_err;err_status=9;err_time=0;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num10){if(test_time;=200&&test_time;=500&&test_time;=500 &&test_time;500&&ad_data1;500&&ad_data2;=1100) {status=test_err;err_status=10;err_time=0;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num11){if(test_time;=200&&test_time;=500&&test_time;=500 &&test_time;500&&ad_data1;500&&ad_data2;=1100){status=test_err;err_status=11;err_time=0;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num12) //+u,-V{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;}ad_data1=0;}elseif(test_time>;=1100&&test_time;1100&&test_time;14 00&&ad_data1>;473&&ad_data1;2200){status=test_err;err_status=12;err_time=0;// SPEN=0;// CREN=0;// TRISC7=0;// RC7=1;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num13) //+U,-v{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;}ad_data1=0;}elseif(test_time>;=1100&&test_time;1100&&test_time;14 00&&ad_data1>;534&&ad_data1;2200){status=test_err;err_status=13;err_time=0;// SPEN=0;// CREN=0;// TRISC7=0;// RC7=1;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num14) //+v,-U{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;}}else if(test_time>;=1100&&test_time;1100){spa=1;spb=1;pha=0;phb=1;power_supply=1;power_high=1;power_low=0;relay_u=1 ;relay_v=0;relay_w=0;speeder=0;phc=0;up=0;down=0;safe=0;up1=0;down1=0;if(test_time>;1400&&ad_data1>;473&&ad_data1;2200) {status=test_err;err_status=14;err_time=0;// SPEN=0;// CREN=0;// TRISC7=0;// RC7=1;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num15) //+V,-u{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;} }elseif(test_time>;=1100&&test_time;1100&&test_time;14 00&&ad_data1>;534&&ad_data1;2200){status=test_err;err_status=15;err_time=0;// SPEN=0;// CREN=0;/// TRISC7=0;// RC7=1;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num16) //-W,+v{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;} }elseif(test_time>;=1100&&test_time;1100&&test_time;14 00&&ad_data1>;473&&ad_data1;2200){status=test_err;err_status=16;err_time=0;// SPEN=0;// CREN=0;// TRISC7=0;// RC7=1;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num17) //+W-v{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;}ad_data1=0;}else if(test_time>;=1100&&test_time;1100){spa=1;spb=1;pha=0;phb=0;power_supply=1;power_high=0;power_low=1;relay_u=0 ;relay_v=0;relay_w=1;speeder=0;phc=0;up=0;down=0;safe=0;up1=0;down1=0;if(test_time>;1400&&ad_data1>;534&&ad_data1;2200) {status=test_err;err_status=17;err_time=0;// SPEN=0;// CREN=0;// TRISC7=0;// RC7=1;ADON=0;ad_test=0;disp_mod=1;}}}else if(status==test_num18) //+v,-U{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;}ad_data1=0;}else if(test_time>;=1100&&test_time;1100){spa=1;spb=1;pha=0;phb=1;power_supply=1;power_high=1;power_low=0;relay_u=1 ;relay_v=0;relay_w=0;speeder=0;phc=0;up=0;down=0;safe=0;up1=0;down1=0;if(test_time>;1400&&rcdata1>;115&&rcdata1;2200) {status=test_err;err_status=18;err_time=0;SPEN=0;CREN=0;// TRISC7=0;// RC7=1;// ADON=0;// ad_test=0;}}}else if(status==test_num19) //+U,-v{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;}ad_data1=0;}elseif(test_time>;=1100&&test_time;1100&&test_time;14 00&&rcdata1>;130&&rcdata1;2200){status=test_err;err_status=19;err_time=0;SPEN=0;CREN=0;// TRISC7=0;// RC7=1;// ADON=0;}}}else if(status==test_num20) //-W,+v{if(test_time;=1000&&test_time;1000){spa=0;spb=1;pha=1;phb=0;}else if(test_time;1005){spa=0;spb=1;pha=1;phb=1;} else if(test_time;1015){spa=0;spb=1;pha=1;phb=0;} ad_data1=0;}elseif(test_time>;=1100&&test_time;1100&&test_time;1400&&rcdata1>;115&&rcdata1;2200){status=test_err;err_status=20;err_time=0;SPEN=0;CREN=0;// RC7=1;// ADON=0;// ad_test=0;}}}else if(status==test_num21) //+W-v{if(test_time;=1000&&test_time;1000){spa=0;spb=1;p ha=1;phb=0;}elseif(test_time;1005){spa=0;spb=1;pha=1;phb=1;}elseif(test_time;1015){spa=0;spb=1;pha=1;phb=0;}ad_data1=0;}else if(test_time>;=1100&&test_time;1100){spa=1;spb=1;pha=0;phb=0;power_supply=1;power_high=0;power_low=1;relay_u=0 ;relay_v=0;relay_w=1;speeder=0;phc=0;up=0;down=0;safe=0;up1=0;down1=0;if(test_time>;1400&&rcdata1>;130&&rcdata1;2200) {status=test_err;err_status=21;err_time=0;SPEN=0;CREN=0;// TRISC7=0;// RC7=1;// ADON=0;// ad_test=0;}}}else if(status==test_num22){if(status2==TEST_5055B){if(test_time;900&&test_time;700&&ad_data1>;490&&a d_data1;1500){status=test_err;err_status=22;err_time=0;ADON=0;ad_test=0;disp_mod=1;}}elseif(status2==TEST_5046||status2==TEST_5045)status= test_num26;}else if(status==test_num23){if(test_time;900&&test_time;700&&ad_data1>;490&&a d_data1;1500){status=test_err;err_status=23;err_time=0;ADON=0;ad_test=0;disp_mod=1;}}else if(status==test_num24){if(test_time;900&&test_time;700&&ad_data1>;490&&a d_data1;1500){status=test_err;err_status=24;err_time=0;ADON=0;ad_test=0;disp_mod=1;}}else if(status==test_num25){if(test_time;900&&test_time;700&&ad_data1>;490&&a d_data1;1500){status=test_err;err_status=25;err_time=0;ADON=0;ad_test=0;disp_mod=1;}}else if(status==test_num26){speeder=0;power_supply=1;power_high=0;power_low=0 ;relay_u=0;relay_v=0;relay_w=0;speeder=0;KDF=0; spa=1;spb=0;pha=1;phb=0;if(test_time>;100&&test_time;240&&rcdata;1000) {status=test_err;err_status=26;err_time=0;disp_hold=1;}}else if(status==test_num27){speeder=0;power_supply=1;power_high=0;power_low=0 ;relay_u=0;relay_v=0;relay_w=0;speeder=0;KDF=0; spa=1;spb=0;pha=0;phb=1;if(test_time>;200&&test_time;220&&rcdata;400) {status=test_err;err_status=27;err_time=0;SPEN=0;CREN=0;// TRISC7=0;// RC7=1;// ADON=0;}}else if(status==test_num28){if(status2==TEST_5046){disp_run=0;power_supply=1;power_high=0;power_low= 0;relay_u=0;relay_v=0;relay_w=0;speeder=0;KDF=0; spa=0;spb=0;pha=0;phb=1;test15_tmp3=rcdata1;test15_tmp4=rcdata2;if(test_time>;100){if((test15_tmp3&0x20)==0)test15_tmp1=test15_tmp3; else test15_tmp2=test15_tmp3;if((test15_tmp4&0x20)==0)test15_tmp1=test15_tmp4; else test15_tmp2=test15_tmp4;disp20(test15_tmp1,test15_tmp2);}}else if(status2==TEST_5045){disp_run=0;power_supply=1;power_high=0;power_low= 0;relay_u=0;relay_v=0;relay_w=0;speeder=0;KDF=0; spa=0;spb=0;pha=0;phb=1;test15_tmp3=rcdata1;test15_tmp4=rcdata2;if(test_time>;100){if((test15_tmp3&0x20)==0)test15_tmp1=test15_tmp3; else test15_tmp2=test15_tmp3;if((test15_tmp4&0x20)==0)test15_tmp1=test15_tmp4; else test15_tmp2=test15_tmp4;disp21(test15_tmp1,test15_tmp2);test_time=0;}}else if(status2==TEST_5055B)status=setout1;}else if(status==test_err){disp_run=0;//power_supply=0;power_high=0;power_low=0;relay_u=0 ;relay_v=0;relay_w=0;speeder=0;KDF=0;speeder=0; if(disp_hold==1){if(err_status==26){power_supply=1;power_high=0;power_low=0;relay_u= 0;relay_v=0;relay_w=0;speeder=0;KDF=0;speeder=0;} else{power_supply=1;power_high=0;power_low=0;relay_u= 0;relay_v=0;relay_w=0;speeder=0;KDF=0;speeder=1;} }if(disp_hold==0){power_supply=0;power_high=0;power_low=0;relay_u= 0;relay_v=0;relay_w=0;speeder=0;KDF=0;speeder=0;} if(err_time;disp_refresh){err_disp(err_status);disp_time=0;}}else if(err_time;1000){if(disp_time>;disp_refresh){if(disp_mod==1){addisp(ad_data1);disp_time=0;}else{disp10(rcdata1);disp_time=0;}}}else if(err_time>;2000)err_time=0; }}}void init(){/*PORTA *//*RA0 relay_w 0 *//*RA1 vol 1 *//*RA2 +5V 1 *//*RA3 TYJ 1 *//*RA4 power_low 0 *//*RA5 SX 1 *//*RA6 power_high 0 *//*RA7 CLK1 0 */TRISA=0x2e; //0010 1110ANSEL=0x7e; //模拟输入PORTA=0;/*PORTB *//*RB0 SPA *//*RB1 SPB *//*RB2 PHA *//*RB3 PHB *//*RB4 PHC *//*RB5 ralay_v *//*RB6 CLK *//*RB7 DATA */TRISB=0xc0; //1100 0000,rb0--rb5输出,rb6、rb7输入PORTB=0;/*PORTC *//*RC0 DOWN1 *//*RC1 UP *//*RC2 DOWN *//*RC3 choose2 *//*RC4 choose1 *//*RC5 PWM *//*RC6 TXD *//*RC7 RXD */TRISC=0x58; //0101 1000PORTC=0x80; //1000 0000/*PORTD*//*RD0 DATA1 *//*RD1 KFD *//*RD2 up1 *//*RD3 bell *//*RD4 speeder *//*RD5 start *//*RD6 power_supply *//*RD7 safe */TRISD=0x20; //0010 0000PORTD=0x18; //0001 1000/*PORTE*//*RE0 DF *//*RE1 JX *//*RE2 relay_u *//*RE3 VPP */TRISE=0xb; //0000 1011,全输入RE2=0;OSCCON=0xfe; //时钟选择8mhz,内部振荡器VLCDEN=0;OPTION=0xc3;LCDEN=0;CMCON0=7;CCP2CON=0;ADCON1=0x50;TMR0=7;PEIE=1;T0IE=1;GIE=1;if(choose1==0&&choose2==1)status2=TEST_5045; if(choose1==1&&choose2==1)status2=TEST_5046; if(choose1==1&&choose2==0)status2=TEST_5055B; }void keyscan(){if(!start&&keyvalue){keyvalue=0;keytime=0;}if(start&&!keyvalue){keyvalue=1;keytime=0;}}void key1(){if(keystate==0){if(keyvalue==0&&keytime>;10) {keystate=1;keypull=1;keytime=0;}}else if(keystate==1){if(keyvalue==1&&keytime>;10) {keystate=0;keytime=0;}}else keystate=0;}void interrupt tm0(){uint int_i;if(bell_time>;50)bell=1; if(T0IF){keyscan();key1();keytime++;bell_time++;err_time++;test_time++;disp_time++;disp_time1++;tx_time++;if(ad_test==1){if(GODONE==0){// ad_data3=ad_data2; ad_data2=ad_data1;int_i=ADRESH;ad_data1=ADRESL|int_i;110)disp_time=0; if(disp_time1==100){disp10(status);disp_time1=0;}}T0IF=0;TMR0=7;}}void disp(uchar num1,uchar num2,uchar num3) {uchar i;uchar num_tmp1,num_tmp2;// cs1=0; //关闭显示// clr=0; //清除74ls164数据// clr=1;clk1=0; //上升沿移位num_tmp1=num1;for(i=8;i>;0;i--){num_tmp2=num_tmp1;num_tmp2=num_tmp2&0x01; if(num_tmp2==1)data1=1;elsedata1=0;clk1=1;clk1=0;num_tmp1=num_tmp1>;>;1; }num_tmp1=num2;for(i=8;i>;0;i--){num_tmp2=num_tmp1;num_tmp2=num_tmp2&0x01; if(num_tmp2==1)data1=1;elsedata1=0;clk1=1;clk1=0;。

基于51单片机的液晶LCD1602显示程序源代码(带LCD1602液晶接口电路))

基于51单片机的液晶LCD1602显示程序源代码(带LCD1602液晶接口电路))

液晶LCD1602显示字符和数字程序源代码/***********************液晶LCD1602测试程序源代码*************************单片机型号:STC15W4K56S4,内部晶振:22.1184M。

功能:液晶LCD1602显示功能测试。

操作说明:液晶LCD1602显示字符和倒计时。

**************************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙sbit LCD_D0 = P0^0; //LCD_D0对应P0.0sbit LCD_D1 = P0^1; //LCD_D1对应P0.1sbit LCD_D2 = P0^2; //LCD_D2对应P0.2sbit LCD_D3 = P0^3; //LCD_D3对应P0.3sbit LCD_D4 = P0^4; //LCD_D4对应P0.4sbit LCD_D5 = P0^5; //LCD_D5对应P0.5sbit LCD_D6 = P0^6; //LCD_D6对应P0.6sbit LCD_D7 = P0^7; //LCD_D7对应P0.7sbit LCD_RS = P1^0; //LCD_RS对应P1.0sbit LCD_RW = P1^1; //LCD_RW对应P1.1sbit LCD_EN = P3^4; //LCD_EN对应P3.4void delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //5Ms延时函数void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(void); //LCD初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);//LCD显示一个字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//LCD显示一个字符串unsigned char code welcome[] = {"Hello My Friends"};//液晶LCD1602显示Hello My Friendsunsigned char code countdown[] = {"CountDown: S"};//液晶LCD1602显示CountDown: Svoid delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i=3;while(i--)delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--){delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P0M1 = P3M1&0x00;P0M0 = P3M0&0x00;P1M1 = P3M1&0xfc;P1M0 = P3M0&0xfc;P3M1 = P4M1&0xef;P3M0 = P4M0&0xef;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 1; //LCD管脚E设置成高电平while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 0; //LCD管脚RW设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时P0 = WCLCD; //将数据送入P0口,即写入指令或地址_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 1; //LCD管脚RS设置成高电平LCD_RW = 0; //LCD管脚RW设置成低电平P0 = WDLCD;//将数据送入P0口,即将数据写入液晶模块_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void LCDInit(void) //LCD初始化{WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(DData); //发送数据}void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData){unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}void main(void){GPIO_1602_Configuration(); //LCD1602液晶IO口初始化delay_ms(10); //延时LCDInit(); //LCD1602初始化delay_ms(10); //延时DisplayListChar(0,0,welcome); //LCD1602显示Hello My Friends delay_ms(10); //延时DisplayListChar(0,1,countdown); //LCD1602显示CountDown: S delay_ms(10); //延时DisplayOneChar(14,1,0x39); //LCD1602显示9delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x38); //LCD1602显示8delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x37); //LCD1602显示7delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x36); //LCD1602显示6delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x35); //LCD1602显示5delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x34); //LCD1602显示4delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x33); //LCD1602显示3delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x32); //LCD1602显示2delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x31); //LCD1602显示1delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x30); //LCD1602显示0delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时while(1){;}}程序源代码是编译通过并在电路板上测试过参考液晶LCD1602接口电路图该程序的实际运行效果。

单片机编程全集(含源代码)

单片机编程全集(含源代码)

前言 (2)基础知识:单片机编程基础 (2)第一节:单数码管按键显示 (4)第二节:双数码管可调秒表 (6)第三节:十字路口交通灯 (7)第四节:数码管驱动 (9)第五节:键盘驱动 (10)第六节:低频频率计 (15)第七节:电子表 (18)第八节:串行口应用 (19)前言本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@,或郑郁正@中国;以便相互学习。

结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。

针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。

如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。

对于这些提出问题的读者,本人在此深表谢意。

想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。

如果有什么问题,我们可以相互探讨和研究,共同学习。

本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。

基础知识:单片机编程基础单片机的外部结构:1、DIP40双列直插;2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)3、电源VCC(PIN40)和地线GND(PIN20);4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3;2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)3、一个串行通信接口;(SCON,SBUF)4、一个中断控制器;(IE,IP)针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章任务一:闪烁广告灯的设计利用89c51单片机的端口控制两个LED(D0和D1),编写程序,实现两个LED互闪。

#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit LED1=P0^0;sbit LED2=P0^1;void delayms(uint ms){uint i;while(ms--){for(i=0;i<120;i++);}}void main(){while(1){LED1=0;LED2=1;delayms(500);LED1=1;LED2=0;delayms(500);}}任务二:流水广告灯的设计利用89c51单片机的端口控制8个LED(D0~D7)循环点亮,刚开始时D0点亮,延时片刻后,接着D1点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7 ,然后再点亮D7->D6->D5->D4 ->D3->D2->D1->D0,重复循环。

#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charuint i;uchar temp;uint a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void delayms(uint ms){while(ms--){ uint j;for(j=0;j<120;j++);}}void main(){while(1){P0=0xfe;while(P0!=0x7f){//P1=temp;//delayms(500);P0=_crol_(P0,1);delayms(250);}temp=0x7f;while(P0!=0xfe){P0=temp;delayms(500);temp=_cror_(temp,1);}}}任务三:拉幕式与闭幕式广告灯的设计利用89c51单片机的P0端口实现8个LED D0~D7的拉幕式与闭幕式广告灯设计。

拉幕式:开始D0~D7全灭,延时片刻后首先D3和D4亮,其次是D2和D5亮,再是D1和D6亮,最后是D0和D7亮。

闭幕式:开始D0~D7全亮,延时片刻后首先D0和D7灭,其次是D1和D6灭,再是D2和D5灭,最后是D3和D4灭。

#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0xe7,0xc3,0x81,0x00};void delay(uint x){uint i,j;for(i=x;i>0;i--)for(j=120;j>0;j--);}void main(){uint i;while(1){P1=0xff;delay(500);for(i=0;i<4;i++){P1=table[i];delay(500);}for(i=3;i>0;i--){P1=table[i-1];delay(500);}}}任务四:复杂广告灯的设计利用89c51单片机的端口实现8个LED(D0~D7)复杂广告灯的控制,要求显示规律为:正向流水->反向流水->隔灯闪烁3次->高四盏、低四盏闪烁2次->隔两盏闪烁3次,再重复循环。

#include<reg52.h>#define uint unsigned int#include<intrins.h>void delayms(uint ms){uint i;while(ms--){for(i=0;i<110;i++);}}void main(){uint i,j,xx[2]={0xaa,0xff},yy[2]={0xf0,0x0f},zz[2]={0xb6,0xff};unsigned char aa;while(1){aa=0xfe;for(i=0;i<7;i++){P0=aa;aa=_crol_(aa,1);delayms(500);}for(i=0;i<8;i++){P0=aa;aa=_cror_(aa,1);delayms(500);}for(i=0;i<3;i++)for(j=0;j<2;j++){P0=xx[j];delayms(500);}for(i=0;i<2;i++)for(j=0;j<2;j++){P0=yy[j] ;delayms(500);}for(i=0;i<3;i++)for(j=0;j<2;j++){P0=zz[j] ;delayms(500);}}}任务五:单个LED数码管显示设计使用89c51的P0口作为输出口,外接LED数码管,编写程序,使数码管循环显示从0~9的加1计数。

#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar table[10]={ 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};uint key=0;void int_int(){EA=1;IT0=1;EX0=1;}void count_num() interrupt 0{if(key==9)key=0;else key++;}void main(){int_int();while(1){P0=table[key];}}任务六:多个LED数码管显示设计使用单片机P0和P2口作为输出口,外接一个8位LED数码管,编写程序,使数码管显示“872AF635”。

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned chardelay(ms){while(ms--){ int i;for(i=0;i<110;i++);}}main(){uchara[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar b[8]={0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05},j;uint i;while(1){ j=0x01;for(i=0;i<8;i++){P2=j;P0=a[b[i]];j=_crol_(j,1);delay(3);}}}任务七:查询式按键设计将8个按键从1~8进行编号,如果其中一个键被按下,则在LED数码管上显示相应的键值。

#include<reg52.h>#define uint unsigned int#define uchar unsigned charmain(){uchara[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};P0=0xff;while(P0!=0xff){ switch(P0){case 0xfe:P2=a[1]; break;case 0xfd:P2=a[2]; break;case 0xfb:P2=a[3]; break;case 0xf7:P2=a[4]; break;case 0xef:P2=a[5]; break;case 0xdf:P2=a[6]; break;case 0xbf:P2=a[7]; break;case 0x7f:P2=a[8];}}}任务八:LED数码管显示矩阵键盘按键的设计设计一个4*4的矩阵键盘,以P1.0~P1.3作为行线,以P1.4~P1.7作为列线。

要求:未按下按键时,LED数码管显示“-”,按下按键时,在数码管上显示相应的键值。

#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchartable[17]={0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e} ;uint num=0;void delay(uint x){uchar i,j;for(i=x;i>0;i--)for(j=120;j>0;j--);}keyscan(){ uint temp;temp=P2;temp&=0x0f;if(temp==0x0e){P2=0xf0;temp=P2;temp&=0xf0;switch(temp){case 0xe0:num=1;break;case 0xd0:num=2;break;case 0xb0:num=3;break;case 0x70:num=4;}}if(temp==0x0d){P2=0xf0;temp=P2;temp&=0xf0;switch(temp){case 0xe0:num=5;break;case 0xd0:num=6;break;case 0xb0:num=7;break;case 0x70:num=8;}}if(temp==0x0b){P2=0xf0;temp=P2;temp&=0xf0;switch(temp){case 0xe0:num=9;break;case 0xd0:num=10;break;case 0xb0:num=11;break;case 0x70:num=12;}}if(temp==0x07){P2=0xf0;temp=P2;temp&=0xf0;switch(temp){case 0xe0:num=13;break;case 0xd0:num=14;break;case 0xb0:num=15;break;case 0x70:num=16;}}return num;}void display(uint num){ if(num==0)P0=0xbf;P0=table[num] ;}main(){uint temp;while(1){P2=0x0f;temp=P2;if(temp!=0x0f)keyscan();display(num);}}(2)#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P2^0;sbit LED2=P2^1;uchar num;uchar code LED_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管字形码编码void delay(uint x){uchar i,j;for(i=x;i>0;i--)for(j=120;j>0;j--);}//延时函数void display(uchar num){P0=LED_code[num];}//数码管显示函数void keyscan()//键盘扫描函数{uchar temp;P1=0xfe;//key1-key4第一行按下temp=P1;temp&=0xf0;if(temp!=0xf0){delay(10);//消除抖动temp=P1;temp&=0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;}}while(temp!=0xf0)//等待按键释放{temp=P1;temp&=0xf0;}}P1=0xfd;//key5-key8第二行按下temp=P1;temp&=0xf0;if(temp!=0xf0){delay(10);//消除抖动temp=P1;temp&=0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;}}while(temp!=0xf0)//等待按键释放{temp=P1;temp&=0xf0;}}P1=0xfb;//key9-key12第三行按下temp=P1;temp&=0xf0;if(temp!=0xf0){delay(10);//消除抖动temp=P1;temp&=0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;}}while(temp!=0xf0)//等待按键释放{temp=P1;temp&=0xf0;}}P1=0xf7;//key13-key16第四行按下temp=P1;temp&=0xf0;if(temp!=0xf0){delay(10);//消除抖动temp=P1;temp&=0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;}}while(temp!=0xf0)//等待按键释放{temp=P1;temp&=0xf0;}}}void main(){while(1){keyscan();if(num==0)P0=0xbf;elsedisplay(num-1);}}任务九:简单拨号键盘的设计使用4*4的矩阵式键盘及8位共阳极LED数码管设计一个简单拨号键盘,要求在初始状态时,8位数码管均显示“-”,每按下一个号码后,原8位LED数码管显示的内容向左移动1位。

相关文档
最新文档