久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2459|回復: 2
收起左側

萌新在搞智能臺燈設計,論壇找到的仿真運行不了,數碼管顯示也有問題,有沒有大佬...

[復制鏈接]
ID:763917 發表于 2020-6-4 16:00 | 顯示全部樓層 |閱讀模式
245黑幣
代碼如下
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*uchar code table[]=
{
0x3F,0x06,0x66,0x4F,            
0x66,0x6D,0x7D,0x07,            
0x7F,0x6F,0x77,0x7C,            
0x39,0x5E,0x79,0x71,         
0x76,0x38,0x37,0x3E,           
0x73,0x5C,0x40,0x00,  
};*/
char code table[] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,
    0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x02};
uchar WE[] = {0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7};
uchar Ly_Dis[4],Time1[3],Time2[3];
uchar dat, temp;
uint scale,num,num1,num2=990,num3;
bit CH,flag;
sbit CLK = P2^5;
sbit DI = P2^4;
sbit DO = P2^6;
sbit CS = P2^7;
sbit RELAY = P3^5;
sbit LED = P3^3;
sbit K1=P2^3;
sbit key2=P2^2;
sbit key3=P2^1;
sbit key4=P2^0;
void DelayMs(uint ms)
{
uint i, j;
for(i = ms; i > 0; i --)
  for(j = 110; j > 0; j --);
}
uchar Adc0832(uchar CH)
{
uchar i, test, adval;
adval  = 0x00;
test = 0x00;
CLK = 0;
DI = 1;
_nop_();
CS = 0;
_nop_();
CLK = 1;
_nop_();

if(CH == 0)
{
  CLK = 0;
  DI = 1; _nop_();
  CLK = 1; _nop_();
  CLK = 0;
  DI = 0; _nop_();
  CLK = 1; _nop_();
}
else
{
  CLK = 0;
  DI = 1; _nop_();
  CLK = 1; _nop_();
  CLK = 0;
  DI = 1; _nop_();
  CLK = 1; _nop_();
}
CLK = 0;
DI = 1;

for(i = 0; i < 8; i ++)
{
  _nop_();
  adval <<= 1;
  CLK = 1; _nop_();
  CLK = 0;
  if(DO)
   adval |= 0x01;
  else
   adval |= 0x00;
}

for(i = 0; i < 8; i ++)
{
  test >>= 1;
  if(DO)
   test |= 0x80;
  else
   test |= 0x00;
  _nop_();
  CLK = 1; _nop_();
  CLK = 0;
}

if(test == adval)
  dat = test;
_nop_();
CS = 1;
DO= 1;
CLK = 1;
return dat;
}
void Display(uchar num)
{
  uint i;
for(i = 0; i < 3; i ++)
{
  Ly_Dis[2 - i] = num % 10;
  num = num / 10;
}
Ly_Dis[3] = 0;

  P0 = WE[0];
  P1 = table[Ly_Dis[0]];
  DelayMs(4);
  
  P0 = WE[1];
  P1 = table[Ly_Dis[1]];
  DelayMs(4);
  
  P0 = WE[2];
  P1 = table[Ly_Dis[2]];
  DelayMs(4);
  
  P0 = WE[3];
  P1 = table[Ly_Dis[3]];
  DelayMs(4);
}
void Display1()
{
Time1[0]=num1/100;
Time1[1]=num1%100/10;
Time1[2]=num1%10;

P0 = WE[5];
P1 = table[Time1[0]];
DelayMs(4);

P0 = WE[6];
P1 = table[Time1[1]];
DelayMs(4);

P0 = WE[7];
P1 = table[Time1[2]];
DelayMs(4);
}
Display2()
{
Time2[0]=num2/100;
Time2[1]=num2%100/10;
Time2[2]=num2%10;

P0 = WE[5];
P1 = table[Time2[0]];
DelayMs(4);

P0 = WE[6];
P1 = table[Time2[1]];
DelayMs(4);

P0 = WE[7];
P1 = table[Time2[2]];
DelayMs(4);
}
void Relay()
{
if(temp >= 125&&temp!=0)
{
  RELAY = 0;
}
else
{
  if(temp!=0)
  RELAY = 1;
}
}
void Init()
{
RELAY = 1;
LED = 0;
TMOD=0x12;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
TH1=(65536-50000)/256;   
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
}
void KeyScan()
{
  if(K1 == 0)
  {
   DelayMs(10);
   if(K1 == 0)
   {
    scale++;
    if(scale==10)
     scale=0;
   }
   while(!K1);
  }
  
  if(key2==0)
{
  DelayMs(10);
  if(key2==0)
  {
   flag=~flag;
  }
  while(!key2);
}

if(key3==0)
{
  DelayMs(10);
  if(key3==0)
  {
   num2+=10;
   if(num2==990)
    num2=0;
  }
  while(!key3);
}

if(key4==0)
{
  DelayMs(10);
  if(key4==0)
  {
   num2-=10;
   if(num2==0)
    num2=990;
  }
  while(!key4);
}
}
void main()
{
uint i;
Init();
while(1)
{
  temp = Adc0832(1);
  i ++;
  if(i == 50)
  {
   if(temp != 0)
   //Display(temp);
   //DelayMs(100);
   i = 0;
  }
  Relay();
  KeyScan();
  
   if(flag==0)
   Display1();
  else
   Display2();
  if(num1==num2)
  {
   LED=1;
   while(!key2);
  }
}
}
void timer0() interrupt 1
{
static uint tt;
tt++;
if(tt==10)
{
  tt=0;
  LED=0;
}
if(scale==tt)
LED=1;
}
void Timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num++;
if(num==20)
{
  num=0;
  num3++;
   if(num3==60)
   {
    num3=0;
    num1++;
    if(num1==990)
     num1=0;
   }
}
}


捕獲2.PNG
捕獲1.PNG
回復

使用道具 舉報

ID:267719 發表于 2020-6-6 23:30 | 顯示全部樓層
樓主的硬件電路只能在仿真里做做,做成實物會
1:程序跑不起來,因為EA接了VCC,沒接地;
2:三極管Q1,Q3會燒毀,單片機可能會燒毀;因為三極管基極沒有電阻,低電平時,電源對地等效接二極管短路。
3:D10-D25發光二極管會燒毀,因為沒有限流電阻;
4:數碼管可能會燒毀,也是因為沒有限流電阻;
5:繼電器驅動不起來;因為串聯220歐電阻能否驅動,要看你繼電器的選型了;

軟件方面:
1:你注釋掉的譯碼是對的;
2:
if(key3==0)
{
  DelayMs(10);
  if(key3==0)
  {
   num2+=10;
   if(num2==990)
    num2=0;
  }
  while(!key3);
}
邊界有問題。剛開始你是uint scale,num,num1,num2=990,num3;
按了key3,結果num2+10=1000;1000!=990,所以num2不會被變為0。結果就是1000,超過了990.
key4存在同樣問題,當num變為0后,按了key4鍵,num=65526。。。
4:如果單片機時鐘是12MHz,12T,那定時器1定時周期50ms,被num分頻20,就是1000ms,被num3分頻60,就是1分鐘。意味著num1要等1分鐘才會變一次。仿真顯示你有沒有等一分鐘后看過結果?

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:332444 發表于 2020-6-7 06:50 | 顯示全部樓層
學些新的數碼管動態知識,可參http://www.zg4o1577.cn/bbs/dpj-189201-1.html,有代碼有示例工程下載。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频在线播放 | 亚洲狠狠| 日韩成人在线网址 | 免费在线视频一区二区 | 国产成人免费视频网站高清观看视频 | 欧美在线不卡 | 亚洲日韩中文字幕一区 | 一级欧美 | 亚洲毛片 | 欧美日韩一区二区视频在线观看 | 国产一区欧美 | 国内自拍偷拍一区 | 欧美成人免费在线 | 韩日精品一区 | 欧美日韩在线视频一区 | 黄色免费看 | 日韩欧美黄色 | 免费毛片网 | 久产久精国产品 | 亚洲成人福利在线观看 | 久久久久www | 国产精品无码久久久久 | 亚洲综合激情 | 国产欧美一区二区三区免费 | 中文字幕人成乱码在线观看 | 欧美日韩视频在线第一区 | 国产免费麻豆视频 | 国产精品一区二区三区在线播放 | 91极品视频 | 亚洲国产成人av好男人在线观看 | 精精精精xxxx免费视频 | 中文字幕 在线观看 | 欧美激情综合五月色丁香小说 | 国产在线精品一区二区 | 一级日批片| 一区二区国产在线观看 | 一区二区三区免费观看 | 一区二区三区免费在线观看 | 四虎影院美女 | 秋霞在线一区二区 | 国产在线aa |