Lily-lemon 发表于 2020-1-3 11:20 在哔哩哔哩有一堆的安装资料以及教程,而且是免费的,可以去看看 |
您好!有汇编语言的吗 |
zkb=50; |
丶1u0 发表于 2020-3-13 18:23 RU1是滑动变阻器。元件名是:POT-HG |
这个怎么调占空比 |
本帖最后由 suqianfu 于 2020-4-11 22:29 编辑 大佬,我添加了一点注释,不知道理解得对不对 #include<reg51.h> //调用头文件 #define uchar unsigned char // #define uint unsigned int float fosc=12000000; //声明单片机运行频率表12Mhz sbit KEY1=P1^0; //声明按键1占用脚 sbit KEY2=P1^1; //声明按键2占用脚 sbit KEY3=P1^2; //声明按键3占用脚 sbit KEY4=P1^3; //声明按键4占用脚 sbit OUTPUT=P2^0; //声明输出占用脚 uchar zkb; //声明占空比变量 uint freq; //声明频率变量 uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;//声明时间变量 void delay(uchar n) //延时函数 { uchar i; //局部整型变量 while(n--) //循环(执行次数) {for(i=255;i>0;i--) //赋值I为255,I大于0,I--自减1.直至循环执行次数清零(无中生友系列) {} }} void chushihua(void) //名为(初始化)之子函数 { P1=0x0f; //赋值P1口数据 freq=500; //赋值频率=500 zkb=50; //赋值占空比为50% TIMER0_L=0xe0; //定时变量,定时器0初始时间高8位赋值,具体定时时间自己查资料 TIMER0_H=0xb1; //定时变量,定时器0初始时间低8位赋值,具体定时时间自己查资料 TIMER1_L=0xf0; //定时变量,定时器1初始时间高8位赋值,具体定时时间自己查资料 TIMER1_H=0xd8; //定时变量,定时器1初始时间低8位赋值,具体定时时间自己查资料 TL0=0xe0; //定时器0初始时间高8位赋值,具体定时时间自己查资料 TH0=0xb1; //定时器0初始时间低8位赋值,具体定时时间自己查资料 TL1=0xf0; //定时器0初始时间高8位赋值,具体定时时间自己查资料 TH1=0xd8; //定时器0初始时间高8位赋值,具体定时时间自己查资料 TMOD=0x11; //设定定时器工作模式 IT0=1; //设定外部中断模式 EX0=1; //启动外部中断 ET0=1; //启动定时器0中断 ET1=1; //启动定时器1中断 EA=1; //启动全局中断使能 TR0=1; //启动定时器0 TR1=1; //启动定时器1 } void main(void) //主程序 { chushihua(); //调用初始化子程序 while(1) //循环 { } } void Timer0_freq() interrupt 1 //中断子程序--频率 { TR1=1; //启动定时器1 TL0=TIMER0_L; //定时器0高8位重新赋值定时函数,具体定时时间自己查资料 TH0=TIMER0_H; //定时器0低8位重新赋值定时函数,具体定时时间自己查资料 OUTPUT=1; //输出高电平 } void Timer1_zkb() interrupt 3 //中断子程序--占空比 { TR1=0; //关闭定时器1 TL1=TIMER1_L; //定时器1高8位重新赋值定时函数,具体定时时间自己查资料 TH1=TIMER1_H; //定时器1低8位重新赋值定时函数,具体定时时间自己查资料 OUTPUT=0; //输出低电平 } void keyscan() interrupt 0 using 1 //中断子程序--按键检测 { float TF0,TZ1; //声明浮点变量....这句话不是看得太懂...理解错了勿怪 EX0=0; //关闭外部中断 delay(10); //延时10 if(P1!=0x0f) //演示后如果检测到P1口不等于0X0F这个值,判断按键按下 { if(KEY1==0) freq+=500; //如果是按键1按下,则频率变量增加500 if(KEY2==0) freq+=50; //如果是按键2按下,则频率变量增加50 if(freq>10000) freq=500; //如果频率变量超过10000,则频率变量重新置为500 if(KEY3==0) zkb+=10; //如果是按键3按下,则占空比变量增加10 if(KEY4==0) zkb++; //如果是按键4按下,则占空比变量增加1 if(zkb>100) zkb=1; //如果占空比超过100,则占空比变量重新置为1 TF0=(65536-fosc/(12.0*freq)); //定时器溢出标记TF0赋值为65536减去时钟频率12分频 ??不是太理解 TZ1=(65536-(fosc*zkb)/(12.0*100*freq)); //TZ1这个啥玩意?跟上一行大概意思吧 TIMER0_H=(uint)TF0/256; TIMER0_L=(uint)TF0%256; TIMER1_H=(uint)TZ1/256; TIMER1_L=(uint)TZ1%256; } P1=0x0f; //重新赋值P1口初始化 EX0=1; //启动外部中断 TR0=1; //重新启动定时器0TR0 TR1=1; //重新启动定时器1TR1 } |
丶1u0 发表于 2020-3-13 18:23 看图RV1应该似乎可调电阻。随便找个什么高阻值电阻就可以了。反正是测试波形用的 |
RV1是什么东西阿 |
RV1是什么东西阿 在Proteus中怎么查找呢 |
RV1是什么呀 在Proteus中怎么找呢 |
诶可以哦,不错哦,真是个好思路,可以参考参考 |
请问一般Proutues要从哪里下载呀? |
为什么我的仿真改不了占空比呢 |
您好,楼主,在您的keyscan()中定义了TF0,这个是stc的中断溢出标志位,您的程序跑起来没有问题么? |