標(biāo)題:
怎樣修改一下單片機(jī)代碼,可以不用38譯碼器進(jìn)行位定義?求大佬指點(diǎn)
[打印本頁(yè)]
作者:
knight123.
時(shí)間:
2021-11-14 01:54
標(biāo)題:
怎樣修改一下單片機(jī)代碼,可以不用38譯碼器進(jìn)行位定義?求大佬指點(diǎn)
QG)A}%RGHDAJA1]KHD6L]NB.png
(149.55 KB, 下載次數(shù): 60)
下載附件
2021-11-15 23:41 上傳
單片機(jī)代碼奉上:
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define GPIO_KEY P1
u8 smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 t0,KeyVal,Display[8],flag,flag1,flag2,flag3;
u16 hour,minute,second;
//38譯碼器
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//數(shù)碼管顯示函數(shù)
void Showsmg();
//延時(shí)函數(shù)
void Delay(u16 i);
//初始化函數(shù)
void Init();
//按鍵檢測(cè)
void KeyDown();
//按鍵處理
void Keypross();
//數(shù)據(jù)處理
void Datapross();
//按鍵數(shù)字處理
void Numpross(u8 dat);
//Up功能處理
void Uppross();
//Down功能處理
void Downpross();
//Func功能處理
void Funcpross();
//Enter功能處理
void Enterpross();
//Back功能處理
void Backpross();
void main(){
Init();
while(1){
KeyDown();
Keypross();
Datapross();
Showsmg();
}
}
//數(shù)碼管顯示函數(shù)
void Showsmg(){
u8 i;
for(i=0;i<8;i++)
{
switch(7-i) //位選
{
case 0: LSA=0;LSB=0;LSC=0;break;
case 1: LSA=1;LSB=0;LSC=0;break;
case 2: LSA=0;LSB=1;LSC=0;break;
case 3: LSA=1;LSB=1;LSC=0;break;
case 4: LSA=0;LSB=0;LSC=1;break;
case 5: LSA=1;LSB=0;LSC=1;break;
case 6: LSA=0;LSB=1;LSC=1;break;
case 7: LSA=1;LSB=1;LSC=1;break;
}
P0=Display[i];
Delay(1);
P0=0x00;
}
}
//延時(shí)函數(shù)
void Delay(u16 i) //11.0592 1ms
{
while(i--){
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
//初始化函數(shù)
void Init(){
//參數(shù)初始化
hour=0;
minute=0;
second=0;
t0=0;
flag=0;
flag1=0;
flag2=0;
//定時(shí)器0初始化
TMOD=0x01;
TH0=(65536-9174)/256; //10ms
TL0=(65536-9174)%256;
EA=1;
ET0=1;
TR0=0;
}
//按鍵檢測(cè)
void KeyDown(){
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f){
Delay(10);
if(GPIO_KEY!=0x0f){
GPIO_KEY=0x0f;
switch(GPIO_KEY){
case 0x07 : KeyVal=0;flag3=1;break;
case 0x0b : KeyVal=1;flag3=1;break;
case 0x0d : KeyVal=2;flag3=1;break;
case 0x0e : KeyVal=3;flag3=1;break;
}
GPIO_KEY=0xf0;
switch(GPIO_KEY){
case 0x70 : KeyVal=KeyVal;break;
case 0xb0 : KeyVal=KeyVal+4;break;
case 0xd0 : KeyVal=KeyVal+8;break;
case 0xe0 : KeyVal=KeyVal+12;break;
}
}
while((a<150) && (GPIO_KEY!=0xf0)){
Delay(1);
a++;
}
}
}
//按鍵處理
void Keypross(){
if(flag3==1){
flag3=0;
switch(KeyVal){
case 0:Numpross(7);break;
case 1:Numpross(8);break;
case 2:Numpross(9);break;
case 3:Uppross();break;
case 4:Numpross(4);break;
case 5:Numpross(5);break;
case 6:Numpross(6);break;
case 7:Downpross();break;
case 8:Numpross(1);break;
case 9:Numpross(2);break;
case 10:Numpross(3);break;
case 11:Funcpross();break;
case 12:Numpross(0);break;
case 13:break;
case 14:Backpross();break;
case 15:Enterpross();break;
}
}
}
//數(shù)據(jù)處理
void Datapross(){
if(flag2==1){
flag2=0;
second--;
if(second>59){
if(minute>59){
if(hour>23){
second=0;
minute=0;
hour=0;
TR0=0;
}
else{
hour--;
minute=59;
}
}
else{
minute--;
second=59;
}
}
}
Display[0]=smgduan[hour/10];
Display[1]=smgduan[hour%10];
Display[2]=0x40;
Display[3]=smgduan[minute/10];
Display[4]=smgduan[minute%10];
Display[5]=0x40;
Display[6]=smgduan[second/10];
Display[7]=smgduan[second%10];
}
//按鍵數(shù)字處理
void Numpross(u8 dat){
u8 tp;
if(flag==1){
switch(flag1){
case 0:tp=hour%10;hour=tp+dat*10;break;
case 1:tp=hour/10;hour=tp*10+dat;break;
case 2:tp=minute%10;minute=tp+dat*10;break;
case 3:tp=minute/10;minute=tp*10+dat;break;
case 4:tp=second%10;second=tp+dat*10;break;
case 5:tp=second/10;second=tp*10+dat;break;
}
}
}
//Up功能處理
void Uppross(){
if(flag==1){
flag1++;
if(flag1>5){
flag1=0;
}
}
}
//Down功能處理
void Downpross(){
if(flag==1){
flag1--;
if(flag1<0)
flag1=5;
}
}
//Func功能處理
void Funcpross(){
TR0=0; //停止計(jì)時(shí)
flag=1; //允許設(shè)置時(shí)間
}
//Enter功能處理
void Enterpross(){
flag=0; //清零,不允許設(shè)置時(shí)間
flag1=0;
if(hour>23)
hour=23;
if(minute>59)
minute=59;
if(second>59)
second=59;
TR0=1; //開(kāi)始計(jì)時(shí)
}
//Back功能處理
void Backpross(){
//暫無(wú)功能
}
void Timer0() interrupt 1{
TH0=(65536-9174)/256; //重置
TL0=(65536-9174)%256;
t0++;
if(t0==100){
t0=0;
flag2=1;
}
}
復(fù)制代碼
作者:
啤酒瓶子老大
時(shí)間:
2021-11-14 07:10
生搬硬套。哈哈。
作者:
啤酒瓶子老大
時(shí)間:
2021-11-14 11:18
坐沙發(fā),等大佬解答。
作者:
wulin
時(shí)間:
2021-11-14 21:12
軟件都是基于硬件條件編寫(xiě)的。樓主找的程序只適合普中的開(kāi)發(fā)板,不能直接套用到這個(gè)板子上。這個(gè)截圖根本看不清管腳標(biāo)注,也就搞不清連接關(guān)系。亂猜沒(méi)有實(shí)際意義。
作者:
188610329
時(shí)間:
2021-11-14 21:57
樓主的代碼,讓我想起前兩天那個(gè)DS1302的帖子……,那個(gè)是38譯碼器的高低位不明。
你這個(gè)代碼雖然和那個(gè)如出一轍。 但是從你的電路圖看,你板子上壓根沒(méi)有38譯碼器阿……
作者:
wc86110
時(shí)間:
2021-11-15 06:40
買(mǎi)開(kāi)發(fā)板得用它配套的程序這是共識(shí),隨便拿個(gè)程序來(lái)修改
作者:
18520649817
時(shí)間:
2021-12-13 00:07
為啥不用38譯碼器,難道你要直接用IO口嗎
作者:
angmall
時(shí)間:
2021-12-13 09:49
樓主用天祥的單片機(jī)學(xué)習(xí)板 一個(gè)用的鎖存器驅(qū)動(dòng)位碼,
找的程序只適合普中的開(kāi)發(fā)板 一個(gè)用的38譯碼器驅(qū)動(dòng)位碼,
你程序直接移過(guò)去,絕對(duì)是跑不起來(lái)的。
作者:
Hephaestus
時(shí)間:
2021-12-13 11:32
三八譯碼器是用三根線擴(kuò)展成八根線,主要更改在硬件上面,你不貼硬件的圖貼軟件真讓人摸不到頭腦。
作者:
uxs
時(shí)間:
2021-12-13 12:27
用多的端口來(lái)代替38譯碼器的所有輸出管腳
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1