久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機數碼管某些數字顯示錯誤,求解
[打印本頁]
作者:
哈哈苦
時間:
2018-12-14 11:49
標題:
單片機數碼管某些數字顯示錯誤,求解
數碼管1,4,7顯示亂碼,暫停和啟動不能實現。求大神解惑。問題程序段如下
/* if((ina==0)&&(dea==0))//暫停
{
delayms(1) ;
if((ina==0)&&(dea==0)){
TR0=1;
j=miao;
while(!ina);
while(!dea);
}
}*/
#include <reg52.h>
#define uchar unsigned char
sbit ina=P1^0; //a得分加一按鈕
sbit inb=P1^2; //b得分加一按鈕
sbit dea=P1^1; //a得分減一按鈕
sbit deb=P1^3; //b得分減一按鈕
sbit change=P1^4; //分數互換按鈕
//sbit clean=P1^5; //分數清零按鈕
//sbit xiuxi=P1^6; //暫停休息按鈕
sbit fm=P1^6 ; //蜂鳴器控制口
sbit led=P1^7;
sbit dt=P3^6;
//定義全局變量
uchar count1,count2,miao10,miao1,fen10,fen1,adui10;
uchar j,k,l;
uchar adui1,bdui10,bdui1,fen,adui,bdui,x,a,b;
uchar adui100,bdui100;
char miao;
//char code table[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,0x00}
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9
void delayms( uchar time) //延時子函數
{ uchar i,j;
for(i=time;i>0;i--)
for(j=100;j>0;j--) ;
}
void buzzer()
{ //蜂鳴器
fm=(((ina==0)||(inb==0)||(dea==0)||(deb==0)||(change==0))?0:1);
}
////////////////////////////////////////////////
void displayadui100(adui100) //顯示a得分數的百位
{
P2=0xfe ; //選中某一數碼管(靠最左端一個)
dt=1;
P0=table[adui100] ; //送數據
dt=0;
delayms(5) ; //延時
}
void displayadui10(adui10) //顯示a得分數的十位
{
P2=0xfd ; //選中某一數碼管(靠最左端一個)
dt=1;
P0=table[adui10] ; //送數據
dt=0;
delayms(5) ; //延時
}
void displayadui1(adui1) //顯示a得分數的個位
{
P2=0xfb ; //選中某一數碼管(靠最左端一個)
dt=1;
P0=table[adui1] ; //送數據
dt=0;
delayms(5) ; //延時
}
void displayadui(uchar adui) // 顯示a得分(數據處理)
{ adui100=adui/100;
adui10=adui%100/10;
adui1=adui%100%10;
displayadui100(adui100);
displayadui10(adui10);
displayadui1(adui1);
}
////////////////////////////////////////////////////////////////
void displaybdui100(bdui100) //顯示B得分數的百位
{
P2=0xdf ; //選中某一數碼管(靠最左端一個)
dt=1;
P0=table[bdui100] ; //送數據
dt=0;
delayms(5) ; //延時
}
void displaybdui10(bdui10) //顯示B得分數的十位
{
P2=0xbf ; //選中某一數碼管(靠最左端一個)
dt=1;
P0=table[bdui10] ; //送數據
dt=0;
delayms(5) ; //延時
}
void displaybdui1(bdui1) //顯示B得分數的個位
{
P2=0x7f ; //選中某一數碼管(靠最左端一個)
dt=1;
P0=table[bdui1] ; //送數據
dt=0;
delayms(5) ; //延時
}
void displaybdui(uchar bdui) // 顯示B得分(數據處理)
{ bdui100=bdui/100;
bdui10=bdui%100/10;
bdui1=bdui%100%10;
displaybdui100(bdui100);
displaybdui10(bdui10);
displaybdui1(bdui1);
}
////////////////////////////////////
void displaymiao10(miao10) // 顯示時間秒 的十位
{
P2=0xf7;
dt=1;
P0=table[miao10] ;
dt=0;
delayms(1) ;
}
void displaymiao1(miao1) // 顯示時間秒的個位
{
P2=0xef ;
dt=1;
P0=table[miao1] ;
dt=0;
delayms(1) ;
}
void displaymiao(miao) //顯示秒(數據處理)
{miao10=miao/10;
miao1=miao%10;
displaymiao10(miao10);
displaymiao1(miao1);
}
//////////////////////////////
void timer0() interrupt 1 //中斷函數(定時器1工作于方式1)
{
TH0=(65536-50000)/256; //初值重裝
TL0=(65536-50000)%256;
count1++; // 計數加一,實現時間的計算
if(count1==20) // 實現時間計時為一秒 (20個中斷 為時間一秒)
{ count1=0; // count1重新開始,計時下一秒
miao--; // 秒倒計時一
if(miao==-1) // 當秒倒計時到0時,將秒賦值59,重新倒計時,同時分倒計一
{ miao=24;}
if(miao==12 ) // 0為通
{ led=0;}
if(miao!=12 ) //
{ led=1;}
displaymiao(miao);} // 將時間秒更新顯示
}
/*
uchar changgscan()
{
if(change==0) //掃描換分按鍵
{ delayms(1);
if(change==0) {
jishu++;
while(!change); }
}
return(jishu);
}
*/
uchar keyscan() //鍵盤掃描
{ uchar temp;
if(change==0) //掃描換分按鍵
{ delayms(1);
if(change==0)
{
temp=adui; //數據交換
adui=bdui;
bdui=temp;
delayms(1);
while(!change); //待鍵開
}
}
/////////////////// //////////////
//if ((ina==0)&&(dea==0)){ TR0=1;j=miao;}//暫停
if((ina==0)&&(dea==0))//暫停
{
delayms(1) ;
if((ina==0)&&(dea==0)){
TR0=1;
j=miao;
while(!ina);
while(!dea);
}
}
// if ((inb==0)&&(deb==0)){ TR0=0;miao=j;} //啟動
if((inb==0)&&(deb==0))//啟動
{
delayms(1) ;
if((inb==0)&&(deb==0)){
TR0=0;
miao=j;
while(!inb);
while(!deb);
}
}
if((ina==0)&&(dea==1)) //A加分按鍵按下
{
delayms(1) ;
if((ina==0)&&(dea==1)){
adui++ ; //a分數+1
while(!ina);
}
}
if((ina==1)&&(dea==0)) //A-按鍵按下
{
delayms(1) ;
if((ina==1)&&(dea==0)){
adui-- ; //a分數-1
while(!dea);
}
}
if((inb==0)&&(deb==1)) //B加分按鍵按下
{
delayms(1) ;
if((inb==0)&&(deb==1)){
bdui++ ; //B分數加一
while(!inb);
}
}
if((inb==1)&&(deb==0)) //B減分按鍵按下
{
delayms(1) ;
if((inb==1)&&(deb==0)){
bdui-- ; //B分數減一
while(!deb);
}
}
return(adui);
return(bdui); }
void main() //主函數
{
TMOD=0x11; //設置定時器1,2工作于方式1
TH0=(65536-50000)/256; //設置初值
TL0=(65536-50000)%256;
fm=1; //起初關蜂鳴器
EA=1; //開總中斷
ET0=1; // 允許定時器0中斷
ET1=1; //允許定時器1中斷
//TR1=0; //先不啟定時器1
miao=24;
TR0=1; //開啟定時器0,倒計時開始
P0=0xff ;
delayms(1) ;
while(1) //隨時掃描按鍵并顯示
{ buzzer();
// changgscan();
keyscan();
displayadui(adui);
displaybdui(bdui);
displaymiao(miao);
}
}
作者:
phang
時間:
2018-12-14 13:21
把問題說出來,然后把代碼一貼,這樣問問題的方式不好,沒幾個人會幫你看代碼的,所以怎么回答你。
你應該經過自己思考,把問題的范圍定好,再問人,這樣會好些。
作者:
devcang
時間:
2018-12-14 13:35
樓主還是先處理一些問題吧,如
return(adui);
return(bdui);
一個函數,2個返回語句。
作者:
aaa0557li
時間:
2018-12-14 13:52
看一下是不是位選沒有做好
作者:
ccll036918
時間:
2018-12-14 17:00
aaa0557li 發表于 2018-12-14 13:52
看一下是不是位選沒有做好
應該是電路圖對應的代碼沒寫對
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
99精品电影
|
中文字幕一区二区三区四区
|
97人人干
|
日本高清视频网站
|
久久久久久久久精
|
一区二区三区免费
|
911影院
|
国产精品久久久久久久久久免费
|
黄色片免费在线观看
|
久久精品一区二区三区四区
|
国产高清精品一区
|
在线中文视频
|
欧美成人精品在线观看
|
日韩欧美国产不卡
|
色婷婷综合久久久中文字幕
|
91精品久久久久久久久
|
日韩欧美在线视频
|
日日干日日射
|
成人欧美一区二区三区色青冈
|
欧美片网站免费
|
一级视频黄色
|
亚洲一区 中文字幕
|
国产成人精品一区二
|
亚洲第一女人av
|
天天躁日日躁狠狠很躁
|
四虎影院免费在线播放
|
国产色婷婷精品综合在线手机播放
|
黄色免费在线网址
|
gav成人免费播放视频
|
伊人免费观看视频
|
成人免费在线播放
|
国产精品一区在线播放
|
在线国产中文字幕
|
国产激情偷乱视频一区二区三区
|
日韩成人在线播放
|
国产精品亚洲一区二区三区在线
|
国产免费观看视频
|
www.久久久.com
|
1级毛片
|
爱爱免费视频
|
欧美一级黑人aaaaaaa做受
|