找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4799|回复: 7
收起左侧

AT89C51单片机改成STC15的程序要注意哪些事项啊?

[复制链接]
ID:521756 发表于 2019-4-25 21:37 | 显示全部楼层 |阅读模式
我是一个单片机的白纸,学校有微机原理课也有数电课,但感觉对我们的编程能力并没什么作用【摊手】,现在要求我们动手做一个八位抢答器,我在百度伸手了一个C51的程序,但没法和我们的板子兼容,想问问各位大神是如何快速上手的,学校发的视频教程看完以后只会控制几个LED灯很崩溃但也只能瞎着急【掀桌】,我不知道我这个问题是不是很蠢,还在继续看,如果我自己解决了的话就删了,感谢各位
#include <reg52.h>        
        #define uint unsigned int
        #define uchar unsigned char
        unsigned char code table[]={0xc0,0xf9,0xa4,
    0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};
        sbit start=P3^6;
        sbit reset=P3^7;
        sbit key1=P1^0;
        sbit key2=P1^1;               
        sbit key3=P1^2;
        sbit key4=P1^3;
        sbit key5=P1^4;
        sbit key6=P1^5;
        sbit key7=P1^6;
        sbit key8=P1^7;
        sbit jia=P3^4;
        sbit jian=P3^5;
        bit action = 0;
        uchar second=10,a[7]={0};
        uchar timer0_count = 0;
        uchar number=0;
        uchar number_display = 0;
        uchar k;
        void delay(uint z)
        {
                uint x,y;
                for(x=z;x>0;x--)
                        for(y=120;y>0;y--);
        }
        void display(uchar number,uchar second)
        {                        
                P2 = 0x01;
                P0 = table[second];        
                delay(1);
                P2 = 0x02;
                P0 = table[number];
                delay(1);
                P2 = 0x04;
                P0 = table[a[0]];
                delay(1);
                P2 = 0x08;
                P0 = table[a[1]];
                delay(1);
                P2 = 0x10;
            P0 = table[a[2]];
                delay(1);
                P2 = 0x20;
                P0 = table[a[3]];
                delay(1);
                P2 = 0x40;
                P0 = table[a[4]];
                delay(1);
                P2 = 0x80;
                P0 = table[a[5]];
                delay(1);        
        }
        void start_keyscan()
        {
            void fengling();
                while(start == 0)
                {
                    key7=0;
                        display(number_display,second);
                        if(start == 1)
                        {
                            key7=1;
                                action  = 1;
                                TR0 = 1;               
                        }
                }        
        }
        
        uchar key_scan8()
        {
                if(key1 == 0)
                {
                        delay(8);
                        if(key1 == 0)
                        {
                                number  = 1;
                                number_display = number;
                        }
                }
                                if(key2 == 0)
                {
                        delay(8);
                        if(key2 == 0)
                        {
                                number  = 2;
                                number_display = number;
                        }
                }
                if(key3 == 0)
                {
                        delay(8);
                        if(key3 == 0)
                        {
                                number  = 3;
                                number_display = number;
                        }
                }
                if(key4 == 0)
                {
                        delay(8);
                        if(key4 == 0)
                        {
                                number  = 4;
                                number_display = number;
                        }
                }
                if(key5 == 0)
                {
                        delay(8);
                        if(key5 == 0)
                        {
                                number  = 5;
                                number_display = number;
                        }
                }
                if(key6 == 0)
                {
                        delay(8);
                        if(key6 == 0)
                        {
                                number  = 6;
                                number_display = number;
                        }
                }                                                        
                if(number_display != 0)        
                {
                        return number_display;
                }
                else
                {
                        return 0;
                }               
        }
        void reset_keyscan()
        {
                if(reset == 0)
                {
                        delay(8);
                        if(reset == 0)
                        {
                                number_display = 0;                        
                               second=10;
                }
                }        
        }
        void main()
        {
                TMOD=0x01;
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                EA=1;
                ET0=1;
                TR0=0;
                P2=0x00;                                
                while(1)
                {
                    reset_keyscan();
                        start_keyscan();                    
                         if(jia==0&&a[number-1]<9)
              {  
                 delay(10);
                 while(jia==0)
                     display(number_display,second);
                     a[number-1]=a[number-1]+1;           
              }
            if(jian==0&&a[number-1]>0)
              {
                 delay(10);
                     while (jian==0)
                     display(number_display,second);
                     a[number-1]=a[number-1]-1;
              }
                        while(action)
                        {
                         while(!key_scan8())              
                        {        
                                display(number_display,second);
                                if(second == 0)
                                {
                                        second = 10;
                                        break;
                                }
                        }
                                        TR0 = 0;
                                        key7=0;
                                        delay(80);
                                   display(number_display,second);                                                
                 key7=1;
                                        action = 0;
                                        break;
                        }
                        display(number_display,second);        
                }
        }
        void timer0() interrupt 1
        {
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                timer0_count ++;
                if(timer0_count == 20)
                {        
                        second --;
                        timer0_count = 0;
          if(second==0)
                        {
                           key7=0;
                           delay(60);
                           key7=1;
                     }
                 }                                
         }

全新升级版CT107S V1.5 原理图 【彩版】.pdf

165.66 KB, 下载次数: 9

开发板原理图

回复

使用道具 举报

ID:155507 发表于 2019-4-25 23:46 | 显示全部楼层
老式51单片机都是12T,现在有部分单片机采用1T模式,如STC12, STC15系列等。
所谓12T模式指一个机器周期=12个时钟周期
而1T模式指的是一个机器周期=1个时钟周期
比如对于常用的12MHz晶振来说:
12T模式,一个机器周期为1us
1T模式,一个机器周期为1/12us.

延时肯定要改的,还有单片机的头文件要改的
回复

使用道具 举报

ID:93224 发表于 2019-4-26 00:16 | 显示全部楼层
注意延时的问题
回复

使用道具 举报

ID:572103 发表于 2019-8-12 17:18 | 显示全部楼层
延时函数,中断,引脚定义都要改一下。
回复

使用道具 举报

ID:936311 发表于 2021-6-10 22:49 | 显示全部楼层
angmall 发表于 2019-4-25 23:46
老式51单片机都是12T,现在有部分单片机采用1T模式,如STC12, STC15系列等。
所谓12T模式指一个机器周期=1 ...

大佬,有没有引脚上功能什么的应该注意啊
回复

使用道具 举报

ID:123289 发表于 2021-6-11 13:11 | 显示全部楼层
很简单,读通两个芯片的手册,一切都明白了。本方法适用于所有类似的问题。
回复

使用道具 举报

ID:261837 发表于 2021-6-14 13:35 来自手机 | 显示全部楼层
头文件寄存器和引脚输出配置改好就行了
回复

使用道具 举报

ID:932858 发表于 2021-6-26 14:48 | 显示全部楼层
请问楼主当时怎么改的呢,现在我也有类似需求,不知道怎么改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表