欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1941|回復(fù): 4
收起左側(cè)

單片機(jī)程序是對(duì)脈沖進(jìn)行計(jì)數(shù),然后從lcd顯示出來(lái),但就是顯示不正確 求幫助

[復(fù)制鏈接]
ID:839532 發(fā)表于 2021-5-11 22:35 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P2
sbit RS = P3^0; //定義端口 (顯示屏)
sbit RW = P3^1;
sbit EN = P3^2;
void LCD_Init(void);
void inti()
{ LCD_Init() ;
TMOD=0x05 ;//*T0為16位計(jì)數(shù)方式*/
TH0=F0 ;
TL0=60 ;//*預(yù)置初值*/
TR0=1;
}
// 單片機(jī)計(jì)算脈沖數(shù) 顯示
uint num;//計(jì)數(shù)變量聲明
/*延時(shí)子程序*******************************************************/
void delay(uint xms)
{
uint j;
for(;xms>0;xms--)
for(j=110;j>0;j--);
}
/*------------------------------------------------
uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
長(zhǎng)度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時(shí)1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
判忙函數(shù)
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
寫(xiě)入命令函數(shù)
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
//while(LCD_Check_Busy()); //忙則等待
DelayMs(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
寫(xiě)入數(shù)據(jù)函數(shù)
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
//while(LCD_Check_Busy()); //忙則等待
DelayMs(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
/*------------------------------------------------
清屏函數(shù)
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
寫(xiě)入字符串函數(shù)
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
寫(xiě)入字符函數(shù)
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函數(shù)
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*顯示模式設(shè)置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*顯示關(guān)閉*/
LCD_Write_Com(0x01); /*顯示清屏*/
LCD_Write_Com(0x06); /*顯示光標(biāo)移動(dòng)設(shè)置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*顯示開(kāi)及光標(biāo)設(shè)置*/
}
/*主程序***************************************************************/
void main()
{
inti();
while(1)
{
float num1,num2,num;
unsigned char x;
unsigned char y;
unsigned char Data;
Data=TH0*255+TL0;//讀計(jì)數(shù)器數(shù)據(jù)
if(Data==4000){TH0=F0;TL0=60;TR0=0;} //計(jì)滿清零
num1=Data/4*0.05;
num2=0.05/4*(Data%4);
num=num1+num2;
LCD_Write_Char(x,y,num);
}
}

回復(fù)

使用道具 舉報(bào)

ID:65956 發(fā)表于 2021-5-12 08:22 | 顯示全部樓層
雖然沒(méi)有附上實(shí)際運(yùn)行結(jié)果圖,但按個(gè)人經(jīng)驗(yàn)來(lái)看,我認(rèn)為你計(jì)算器應(yīng)采用中斷方式進(jìn)入計(jì)數(shù),而顯示放在主函數(shù)中運(yùn)行,這樣才能保證計(jì)數(shù)后送顯示的及時(shí)性和正確性,如果按你現(xiàn)在計(jì)數(shù)及顯示都在主函數(shù)處理,你會(huì)發(fā)現(xiàn)計(jì)數(shù)值比你顯示的快得多,因?yàn)轱@示需要的時(shí)間遠(yuǎn)遠(yuǎn)大于計(jì)數(shù),除非你的計(jì)數(shù)是HZ速度,如果是KHZ的速度,顯示會(huì)來(lái)不及顯示,所以計(jì)數(shù)值會(huì)比顯示快,也就是你說(shuō)的不對(duì),只是想法,希望對(duì)你有幫助
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-5-12 10:48 | 顯示全部樓層
脈沖頻率不太高可以用這個(gè)方式計(jì)數(shù)。你的計(jì)數(shù)和數(shù)據(jù)處理有點(diǎn)問(wèn)題,不清楚你要顯示實(shí)際數(shù)還是比例數(shù),按需自行修改。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<math.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define RS_CLR RS=0
  7. #define RS_SET RS=1
  8. #define RW_CLR RW=0
  9. #define RW_SET RW=1
  10. #define EN_CLR EN=0
  11. #define EN_SET EN=1
  12. #define DataPort P0
  13. sbit RS = P3^0; //定義端口 (顯示屏)
  14. sbit RW = P3^1;
  15. sbit EN = P3^2;
  16. uchar data dis_buf[]="0000";

  17. void LCD_Init(void);

  18. void inti()
  19. {
  20.         LCD_Init() ;
  21.         TMOD=0x05 ;//*T0為16位計(jì)數(shù)方式*/
  22.         TH0=F0 ;
  23.         TL0=60 ;//*預(yù)置初值*/
  24.         TR0=1;
  25. }
  26. // 單片機(jī)計(jì)算脈沖數(shù) 顯示
  27. //uint num;//計(jì)數(shù)變量聲明
  28. /*延時(shí)子程序*******************************************************/
  29. /*
  30. void delay(uint xms)
  31. {
  32.         uint j;
  33.         for(;xms>0;xms--)
  34.                 for(j=110;j>0;j--);
  35. }*/
  36. /*------------------------------------------------
  37. uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
  38. unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
  39. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
  40. 長(zhǎng)度如下 T=tx2+5 uS
  41. ------------------------------------------------*/
  42. void DelayUs2x(unsigned char t)
  43. {
  44. while(--t);
  45. }
  46. /*------------------------------------------------
  47. mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
  48. unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
  49. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
  50. ------------------------------------------------*/
  51. void DelayMs(unsigned char t)
  52. {
  53. while(t--)
  54. {
  55. //大致延時(shí)1mS
  56. DelayUs2x(245);
  57. DelayUs2x(245);
  58. }
  59. }
  60. /*------------------------------------------------
  61. 判忙函數(shù)
  62. ------------------------------------------------*/
  63. /*
  64. bit LCD_Check_Busy(void)
  65. {
  66.         DataPort= 0xFF;
  67.         RS_CLR;
  68.         RW_SET;
  69.         EN_CLR;
  70.         _nop_();
  71.         EN_SET;
  72.         return (bit)(DataPort & 0x80);
  73. }*/
  74. /*------------------------------------------------
  75. 寫(xiě)入命令函數(shù)
  76. ------------------------------------------------*/
  77. void LCD_Write_Com(unsigned char com)
  78. {
  79.         //while(LCD_Check_Busy()); //忙則等待
  80.         DelayMs(5);
  81.         RS_CLR;
  82.         RW_CLR;
  83.         EN_SET;
  84.         DataPort= com;
  85.         _nop_();
  86.         EN_CLR;
  87. }
  88. /*------------------------------------------------
  89. 寫(xiě)入數(shù)據(jù)函數(shù)
  90. ------------------------------------------------*/
  91. void LCD_Write_Data(unsigned char Data)
  92. {
  93.         //while(LCD_Check_Busy()); //忙則等待
  94.         DelayMs(5);
  95.         RS_SET;
  96.         RW_CLR;
  97.         EN_SET;
  98.         DataPort= Data;
  99.         _nop_();
  100.         EN_CLR;
  101. }
  102. /*------------------------------------------------
  103. 清屏函數(shù)
  104. ------------------------------------------------*/
  105. /*
  106. void LCD_Clear(void)
  107. {
  108.         LCD_Write_Com(0x01);
  109.         DelayMs(5);
  110. }*/
  111. /*------------------------------------------------
  112. 寫(xiě)入字符串函數(shù)
  113. ------------------------------------------------*/
  114. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  115. {
  116.         if (y == 0)
  117.         {
  118.                 LCD_Write_Com(0x80 + x); //表示第一行
  119.         }
  120.         else
  121.         {
  122.                 LCD_Write_Com(0xC0 + x); //表示第二行
  123.         }
  124.         while (*s)
  125.         {
  126.                 LCD_Write_Data( *s);
  127.                 s ++;
  128.         }
  129. }
  130. /*------------------------------------------------
  131. 寫(xiě)入字符函數(shù)
  132. ------------------------------------------------*/
  133. /*
  134. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  135. {
  136.         if (y == 0)
  137.         {
  138.                 LCD_Write_Com(0x80 + x);
  139.         }
  140.         else
  141.         {
  142.                 LCD_Write_Com(0xC0 + x);
  143.         }
  144.         LCD_Write_Data( Data);
  145. }*/
  146. /*------------------------------------------------
  147. 初始化函數(shù)
  148. ------------------------------------------------*/
  149. void LCD_Init(void)
  150. {
  151. LCD_Write_Com(0x38); /*顯示模式設(shè)置*/
  152. DelayMs(5);
  153. LCD_Write_Com(0x38);
  154. DelayMs(5);
  155. LCD_Write_Com(0x38);
  156. DelayMs(5);
  157. LCD_Write_Com(0x38);
  158. LCD_Write_Com(0x08); /*顯示關(guān)閉*/
  159. LCD_Write_Com(0x01); /*顯示清屏*/
  160. LCD_Write_Com(0x06); /*顯示光標(biāo)移動(dòng)設(shè)置*/
  161. DelayMs(5);
  162. LCD_Write_Com(0x0C); /*顯示開(kāi)及光標(biāo)設(shè)置*/
  163. }
  164. /*主程序***************************************************************/
  165. void main()
  166. {
  167.         unsigned int  Data;
  168.         inti();
  169.         while(1)
  170.         {
  171.                 Data=TH0<<8|TL0;//讀計(jì)數(shù)器數(shù)據(jù)
  172.                 if(Data>=4000)
  173.                         TR0=0;
  174.                 dis_buf[0]=Data/1000%10+'0';
  175.                 dis_buf[1]=Data/100%10+'0';
  176.                 dis_buf[2]=Data/10%10+'0';
  177.                 dis_buf[3]=Data%10+'0';
  178.                 LCD_Write_String(0,0,dis_buf);

  179.         }
  180. }

復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:839532 發(fā)表于 2021-5-12 11:41 | 顯示全部樓層
aking991 發(fā)表于 2021-5-12 08:22
雖然沒(méi)有附上實(shí)際運(yùn)行結(jié)果圖,但按個(gè)人經(jīng)驗(yàn)來(lái)看,我認(rèn)為你計(jì)算器應(yīng)采用中斷方式進(jìn)入計(jì)數(shù),而顯示放在主函數(shù) ...

我計(jì)數(shù)的是khz的,那我應(yīng)該怎么修改啊,剛接觸,寫(xiě)的比較簡(jiǎn)單,用的是中斷計(jì)數(shù),不知道這個(gè)計(jì)數(shù)程序?qū)懙膶?duì)不對(duì),很多東西都沒(méi)想到,求大神指點(diǎn)一下
回復(fù)

使用道具 舉報(bào)

ID:839532 發(fā)表于 2021-5-12 15:14 | 顯示全部樓層
wulin 發(fā)表于 2021-5-12 10:48
脈沖頻率不太高可以用這個(gè)方式計(jì)數(shù)。你的計(jì)數(shù)和數(shù)據(jù)處理有點(diǎn)問(wèn)題,不清楚你要顯示實(shí)際數(shù)還是比例數(shù),按需自 ...

謝謝大神謝謝謝謝,問(wèn)題解決了謝謝謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表