代码解释void Delay10ms(unsigned int c) { unsigned char a,b; for(;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); }
时间: 2023-05-30 09:02:32 浏览: 66
这段代码是一个延时函数,用来产生一定时间的延时。函数的输入参数为一个无符号整型数 c,表示需要延时的毫秒数。
函数的实现过程是一个三重循环嵌套。循环的次数由参数 c 决定。在每次循环中,内层的两个循环分别使变量 b 和 a 递减,从而产生一定的延时。由于循环次数较多,所以可以产生精度较高的延时效果。
具体来说,内层的两个循环分别使用变量 b 和 a 控制循环次数。循环次数的计算是通过不断递减变量 b 和 a 实现的。具体的值是经过实验调试得到的,可以产生一定的延时效果。
相关问题
解释下列C51代码#include "reg52.h" unsigned char Disp[]="Pechin Science "; #define LCD1602_DATAPINS P0 sbit LCD1602_E=P2^7; sbit LCD1602_RW=P2^5; sbit LCD1602_RS=P2^6; void Lcd1602_Delay1ms(unsigned int c) { unsigned char a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } void LcdWriteCom(unsigned char com) { LCD1602_E = 0; LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DATAPINS = com; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } void LcdWriteData(unsigned char dat) { LCD1602_E = 0; LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } void LcdInit() { LcdWriteCom(0x38); LcdWriteCom(0x0c); LcdWriteCom(0x06); LcdWriteCom(0x01); LcdWriteCom(0x80); } void main(void) { unsigned char i; LcdInit(); for(i=0;i<16;i++) { LcdWriteData(Disp[i]); } while(1); }
这是一段基于C51单片机的LCD1602显示屏驱动程序。代码主要包含以下几个函数:
1. Lcd1602_Delay1ms:延时函数,用于延时一段时间,单位为毫秒。
2. LcdWriteCom:向LCD屏幕发送命令,其中com为命令码。
3. LcdWriteData:向LCD屏幕发送数据,其中dat为数据码。
4. LcdInit:LCD1602初始化函数,用于初始化LCD屏幕。
在主函数中,首先调用LcdInit函数对LCD屏幕进行初始化,然后通过循环将字符数组Disp中的字符一个一个发送到LCD屏幕上进行显示。
需要注意的是,该代码中使用了C51的一些特有的语法,如sbit等。因此,如果要在其他类型的单片机上使用该代码,需要进行相应的修改。
#include <stc8.h> #define c 30 void delay(unsigned int ms) { unsigned int i,j; for(i=ms;i>0;i--) { for(j=147;j>0;j--); } } void pwm(unsigned char k) { unsigned char n; for(n=0;n<c;n++) { P3=0X00; delay(k); P3=0XFF; delay(c-k); } } void main() { //³õʼ»¯´úÂë P3 = 0x00; //ÉèÖÃÖÐ¶Ï EA = 1; while (1) { //Ö÷Ñ»·´úÂë unsigned char t; for (t = 1; t < c; t++) { pwm(t); } for (t = c - 1; t > 0; t--) { pwm(t); } delay(2000); } } 优化一下代码
#include <stc8.h>
void delay(unsigned int ms)
{
unsigned int i, j;
for (i = ms; i > 0; i--)
{
for (j = 147; j > 0; j--);
}
}
void pwm(unsigned char k)
{
unsigned char n;
for (n = 0; n < k; n++)
{
P3 = 0x00;
delay(k);
P3 = 0xFF;
delay(c - k);
}
}
void main()
{
// 初始化引脚
P3 = 0x00;
// 设置中断
EA = 1;
while (1)
{
unsigned char t;
// 主循环
for (t = 1; t < c; t++)
{
pwm(t);
}
for (t = c - 1; t > 0; t--)
{
pwm(t);
}
delay(2000);
}
}
阅读全文