linux 卸载 sdcc,stc89c52在Linux或MacOS下使用sdcc和stcgal中断与LCD测试代码

外部中断:

#include<8052.h>

#define LSA P1_5

#define LSB P1_6

#define LSC P1_7

void EXint_Init(void);

void Delayms(unsigned int);

void Down2Up(int);

void Up2Down(int);

void EXINT0() __interrupt 0;

void EXINT1() __interrupt 2;

void main()

{

EXint_Init();

LSA=0;

LSB=0;

LSC=0;

while(1)

{

P0 = 0xff;

Delayms(250);

P0 = 0x00;

Delayms(250);

}

}

void EXint_Init()

{

IT0=1;

IT1=0;

//IPH=0x40;

PX1=1;

EA=1;

EX0=1;

EX1=1;

}

void Delayms(unsigned int xms)

{

unsigned int i,j;

for(i = xms;i > 0;i--)

{

for (j = 110;j > 0;j--);

}

}

void EXINT0() __interrupt 0

{

Down2Up(3);

}

void EXINT1() __interrupt 2

{

Up2Down(3);

}

void Down2Up(int x)

{

int i, j;

unsigned char sel=0xfe;

for(i=0;i

{

for(j=0;j<8;j++)

{

P0 = sel;

Delayms(250);

sel =sel<<1;

}

sel=0xfe;

}

}

void Up2Down(int x)

{

int i, j;

unsigned char sel=0x7f;

for(i=0;i

{

for(j=0;j<8;j++)

{

P0 = sel;

Delayms(250);

sel=sel>>1;

}

sel=0x7f;

}

}

定时器中断:

#include <8052.h>

#define Wave P0_1 //位定义,定义完之后,以下 Wave 即代表P0.1

#define LSA P1_5 // P0口所接的发光二极管由开发板上的WaveS0控制,

#define LSB P1_6 //且该位连接到74HC138三八译码器的输出端,

#define LSC P1_7 //因此P1.5,P1.6,P1.7需赋值0以选中该位。

unsigned char cnt = 0; //定义一个计数变量,记录 T0 溢出次数

void Timer0() __interrupt 1;

/************************************************************/

void main () //主函数

{

LSA=0; //本开发板的P0发光二极管片选地址

LSB=0;

LSC=0;

Wave = 0; //初始化P1.0=0

TMOD = 0x01; //设置定时器T0工作方式1

TL0 = 47104%256; //计数器初值

TH0 = 47104/256;

TR0 = 1; //启动定时器

ET0 = 1; //开中断

EA = 1;

while(1); //模拟主程序其它工作

}

/************************************************************/

void Timer0() __interrupt 1 //定时器 T0 中断响应

{

TL0 = 47104%256;//计数器初值

TH0 = 47104/256;

cnt++; //计数值自加 1

if (cnt > 49) //判断 T0 溢出是否达到 50 次,100次

{

Wave=1;

if (cnt > 99)

{

cnt=0;

Wave=0;

}

//cnt = 0; //达到 50 次后计数值清零

/*if( Wave = 0 )

{

Wave = 1;

}

else

{

Wave = 0;

}*/

//Wave = ~Wave; //Wave 取反:0-->1、1-->0

}

}

helloworld:

#include<8052.h>

#define uchar unsigned char

#define uint unsigned int

#define lcden P1_2

#define lcdrs P1_0

#define rw P1_1

uchar table[] = "Hello World!";

uchar num;

void delay(uint z) {

uint x, y;

for(x = z; x > 0; x--)

for(y = 110; y > 0; y--);

}

void write_com(uchar com) {

lcdrs = 0;

P0 = com;

delay(5);

lcden = 1;

delay(5);

lcden = 0;

}

void write_data(uchar date) {

lcdrs = 1;

P0 = date;

delay(5);

lcden = 1;

delay(5);

lcden = 0;

}

void init() {

rw = 0;

lcden = 0;

write_com(0x38);

write_com(0x0e);

write_com(0x06);

write_com(0x01);

write_com(0x80);

}

void main() {

init();

for(num = 0; num < 12; num++) {

write_data(table[num]);

delay(100);

}

while(1);

}

本文同步分享在 博客“zhangrelay”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值