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

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

QQ登錄

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

搜索
查看: 3841|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

如何把這個(gè)在AT89S51中正常運(yùn)行的程序移植到STC15F204EA中

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
如題。一個(gè)可預(yù)置5位計(jì)數(shù)器的程序。電路跟源程序如下。



  1. #include <AT89X51.H>#define uchar unsigned char
  2. #define uint unsigned int
  3. uchar code SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,
  4.                 0x49,0x41,0x1f,0x01,0x09};
  5. uchar data cnt[5];//在data區(qū)定義5位長(zhǎng)度的數(shù)組,用來(lái)存放計(jì)數(shù)值
  6. uchar data pre_cnt[5];//在data區(qū)定義5位長(zhǎng)度的數(shù)組,用來(lái)存放預(yù)置值
  7. sbit drv=P3^4;//定義輸出驅(qū)動(dòng)端
  8. bit set_flag;//定義工作標(biāo)志
  9. bit out_flag;//定義輸出標(biāo)志
  10. bit keydown_flag;//鍵按下標(biāo)志
  11. /****************************/
  12. void delay(uint k)
  13. {
  14. uint i,j;
  15. for(i=0;i<k;i++){
  16. for(j=0;j<5;j++)
  17. {;}}
  18. }
  19. /**********************************************/
  20. void scan_key(void)          //掃描S1~S5鍵子程序開(kāi)始
  21. {uchar i,m=0x08;         //定義兩個(gè)字符型局部變量,并賦值0x01給m
  22. P3_6=0;P3_7=1;                //禁止發(fā)送給顯示器,消隱有效
  23. for(i=0;i<5;i++)        //循環(huán)5次
  24. {
  25. SBUF=255-m;while(!TI);TI=0;         //依次發(fā)送數(shù)據(jù)使IC2的輸出從右至左的列線為0
  26. if(!P3_5)pre_cnt[i]++;                 //若檢測(cè)到P3.5為0,說(shuō)明某列線送出0時(shí)與連接
  27.                              //該列線的按鍵被按下,數(shù)組中對(duì)應(yīng)的存放單元加1
  28. m<<=1;                                                //m的取值使從右向左的下一條列線為0
  29. }                                                        //掃描S1~S5鍵子程序結(jié)束
  30. //------------------------
  31. for(i=0;i<5;i++)                              //循環(huán)5次        
  32. {if(pre_cnt[i]>9)pre_cnt[i]=0;}                  //對(duì)數(shù)組中的5個(gè)單元進(jìn)行調(diào)整,其范圍為0~9
  33. }
  34. /************************************/
  35. void dis_cnter(void)                                 //顯示計(jì)數(shù)器值子程序開(kāi)始
  36. {uchar i;                                                         //定義字符型局部變量i
  37. P3_7=1;P3_6=1;                                                 //消隱有效,允許顯示
  38. for(i=0;i<5;i++)                                         //循環(huán)5次
  39. {SBUF=SEG7[cnt[i]];while(!TI);TI=0;}  //根據(jù)8個(gè)單元的計(jì)數(shù)值查表發(fā)送顯示
  40. P3_7=0;                                                                  //關(guān)閉消隱,正常顯示
  41. }                                                                          //顯示計(jì)數(shù)器值子程序結(jié)束
  42. /**********************************************/
  43. void dis_pre_cnter(void)
  44. {uchar i;
  45. P3_7=1;P3_6=1;
  46. SBUF=SEG7[pre_cnt[0]]&0xfe;while(!TI);TI=0;
  47. //----------------------------------------
  48. for(i=1;i<5;i++)
  49. {SBUF=SEG7[pre_cnt[i]];while(!TI);TI=0;}
  50. P3_7=0;
  51. }
  52. /****************************************/
  53. void cnter(void)                                                 //計(jì)數(shù)轉(zhuǎn)換子程序開(kāi)始
  54. {uchar i;                                                                 //定義字符型局部變量i
  55. for(i=0;i<4;i++)                                                 //循環(huán)5次
  56. {if(cnt[i]>9){cnt[i]=0;cnt[i+1]++;}}         //若計(jì)數(shù)器某位值大于9,則該位回0,
  57. //------------------------------------         //而高位被進(jìn)位加1
  58. if(cnt[4]>9){for(i=0;i<5;i++)cnt[i]=0;}// 若計(jì)數(shù)器最高位值大于9,則計(jì)數(shù)器全清0
  59. }                                                                           //計(jì)數(shù)轉(zhuǎn)換子程序結(jié)束
  60. /***************************************************/
  61. void pt_cnt(void)                                           //輸出控制子程序開(kāi)始
  62. {
  63. if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&(cnt[4]==pre_cnt[4]))        
  64.            //若計(jì)數(shù)值等于預(yù)置值
  65. out_flag=1;        
  66. //drv=1;                                                                           //輸出標(biāo)志置1
  67.         else out_flag=0;                                                          //否則輸出標(biāo)志置0
  68. //==========================
  69. if(out_flag)drv=0;                                                                 //若輸出標(biāo)志為1,輸出端(P3.4)置0,驅(qū)動(dòng)光耦U2
  70. else drv=1;                                                         //若輸出標(biāo)志為1,輸出端(P3.4)置0,驅(qū)動(dòng)光耦U2                                                                                 //否則輸出端(P3.4)置1
  71. }                                                                                                 //輸出控制子程序結(jié)束
  72. /********************************************/
  73. void main(void)                                                                        //主程序開(kāi)始
  74. {        IE=0x84;                                                                   //開(kāi)放CPU中斷,開(kāi)放外中斷1的中斷
  75.         IT1=1;                                                                           //置外中斷1為邊沿觸發(fā)
  76.         while(1)                                                                   //無(wú)限循環(huán)
  77.         {P3_6=0;P3_7=1;                                                           //禁止發(fā)送給顯示器,消隱有效
  78.         SBUF=0x00;while(!TI);TI=0;                                  //向IC2發(fā)送0x00,使IC2輸出為全0
  79.         if((P3&0x24)!=0x24)keydown_flag=1;                  //檢測(cè)P3.2、P3.5是否為高電平。
  80.                                                                                           //若不為高電平,說(shuō)明有鍵按下,鍵被按下標(biāo)志置1
  81.         else keydown_flag=0;                                          //否則,鍵被按下標(biāo)志置0
  82.         //--------------------------
  83.         SBUF=0xfe;while(!TI);TI=0;                                 //向IC2發(fā)送0xfe
  84.         if(!P3_2)set_flag=!set_flag;                         //若P3.2為0,說(shuō)明S9鍵按下,標(biāo)志set_flag取反
  85.         //=============================================
  86.         if(!set_flag){cnter();dis_cnter();
  87.         pt_cnt();delay(100);}                       //若標(biāo)志set_flag為0,調(diào)用計(jì)數(shù)、顯示計(jì)數(shù)、輸出控制的子程序
  88.         else {scan_key();dis_pre_cnter();delay(10);}//否則標(biāo)志set_flag為1,調(diào)用掃描S1~S8鍵、顯示預(yù)置值的子程序
  89.         //=============================================
  90.         if(keydown_flag)delay(300);         //因有鍵按下,調(diào)用延時(shí)300mS子程序,
  91.         }                                                         //以免調(diào)整鍵值的速度過(guò)快
  92. }                                                                 //主程序結(jié)束
  93. /************************************************/
  94. void extern_int1(void) interrupt 2 using 1
  95. {
  96. cnt[0]++;
  97. }
復(fù)制代碼

現(xiàn)在如果直接用以上編譯出來(lái)的程序的話,上電沒(méi)顯示。請(qǐng)教壇內(nèi)大神。這程序還要修改什么地方才可以移植到如上圖的應(yīng)用中。謝了!


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:146949 發(fā)表于 2017-3-3 16:59 | 只看該作者
我把IO腳配置了一下,你再試試
#include "reg51.h"
//#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sfr P0M0        =   0x94;   //0000,0000 端口0模式寄存器0
sfr P0M1        =   0x93;   //0000,0000 端口0模式寄存器1
sfr P1M0        =   0x92;   //0000,0000 端口1模式寄存器0
sfr P1M1        =   0x91;   //0000,0000 端口1模式寄存器1
sfr P2M0        =   0x96;   //0000,0000 端口2模式寄存器0
sfr P2M1        =   0x95;   //0000,0000 端口2模式寄存器1
sfr P3M0        =   0xB2;   //0000,0000 端口3模式寄存器0
sfr P3M1        =   0xB1;   //0000,0000 端口3模式寄存器1
uchar code SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,
                0x49,0x41,0x1f,0x01,0x09};
uchar data cnt[5];//在data區(qū)定義5位長(zhǎng)度的數(shù)組,用來(lái)存放計(jì)數(shù)值
uchar data pre_cnt[5];//在data區(qū)定義5位長(zhǎng)度的數(shù)組,用來(lái)存放預(yù)置值
sbit P3_7=P3^7;
sbit P3_6=P3^6;
sbit P3_5=P3^5;
//sbit P3_4=P3^4;
sbit P3_3=P3^3;
sbit P3_2=P3^2;
sbit P3_1=P3^1;
sbit P3_0=P3^0;
sbit drv=P3^4;//定義輸出驅(qū)動(dòng)端
bit set_flag;//定義工作標(biāo)志
bit out_flag;//定義輸出標(biāo)志
bit keydown_flag;//鍵按下標(biāo)志
/****************************/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<5;j++)
{;}}
}
/**********************************************/
void scan_key(void)          //掃描S1~S5鍵子程序開(kāi)始
{uchar i,m=0x08;         //定義兩個(gè)字符型局部變量,并賦值0x01給m
P3_6=0;P3_7=1;                //禁止發(fā)送給顯示器,消隱有效
for(i=0;i<5;i++)        //循環(huán)5次
{
SBUF=255-m;while(!TI);TI=0;         //依次發(fā)送數(shù)據(jù)使IC2的輸出從右至左的列線為0
if(!P3_5)pre_cnt[i]++;                 //若檢測(cè)到P3.5為0,說(shuō)明某列線送出0時(shí)與連接
                             //該列線的按鍵被按下,數(shù)組中對(duì)應(yīng)的存放單元加1
m<<=1;                                                //m的取值使從右向左的下一條列線為0
}                                                        //掃描S1~S5鍵子程序結(jié)束
//------------------------
for(i=0;i<5;i++)                              //循環(huán)5次        
{if(pre_cnt[i]>9)pre_cnt[i]=0;}                  //對(duì)數(shù)組中的5個(gè)單元進(jìn)行調(diào)整,其范圍為0~9
}
/************************************/
void dis_cnter(void)                                 //顯示計(jì)數(shù)器值子程序開(kāi)始
{uchar i;                                                         //定義字符型局部變量i
P3_7=1;P3_6=1;                                                 //消隱有效,允許顯示
for(i=0;i<5;i++)                                         //循環(huán)5次
{SBUF=SEG7[cnt[i]];while(!TI);TI=0;}  //根據(jù)8個(gè)單元的計(jì)數(shù)值查表發(fā)送顯示
P3_7=0;                                                                  //關(guān)閉消隱,正常顯示
}                                                                          //顯示計(jì)數(shù)器值子程序結(jié)束
/**********************************************/
void dis_pre_cnter(void)
{uchar i;
P3_7=1;P3_6=1;
SBUF=SEG7[pre_cnt[0]]&0xfe;while(!TI);TI=0;
//----------------------------------------
for(i=1;i<5;i++)
{SBUF=SEG7[pre_cnt[i]];while(!TI);TI=0;}
P3_7=0;
}
/****************************************/
void cnter(void)                                                 //計(jì)數(shù)轉(zhuǎn)換子程序開(kāi)始
{uchar i;                                                                 //定義字符型局部變量i
for(i=0;i<4;i++)                                                 //循環(huán)5次
{if(cnt[i]>9){cnt[i]=0;cnt[i+1]++;}}         //若計(jì)數(shù)器某位值大于9,則該位回0,
//------------------------------------         //而高位被進(jìn)位加1
if(cnt[4]>9){for(i=0;i<5;i++)cnt[i]=0;}// 若計(jì)數(shù)器最高位值大于9,則計(jì)數(shù)器全清0
}                                                                           //計(jì)數(shù)轉(zhuǎn)換子程序結(jié)束
/***************************************************/
void pt_cnt(void)                                           //輸出控制子程序開(kāi)始
{
if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&(cnt[4]==pre_cnt[4]))        
           //若計(jì)數(shù)值等于預(yù)置值
out_flag=1;        
//drv=1;                                                                           //輸出標(biāo)志置1
        else out_flag=0;                                                          //否則輸出標(biāo)志置0
//==========================
if(out_flag)drv=0;                                                                 //若輸出標(biāo)志為1,輸出端(P3.4)置0,驅(qū)動(dòng)光耦U2
else drv=1;                                                         //若輸出標(biāo)志為1,輸出端(P3.4)置0,驅(qū)動(dòng)光耦U2                                                                                 //否則輸出端(P3.4)置1
}                                                                                                 //輸出控制子程序結(jié)束
/********************************************/
void main(void)                                                                        //主程序開(kāi)始
{        
        P0M0 = P0M1 = 0x00;//IO腳配置,按普通51輸入輸出方式
        P1M0 = P1M1 = 0x00;
        P2M0 = P2M1 = 0x00;
        P3M0 = P3M1 = 0x00;
       
              IE=0x84;                                                                   //開(kāi)放CPU中斷,開(kāi)放外中斷1的中斷
        IT1=1;                                                                           //置外中斷1為邊沿觸發(fā)
        while(1)                                                                   //無(wú)限循環(huán)
        {P3_6=0;P3_7=1;                                                           //禁止發(fā)送給顯示器,消隱有效
        SBUF=0x00;while(!TI);TI=0;                                  //向IC2發(fā)送0x00,使IC2輸出為全0
        if((P3&0x24)!=0x24)keydown_flag=1;                  //檢測(cè)P3.2、P3.5是否為高電平。
                                                                                          //若不為高電平,說(shuō)明有鍵按下,鍵被按下標(biāo)志置1
        else keydown_flag=0;                                          //否則,鍵被按下標(biāo)志置0
        //--------------------------
        SBUF=0xfe;while(!TI);TI=0;                                 //向IC2發(fā)送0xfe
        if(!P3_2)set_flag=!set_flag;                         //若P3.2為0,說(shuō)明S9鍵按下,標(biāo)志set_flag取反
        //=============================================
        if(!set_flag){cnter();dis_cnter();
        pt_cnt();delay(100);}                       //若標(biāo)志set_flag為0,調(diào)用計(jì)數(shù)、顯示計(jì)數(shù)、輸出控制的子程序
        else {scan_key();dis_pre_cnter();delay(10);}//否則標(biāo)志set_flag為1,調(diào)用掃描S1~S8鍵、顯示預(yù)置值的子程序
        //=============================================
        if(keydown_flag)delay(300);         //因有鍵按下,調(diào)用延時(shí)300mS子程序,
        }                                                         //以免調(diào)整鍵值的速度過(guò)快
}                                                                 //主程序結(jié)束
/************************************************/
void extern_int1(void) interrupt 2 using 1
{
cnt[0]++;
}

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
perfect123 + 15 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:46999 發(fā)表于 2017-3-3 18:02 | 只看該作者
wosiyabo 發(fā)表于 2017-3-3 16:59
我把IO腳配置了一下,你再試試
#include "reg51.h"
//#include "intrins.h"

感謝,晚上試下。
回復(fù)

使用道具 舉報(bào)

地板
ID:164339 發(fā)表于 2017-3-3 18:31 | 只看該作者
只要把15單片機(jī)IO口配置成普通IO,然后下載的時(shí)候,將晶振頻率選擇12MHz就可以
回復(fù)

使用道具 舉報(bào)

5#
ID:46999 發(fā)表于 2017-3-3 18:57 | 只看該作者
本帖最后由 維超 于 2017-3-3 19:37 編輯
wosiyabo 發(fā)表于 2017-3-3 16:59
我把IO腳配置了一下,你再試試
#include "reg51.h"
//#include "intrins.h"

非常感謝你的幫助。下載試了還是一樣的。數(shù)碼管關(guān)斷狀態(tài),沒(méi)顯示
回復(fù)

使用道具 舉報(bào)

6#
ID:46999 發(fā)表于 2017-3-3 18:59 | 只看該作者
想吃小紅帽的狼 發(fā)表于 2017-3-3 18:31
只要把15單片機(jī)IO口配置成普通IO,然后下載的時(shí)候,將晶振頻率選擇12MHz就可以

感謝!原程序是6M的晶振
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久影音先锋 | 久久福利网站 | 日本视频一区二区三区 | 中文字字幕在线中文乱码范文 | 欧美 中文字幕 | 一区二区高清 | 欧美一区在线视频 | 中文字幕 亚洲一区 | 黄色免费av | 欧美在线天堂 | 国产精品久久久久久久久污网站 | 成人欧美一区二区三区 | 日本一区二区不卡 | 国产情侣在线看 | 成人三区| 精品视频一区二区三区 | 日本成人午夜影院 | 欧美6一10sex性hd | 狠狠入ady亚洲精品经典电影 | 国产免费一区二区三区 | 超碰人人艹 | 国产精品大全 | 亚洲国产成人精品女人久久久 | 99精品久久| 成人免费网站 | 亚洲一区二区三区四区在线观看 | 色综合久久88色综合天天 | 久久99久久99精品免视看婷婷 | 美女黄18岁以下禁止观看 | 日韩精品a在线观看图片 | 久久久国产一区二区三区 | 国产精品一区二区视频 | 欧美电影免费观看 | 中文字幕国产日韩 | 精品久久久久久久久久久 | 久久国产精品一区 | h视频在线播放 | 精品国产一区二区 | 国产精品久久久免费 | 亚洲国产一区二区视频 | 免费观看的av毛片的网站 |