导航:首页 > 操作系统 > 求单片机例程

求单片机例程

发布时间:2022-08-31 06:51:37

① 求一个简单的单片机时钟程序

#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsignedcharsec=0,min=0,hour=0,scanled;
unsignedcharkey,time;
unsignedchardisdat[6];
sbitK=P1^0;
voiddischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
voidt0isr()interrupt1 //秒计时
{
TR0=0;
TH0=0x3c;
TL0=0xb0;
TR0=1;
time++;
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
dischg();
}
voidt1isr()interrupt3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x02;
P0=~ledtab[disdat[4]]&0x7f;
break;
case2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x08;
P0=~ledtab[disdat[2]]&0x7f;
break;
case4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=0;
min=0;
hour=0;
scanled=0;
time=0;
key=0;
dischg();
while(1)
{
if(K==0)
{
while(K==0);
key++;
key%=2;
}
switch(key)
{
case0:
TR0=1;
break;
case1:
TR0=0;
break;
}
}
}

② 求51单片机控制无刷直流电机的例程,新人求助

#include <reg52.h> // 引用标准库的头文件
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
//=================电机驱动=====================
sbit dianji_r = P1^0; //右边电机控制口,低电平转?
sbit dianji_l = P1^3; //左边电机控制口,低电平转
//=============循迹感应接口======================
sbit xjmk_r = P3^2;// 右边hall模块检测口 INT0
sbit xjmk_l = P3^3;// 左边hall模块检测口 INT1

void check_righet();//右边时候检测到stop测试程序
void check_left();//左边时候检测到stop测试程序

void delay_50us(uint t);
void delayms(uint Ms);

uchar r_count;//右边传感器检测到的次数计数单元
uchar l_count;
uint time;
//***********************主程序******************************
main()
{
time=50; dianji_r=0;//上电时右侧电机运行
dianji_l=0;//上电时左侧电机运行 EA=1;
EX1=1;
EX0=1;
IT1=0;
IT0=0;

xjmk_r=1;//置IO为1,准备读取数据
xjmk_l=1;
_nop_();
r_count=0;
l_count=0;
while(1)
{
_nop_();
// check_righet();//调用右边hall检测传感器
// check_left();//
if(r_count>=1)
{

delayms(time);
dianji_r=0;
dianji_l=0;
r_count=0;
_nop_();
}
if(l_count>=1)
{

delayms(time);
dianji_r=0;
dianji_l=0;
l_count=0;
_nop_();
}

}

}
void init0int() interrupt 2
{
l_count=5;
dianji_l=1;
dianji_r=0;
if(r_count>0)
{ EX0=0;
delayms(20);
if(time>=20)time-=19;
EX0=0;
}
return;

}

void init1int() interrupt 0
{
r_count=5;
dianji_r=1; dianji_l=0;
if(l_count>0)
{ EX1=0;
delayms(20);
if(time>=20)time-=19;
EX1=1;}
return; } //*******************************************************************************
//函数名称:
//功能:左边边时候检测到stop测试程序
void check_left()
{
if(xjmk_l==0)//检测右边的传感器是否感应到stop
{ delay_50us(1);//延时,去除机械振动
_nop_(); if(xjmk_l==0)//再次检测
{ delay_50us(1);//延时,去除机械振动
if(xjmk_l==0) {
l_count++;
xjmk_l=1; }
}
}
} //******************************************************************************* //函数名称:
//功能:右边时候检测到stop测试程序
void check_righet()
{
if(xjmk_r==0)//检测右边的传感器是否感应到stop {
delay_50us(1);//延时,去除机械振动
if(xjmk_r==0)//再次检测
{
delay_50us(1);//延时,去除机械振动 if(xjmk_r==0)
{
r_count++;
xjmk_r=1;
}
}
}
//*******************************************************************************
//函数名称:void delay_50US(unsigned int t)
//功能:延时50*t(us)
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
{
for(j=19;j>0;j--);
}
}
/*====================================================================
设定延时时间:x*1ms ====================================================================*/
void delayms(uint Ms)
{
uint i,TempCyc;
for(i=0;i<Ms;i++)
{
TempCyc =70;
while(TempCyc--);
}
}

③ 求52单片机程序代码

程序代码如下:
#include<reg51.h>
sbitK1=P1^0;
sbitK2=P1^1;
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<120;i++);
}
main()
{
unsignedcharkeyval=0,led=0xfe;
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
keyval==1;
while(K1==0);
}
}
if(K2==0)
{
delay(10);
if(K2==0)
{
keyval==2;
while(K2==0);
}
}
if(keyval==1)P0=0xfe;
if(keyval==2)
{
P0=led;
led=_crol_(led,1);
delay(200);
}
}
}

④ 求单片机程序

#include <reg51.h>
unsigned char count;
sbit key=P3^0;
void main(void)

{
while(1)
{
if(key==0)
{
while(key==0);

count++;
if(count==5)
{
count=0;
}
}
if(count==1) P1=0xfe;
if(count==2) P1=0xfd;
if(count==3) P1=0xfb;
if(count==4) P1=0xf7;
}
}
}

⑤ 求51单片机程序

这是51单片机频率计程序,弄明白了写你的程序就 很简单了
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
//定义以I/O口的功能
sbit beiguang=P3^2;//液晶屏背光
sbit rs=P1^3;//液晶屏写选择,0命令 1数据
sbit rw=P1^4;//液晶屏读写选择
sbit lcden=P1^5;//液晶屏使能
#define db P2 //定义P2为数据输出口,写数据时用db代替P2,增加液晶屏程序的通用性

//更改硬件接线时,只更改此处,而不必去更改液晶屏读写子程序
uchar aa,bb,cc;
uint dd,ee;
void Delay1ms(unsigned int i) //1ms延时程序
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化设置
{
TMOD=0x15;//定时器0作为计数器,定时器1作为定时器用
TH0=0;//计数器清0
TL0=0;
EA=1;//开总中断
ET1=1;//允许定时器1中断
TH1=0x4c;
TL1=0x5c;
TR0=1;//启动计数器
TR1=1;//启动定时器
aa=0;
}
void write_com(uchar com)//向液晶屏写命令
{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏写数据
{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
beiguang=0;
rw=0;
write_com(0x38);//显示模式16字*2行,5*7点阵,数据口8位
Delay1ms(10*12);
write_com(0x0f);//开显示,显示光标,光标闪烁
Delay1ms(10*12);
write_com(0x06);//写完数据后数据指针和光标位置自动加1
Delay1ms(10*12);
write_com(0x01);//屏幕清除
Delay1ms(10*12);
}
void display4(unsigned int number) //单行多位显示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分离出十万,万,千,百,十,个
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;

write_com(0x80);//第1个数据的位置设定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//写数据
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);

write_com(0x87);//第6个数据'H'的位置,中间空85和86 二格
write_date('H');
Delay1ms(10);
write_date('z');
Delay1ms(10);
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;//0.5S的计数值
ee=2*dd;//换算为1秒钟的计数值
if(aa==1)
{
if(TH0>12)//预判断,50ms内TH0>12,1s内计数值将超过可计数的最大值65535
fm=1;//报警
}
display4(ee);//显示
fm=0;//报警停止
}
}
void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=0x4c;//11.0592Mhz
//TL1=0;//11.0592Mhz
TL1=0x5c;//实际电路振荡频率11.03705Mhz,对TL1修正
if(aa==10)//中断10次,共0.5S
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动计数器
}
}

⑥ 求一单片机程序(用光敏电阻,PWM输出控制LED亮度)

ORG 0000H
L0000: LJMP MIN00 ; 主程序
; / *** *** *** *** / 初始化 PWM
PCA00: MOV CMOD, #82H ; (fSYS/2)
MOV CCON, #00H
MOV CL, #00H
MOV CH, #00H
MOV CCAPM0, #00H ; PWM0 输出
MOV PCA_PWM0, #00H
SETB CR ; 开 PWM
RET
; / *** *** *** *** / 主程序
P1M0 EQU 91H
P1M1 EQU 92H
P3M0 EQU 0B1H
P3M1 EQU 0B2H
ADC_CONTR EQU 0C5H ; A/D 转换寄存器
ADC_DATA EQU 0C6H ; A/D 结果寄存器
MIN00: MOV P1M0, #08H ; 设置 P1.3 为高阻状态
MOV P1M1, #08H
MOV ADC_CONTR, #0E3H ; 开A/D 转换电源 P1.3
LCALL PCA00 ; 初始化 PWM
MIN10: NOP ; 主程序 入口
LCALL ADC00 ; 测光敏电阻电压
MOV CCAP0H, A ; 写入PWM 控制 发光亮度
LJMP MIN10
RET
; / *** *** *** *** / A/D 转换通道 测电压
ADC00: MOV ADC_DATA, #00H
ORL ADC_CONTR, #08H ; 启动 AD 转换
MOV A, #10H ; 判断 AD 转换是否完成
ANL A, ADC_CONTR
JZ ADC32 ; AD 转换尚未完成, 继续等待
ANL ADC_CONTR, #0E7H ; 清0 ADC_FLAG, ADC_START 位, 停止A/D 转换
MOV A, ADC_DATA ; A = AD 转换结果
RET
END

⑦ 求51单片机的c语言程序

#include<stc89.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00};
uchar led[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x00,0xFF};
sbit adrd=P3^7;
sbit adwr=P3^6;
sbit la=P2^6;
sbit wela=P2^7;

uchar date1=0;
uchar date2=50;
uchar date3=100;
uchar date4=150;
uchar date5=200;
uchar date6=255;

uchar a,sz;

void init();
void delay(uint z);
uchar adchushihua();
void shumaguan(uint shu);
void processing();
void main()
{
init();

while(1)
{

sz=adchushihua();
for(a=10;a>0;a--)
{
shumaguan(sz);
processing();
}
}
}

void init()
{

P0=0x7f;

}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

uchar adchushihua()
{
uchar shu;
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;

P1=0xff;

adrd=1;
_nop_();
adrd=0;
_nop_();
shu=P1;
adrd=1;

return shu;
}
void shumaguan(uint shu)
{
uchar ,shi,ge;
=shu/100;
shi=shu%100/10;
ge=shu%10;

la=1;
P0=table[];
la=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(5);

la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(5);

la=1;
P0=table[ge];
la=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delay(5);

}

void processing()
{
if((sz>=date1)&&(sz<=date2))
{
P1=0xfe;
}
else if((sz>=date2)&&(sz<=date3))
{
P1=0xfd;
}
else if((sz>=date3)&&(sz<=date4))
{
P1=0xfb;
}
else if((sz>=date4)&&(sz<=date5))
{
P1=0xf7;
}
else if((sz>=date5)&&(sz<date6))
{
P1=0xef;
}
else if(sz==date6)
{
P1=~P1;
delay(20);

}

}

这个是我刚刚写的 根据你的需要 反正闲来无事 我写的比较笼统 需要你自己根据 自己的实际情况来判断确定 我只是利用AD简单的处理 成数码管显示的数字 你要是 转换成电压 那就把里面的变量 修改一下 我写的那个控制LED灯亮就不要动了 只是修改一下他前面定义的数字就可以 最后那个是我自己加上去的有点趣味性 希望对你有帮助

⑧ 求pic单片机A/D例程

/*****************************/

#include <pic.h>
__CONFIG(0x2F45H); //芯片配置字.

volatile unsigned int timer0=0; //定义一个时间计数变量.
volatile unsigned char count=0; //计数器.
volatile bit con=0; //动态显示位码选择控制位.(0:第1位,1:第2位)

void Init(void); //端口初始化函数.
void tmr0int(void); //定时器0初始化.

void main(void)
{
Init(); //端口初始化.
tmr0int(); //定时器0初佁化.

TMR0=0xD9; //定时器0初赋值.(经1:256后,10ms中断一次)
GIE=1; //总中断允许.

CLRWDT(); //定时喂狗.(WDT的溢出时间为18ms,在这个时间内必须定时清0).
while(1); //等待.
}

void Init(void) //端口初始化函数.
{
TRISC=0x00; //将端口C全部定义为输出口.
PORTC=0x00; //将端口C置0.
}

void tmr0int(void) //定时器0初始化.
{
T0CS=0; //TMR0工作在定时方式.
PSA=0; //将分频器分配给TMR0(为1则分配给看门狗).
PS2=1;PS1=1;PS0=1; //设置分频比1:256.4M晶振,10ms中断一次.
T0IF=0; //清除TMR0的中断标志.
T0IE=1; //TMR0中断允许.
}

void interrupt tmr0_int(void) //4M晶振,10ms中断一次.
{
CLRWDT(); //定时喂狗.(WDT的溢出时间为18ms,在这个时间内必须定时清0).
if(T0IF==1) //检查是否是TMR0中断.
{
T0IF=0; //清除TMR0中断溢出标志.
TMR0=0xD9; //重新装入定时器0初值.
if((timer0++)==99) //当1S钟到达.(990ms,减去了误差部份)
{
if((count++)==99) //控制计数范围.
{count=0;} //计数器清0.
timer0=0; //时间计数器清0.
}

//驱动4511显示部份.
if(!con)
{ //选择第1位.
PORTC=(count%10)|0xe0; //显示第1位数字.
con=1; //取反,准备显示第2位.
}
else
{ //选择第2位.
PORTC=(count/10)|0xd0; //显示第2位数字.
con=0; //取反,准备显示第1位.
}
}
}

⑨ c51单片机程序实例

#include<reg51.h>
#defineucharunsignedchar
uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0到9
ucharnum,cnt,disn;
ucharkeyval,disk;
ucharled[]={1,2,3,4};
voiddealdat(uchara)
{
led[0]=0;
led[1]=0;
led[2]=0;
led[3]=0;
led[a]=disk;
}
voiddelay(unsignedinta)
{
unsignedinti,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(num)
{
case0:P2=0x01;break;
case1:P2=0x02;break;
case2:P2=0x04;break;
case3:P2=0x08;break;
default:break;
}
P0=~tab[led[num]];
num++;
num&=0x03;
cnt++;
if(cnt>100)
{
cnt=0;
disn++;
disn%=4;
dealdat(disn);
}
}

ucharkbscan(void)
{
unsignedcharsccode,recode;
P3=0x0f;//发0扫描,列线输入
if((P3&0x0f)!=0x0f)//有键按下
{
// delay(20);//延时去抖动
if((P3&0x0f)!=0x0f)
{
sccode=0xef;//逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//无键按下,返回0
}

voidgetkey(void)
{
unsignedcharkey;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case0x11:keyval=7;break;
case0x12:keyval=4;break;
case0x14:keyval=1;break;
case0x18:keyval=10;break;
case0x21:keyval=8;break;
case0x22:keyval=5;break;
case0x24:keyval=2;break;
case0x28:keyval=0;break;
case0x41:keyval=9;break;
case0x42:keyval=6;break;
case0x44:keyval=3;break;
case0x48:keyval=11;break;
case0x81:keyval=12;break;
case0x82:keyval=13;break;
case0x84:keyval=14;break;
case0x88:keyval=15;break;
default:keyval=0xff;break;
}
}

main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
if(keyval!=0xff)disk=keyval;
delay(10);
}

}

⑩ 求飞思卡尔单片机mc9s12xs128 超频CW5.0例程

void MCUInit()
{
DisableInterrupts; //禁止总中断
CLKSEL &= 0x7f; //CLKSEL的第7位置0,选择系统时钟源为OSCCLK

PLLCTL &= 0xbf; //禁止PLL , PLLCTL.6(pllon)设为0;先关闭PLL
SYNR = 0x01; //根据需要的时钟频率设置SYNR和REFDV寄存器
REFDV = 0x00;
//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)

PLLCTL |= (1<<6); //打开PLL , PLLCTL.6(pllon)设为1;开PLL
while (( CRGFLG&0x08) == 0x00);//通过判断LOCK位,
//确定PLL是否稳定
CLKSEL |= (1<<7); //时钟频率稳定后,允许锁相环时钟源作为系统时钟源;

//本句 执行后:BusClock=PLLCLK/2 BusClock = 32MHz
}
自己写的,调试过没问题,具体主线你想用多少根据注释自己改

阅读全文

与求单片机例程相关的资料

热点内容
文件名修改为文件夹的名字批处理 浏览:251
拍照程序员 浏览:827
wps怎么把pdf转jpg 浏览:217
自拍用什么app做的艺术照 浏览:169
h3c无线配置命令 浏览:515
linux代码阅读工具 浏览:160
能够画出对称图形的是什么app 浏览:424
单片机投票器 浏览:467
程序员那么可爱唱吗 浏览:830
手机误删的app怎么恢复 浏览:700
java第三方加密库 浏览:660
编译代码软件哪个好 浏览:997
编译器软件图片 浏览:880
美团专送app怎么不接受远单 浏览:833
服务器mgmt口如何连接电脑 浏览:798
做程序员至少要精通几种 浏览:673
个人用云服务器价格对比 浏览:257
如何远程删除服务器文件夹 浏览:779
a9账号如何移植到安卓 浏览:340
gpib接口编程 浏览:468