久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機新手寫了一個關于秒表的小程序,遇到了一些問題,想請教一下
[打印本頁]
作者:
peter_panfayang
時間:
2019-3-7 16:50
標題:
單片機新手寫了一個關于秒表的小程序,遇到了一些問題,想請教一下
我這個程序功能很簡單:通過tx-1c實驗班的第一個矩陣鍵盤按鍵開始計時
1、燒寫在板子上按鍵下去可以計時,但是數碼管只有當個位數變動時,十位數的顯示就閃一下,
就是說個位數的數字顯示正常,但是十位數的數字一秒閃一次,想請教一下是什么問題?
2、我想讓按鍵能實現開始和暫停的功能,請問我應該怎么改?
3、還有想問一個小知識點,keil中的bit關鍵字定義的變量如果沒有初始化,那么這個變量初始值是1還是0呢?
剛開始學單片機,很多東西不是很懂,希望各位大佬能幫我解答一下,如果我的代碼寫得不好也希望能給我一些小建議吧,謝謝了。
單片機源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //數碼管段選信息
uchar single, tenth;
uchar flag;
sbit dula=P2^6;
sbit wela=P2^7;
uint num=1;
void delay(uchar ms)
{
uchar i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--) ;
}
void display(uchar tenth, uchar single) //數碼管顯示函數
{
dula=1;
P0=led[tenth];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);
dula=1;
P0=led[single];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
}
void keyscan() //鍵盤檢測
{
uchar temp;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee: flag=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=0xf0;
}
}
}
}
void main()
{
single=0;
tenth=0;
display(tenth,single);
TMOD=0x02; //利用定時器0方式2計數
TL0=6; //方式2為初值自動重裝的8位定時器
TH0=6;
keyscan(); //檢測按鍵是否被按下
EA=1;
ET0=1;
TR0=1;
while(flag) //當檢測按鍵被按下開始計時
{
if(num==3686) //中斷3686次相當于1s
{
num=1;
single++;
if(single==10)
{
single=0;
tenth++;
}
display(tenth,single);
}
}
}
void T0_time() interrupt 1 //中斷函數
{
num++;
}
復制代碼
作者:
hufeng
時間:
2019-3-7 20:47
中斷關閉就可以暫停了
作者:
hufeng
時間:
2019-3-7 20:50
keil中的bit關鍵字定義的變量如果沒有初始化,那么這個變量初始值是0
作者:
zhengchong60
時間:
2019-3-7 22:42
變量沒有初始化
作者:
yzwzfyz
時間:
2019-3-8 08:35
變量初始值是1還是0?
養成好習慣,先做初始化。否則會吃苦頭的!!!即使板凳說明完全正確,也不要輕信!
作者:
peter_panfayang
時間:
2019-3-9 14:48
zhengchong60 發表于 2019-3-7 22:42
變量沒有初始化
請問具體是哪一個位置沒有初始化呢,可以給我指點一下嗎?
作者:
peter_panfayang
時間:
2019-3-9 14:56
hufeng 發表于 2019-3-7 20:47
中斷關閉就可以暫停了
我的思路也是這樣,但是怎么讓單片機第二次檢測按鍵被按下呢?這個地方不太會寫
作者:
wulin
時間:
2019-3-9 21:38
給你改這樣試試
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};//數碼管段選信息
//uchar single, tenth;
uchar flag=0,sec=0;
uint num=0;
bit sign1=0;
void delay(uchar ms)
{
uchar i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--) ;
}
void display()//數碼管顯示函數
{
static bit k=0;
P0=0x00;//消隱
dula=1;
dula=0;
if(k==0)
{
P0=0xfe;
wela=1;
wela=0;
P0=led[sec/10];
dula=1;
dula=0;
k=1;
}
else
{
P0=0xfd;
wela=1;
wela=0;
P0=led[sec%10];
dula=1;
dula=0;
k=0;
}
}
void keyscan() //鍵盤檢測
{
static bit sign;
// uchar temp;
P3=0xf0;
if(P3!=0xf0)
{
delay(10);
if((P3==0xe0)&&(sign==0))
{
sign=1;//自鎖
flag++;
if(flag==3)flag=0;
if(flag==0){sec=0;num=0;}//清0
if(flag==1)sign1=1;//啟動
if(flag==2)sign1=0;//停止
}
}
else sign=0;//按鍵抬起
}
void Timer0Init(void)//1毫秒@11.0592MHz
{
TMOD = 0x01; //設置定時器模式
TL0 = 0x66; //設置定時初值
TH0 = 0xFC; //設置定時初值
TR0 = 1; //定時器0開始計時
EA=1;
ET0=1;
}
void main()
{
Timer0Init();
while(1) //當檢測按鍵被按下開始計時
{
keyscan(); //檢測按鍵是否被按下
}
}
void T0_time() interrupt 1 //中斷函數
{
TL0 = 0x66; //設置定時初值
TH0 = 0xFC; //設置定時初值
if(sign1==1)
{
num++;
if(num>=1000)
{
num=0;
sec++;
if(sec>=100)
sec=0;
}
}
display();//動態顯示
}
復制代碼
作者:
zhb2004xp
時間:
2019-3-10 00:40
變量的定義如果是全局變量(函數初始就定義了,在整個函數里都能使用),初始值=0;
如果是局部變量(在子函數中定義,只能在子函數中調用),初始值是隨機的
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄a网站
|
精品一二三区在线观看
|
免费超碰
|
91精品国产91久久久久福利
|
色精品
|
亚洲电影一区二区三区
|
av黄在线观看
|
精品国产乱码久久久久久牛牛
|
伊人色综合久久久天天蜜桃
|
国产精品99久久久久久宅男
|
91免费观看在线
|
一区二区av
|
成人在线激情
|
一区二区高清在线观看
|
午夜影院网站
|
久久不卡
|
欧美视频网
|
国产成人a亚洲精品
|
re久久
|
天天干视频
|
97超级碰碰
|
av电影一区二区
|
九九久久久
|
成人精品鲁一区一区二区
|
91精品久久久久久久久中文字幕
|
亚洲视频在线观看
|
国产精品美女久久久av超清
|
国产精品久久久久久久久久久久久久
|
精品久久伊人
|
欧美精品导航
|
天天综合网永久
|
国产欧美性成人精品午夜
|
91国产精品
|
五月免费视频
|
久久久久久久久中文字幕
|
一区二区三区视频
|
国产视频三区
|
亚洲欧美中文日韩在线v日本
|
久草在线青青草
|
色综合成人网
|
国产专区在线
|